如何:取得裝置功能層級

本主題說明如何取得裝置支援的最高功能層級。 Direct3D 11 裝置支援一組固定的功能層級,這些層級定義于 D3D_FEATURE_LEVEL 列舉中。 當您知道裝置支援的最高 功能層級 時,您可以執行適用于該裝置的程式碼路徑。

取得裝置功能層級

  1. 呼叫D3D11CreateDevice函式或D3D11CreateDeviceAndSwapChain函式,同時為ppDevice參數指定Null。 您可以在裝置建立之前執行這項操作。

    - 或 -

    在裝置建立之後呼叫 ID3D11Device::GetFeatureLevel

  2. 檢查上一個步驟中傳回 D3D_FEATURE_LEVEL 列舉的值,以判斷支援的功能層級。

下列程式碼範例示範如何藉由呼叫 D3D11CreateDevice 函式來判斷最高支援的功能層級。 D3D11CreateDevice 會將最高支援的功能層級儲存在 FeatureLevel 變數中。 您可以使用此程式碼來檢查D3D11CreateDevice傳回之D3D_FEATURE_LEVEL列舉型別的值。 請注意,此程式碼會列出 Direct3D 11.1 和 Direct3D 11.2) 明確 (的所有功能層級。

注意

如果電腦上的 Direct3D 11.1 執行時間存在, 且 pFeatureLevels 設定為 Null,則此函式不會建立 D3D_FEATURE_LEVEL_11_1 裝置。 若要建立D3D_FEATURE_LEVEL_11_1裝置,您必須明確提供包含D3D_FEATURE_LEVEL_11_1的D3D_FEATURE_LEVEL陣列。 如果您在未安裝 Direct3D 11.1 執行時間的電腦上提供包含D3D_FEATURE_LEVEL_11_1D3D_FEATURE_LEVEL陣列,此函式會立即失敗並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;
}

10Level9 參考區段列出各種ID3D11Device 和 ID3D11DeviceCoNtext方法在各種 10Level9 功能層級的行為差異。

下層硬體上的 Direct3D 11

如何使用 Direct3D 11