方法: デバイス機能レベルを取得する

このトピックでは、デバイスでサポートされている最高の 機能レベル を取得する方法について説明 します。 Direct3D 11 デバイスは、 D3D_FEATURE_LEVEL 列挙で定義されている固定機能レベルのセットをサポートします。 デバイスでサポートされている最も高い 機能レベル がわかっている場合は、そのデバイスに適したコード パスを実行できます。

デバイス機能レベルを取得するには

  1. ppDevice パラメーターに NULL を指定しながら、D3D11CreateDevice 関数または D3D11CreateDeviceAndSwapChain 関数を呼び出します。 これは、デバイスの作成前に行うことができます。

    - または -

    デバイスの作成後 に ID3D11Device::GetFeatureLevel を 呼び出します。

  2. 最後の手順から返された D3D_FEATURE_LEVEL 列挙の値を調べて、サポートされている機能レベルを確認します。

次のコード例では、 D3D11CreateDevice 関数を呼び出して、サポートされている最も高い機能レベルを確認する方法を示します。 D3D11CreateDevice は、サポートされている最も高い機能レベルを FeatureLevel 変数に格納します。 このコードを使用して、D3D11CreateDevice から返される列挙型D3D_FEATURE_LEVELの値を調べることができます。 このコードでは、すべての機能レベルが明示的に一覧表示されることに注意してください (Direct3D 11.1 および Direct3D 11.2 の場合)。

注意

Direct3D 11.1 ランタイムがコンピューターに存在し、 pFeatureLevelsNULL に設定されている場合、この関数は 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_1を含む D3D_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 の使用方法