Cara: Mendapatkan Tingkat Fitur Perangkat

Topik ini menunjukkan cara mendapatkan tingkat fitur tertinggi yang didukung oleh perangkat. Perangkat Direct3D 11 mendukung serangkaian tingkat fitur tetap yang ditentukan dalam enumerasi D3D_FEATURE_LEVEL . Saat Anda mengetahui tingkat fitur tertinggi yang didukung oleh perangkat, Anda dapat menjalankan jalur kode yang sesuai untuk perangkat tersebut.

Untuk mendapatkan tingkat fitur perangkat

  1. Panggil fungsi D3D11CreateDevice atau fungsi D3D11CreateDeviceAndSwapChain saat menentukan NULL untuk parameter ppDevice . Anda dapat melakukan ini sebelum pembuatan perangkat.

    - atau -

    Panggil ID3D11Device::GetFeatureLevel setelah pembuatan perangkat.

  2. Periksa nilai enumerasi D3D_FEATURE_LEVEL yang dikembalikan dari langkah terakhir untuk menentukan tingkat fitur yang didukung.

Contoh kode berikut menunjukkan cara menentukan tingkat fitur tertinggi yang didukung dengan memanggil fungsi D3D11CreateDevice . D3D11CreateDevice menyimpan tingkat fitur tertinggi yang didukung dalam variabel FeatureLevel. Anda dapat menggunakan kode ini untuk memeriksa nilai jenis D3D_FEATURE_LEVEL enumerasi yang dikembalikan D3D11CreateDevice . Perhatikan bahwa kode ini mencantumkan semua tingkat fitur secara eksplisit (untuk Direct3D 11.1 dan Direct3D 11.2).

Catatan

Jika runtime Direct3D 11.1 ada di komputer dan pFeatureLevels diatur ke NULL, fungsi ini tidak akan membuat perangkat D3D_FEATURE_LEVEL_11_1 . Untuk membuat perangkat D3D_FEATURE_LEVEL_11_1 , Anda harus secara eksplisit menyediakan array D3D_FEATURE_LEVEL yang menyertakan D3D_FEATURE_LEVEL_11_1. Jika Anda menyediakan array D3D_FEATURE_LEVEL yang berisi D3D_FEATURE_LEVEL_11_1 di komputer yang tidak menginstal runtime Direct3D 11.1, fungsi ini segera gagal dengan E_INVALIDARG.

 

HRESULT hr = E_FAIL;
D3D_FEATURE_LEVEL MaxSupportedFeatureLevel = D3D_FEATURE_LEVEL_9_1;
D3D_FEATURE_LEVEL FeatureLevels[] = {
    D3D_FEATURE_LEVEL_11_1,
    D3D_FEATURE_LEVEL_11_0,
    D3D_FEATURE_LEVEL_10_1,
    D3D_FEATURE_LEVEL_10_0,
    D3D_FEATURE_LEVEL_9_3,
    D3D_FEATURE_LEVEL_9_2,
    D3D_FEATURE_LEVEL_9_1
    };

hr = D3D11CreateDevice(
    NULL,
    D3D_DRIVER_TYPE_HARDWARE,
    NULL, 
    0, 
    &FeatureLevels, 
    ARRAYSIZE(FeatureLevels), 
    D3D11_SDK_VERSION, 
    NULL, 
    &MaxSupportedFeatureLevel, 
    NULL 
    );

if(FAILED(hr))
{
    return hr;
}

Bagian Referensi 10Level9 mencantumkan perbedaan antara bagaimana berbagai metode ID3D11Device dan ID3D11DeviceContext bereaksi pada berbagai tingkat fitur 10Level9.

Direct3D 11 pada Perangkat Keras Downlevel

Cara Menggunakan Direct3D 11