Share via


Direct3D 11 機能データを使用して Direct3D 特徴レベルを補完する

最近のバージョンの Windows で追加された機能など、オプション機能のデバイス サポートをチェックする方法について説明します。

Direct3D 機能レベル は、さまざまな世代のグラフィックス ハードウェアにほぼ対応する、明確に定義された GPU 機能のセットを示します。 これにより、ハードウェアの能力をチェックするタスクが大幅に簡略化され、さまざまなデバイスで一貫したエクスペリエンスが提供されます。

従来のハードウェア、モバイル ハードウェア、最新のハードウェアなど、さまざまなハードウェア実装間の一部の差異を考慮するために、一部の機能は省略可能と見なされます。 これらの機能のサポートは、 ID3D11Device::CheckFeatureSupport を呼び出し、関連するD3D11_FEATURE_DATA_* 構造体を指定することによって決定できます。 このトピックでは、さまざまなオプションの Direct3D 11 機能、それらの一部がどのように連携するか、および単一のオプション機能のチェックを回避する方法について説明します。

オプション機能のサポートをチェックする方法

ID3D11Device::CheckFeatureSupport を呼び出し、使用するオプション機能を表す構造体を指定します。 メソッドが S_OKを返す場合は、オプション機能をサポートする Direct3D ランタイムのバージョンを使用していることを意味します。 E_INVALIDARGが返される場合は、オプション機能が追加される前から Direct3D 11 ランタイムのバージョンを使用していることを意味します。つまり、オプション機能は、同じバージョンの Direct3D 11 以降で導入されたその他のオプション機能と共に使用できません。

機能サポート チェックに必要な作業を最小限に抑えることができますか?

適切な Direct3D 11 ランタイム (通常は Windows バージョンに関連付けられている) に加えて、グラフィックス ドライバーも、オプション機能をサポートするのに十分な最新の状態である必要があります。 WDDM 仕様では、ハードウェアでサポートできる場合は、オプションの機能をサポートする必要があります。 そのため、グラフィックス ドライバーが特定のバージョンの Windows で追加されたオプション機能の 1 つをサポートしている場合、通常、グラフィックス ドライバーはそのバージョンの Windows で追加された他の機能をサポートしていることを意味します。 たとえば、デバイス ドライバーが機能レベル 9 のシャドウをサポートしている場合、デバイス ドライバーが WDDM 1.2 以上であることがわかります。

メモMicrosoft Direct3D デバイスで機能レベル 11.1 がサポートされている場合、SAD4ShaderInstructionsExtendedDoublesShaderInstructions を除き、D3D11_FEATURE_DATA_D3D11_OPTIONSで示されるすべてのオプション機能が自動的にサポートされます。

ランタイムは常に、メンバーの次のグループを同一に設定します。 つまり、グループ化内のすべての値は TRUE または FALSE になります。

  • DiscardAPIsSeenByDriverFlagsForUpdateAndCopySeenByDriver
  • ClearViewCopyWithOverlapConstantBufferPartialUpdateConstantBufferOffsettingおよび MapNoOverwriteOnDynamicConstantBuffer
  • MapNoOverwriteOnDynamicBufferSRVMultisampleRTVWithForcedSampleCountOne

機能レベル 11.2 オプション (D3D11_FEATURE_D3D11_OPTIONS1): このフィールドで示されるオプションの機能は独立しており、個別にチェックする必要があります。

Windows RT 8.1 および Windows Phone 8.1 デバイスでの機能サポート

Windows RTタブレット デバイスは、さまざまな機能レベルとオプション機能をサポートでき、消費電力の削減に最適化され、個別の GPU ではなく統合グラフィックスを使用できます。 ARM デバイス用の Windows ストア アプリでは、機能レベル 9.1 をサポートする必要があります。 Windows RT用の DirectX アプリでは、電源とサイクルを節約できるオプション機能 (単純なインスタンス化など) を利用できる必要があります。

Windows Phone 8 台のモバイル デバイスは、特定のオプション機能を備えた機能レベル 9.3 をサポートしています。 Windows Phone 8 については、「Direct3D 機能レベル 9_3」を参照してください。

Direct3D 11 のオプション機能は何ですか?

この記事の残りの部分では、Direct3D 11.2 で使用できるオプション機能について説明します。 フィーチャーは、追加された日時によって時系列順に記述されるため、Direct3D 11 の異なるバージョンの機能を理解できます。

機能レベル 10 に対するオプションのコンピューティング シェーダーのサポート

機能レベル 10 デバイスでは、次の機能を常に使用できます。

D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS:TRUE の場合、デバイスはコンピューティング シェーダーをサポートします。 これには、生バッファーと構造化バッファーのサポートが含まれます。

機能レベル 10_0 または 10_1 デバイスがこの機能をサポートしている場合、デバイスでコンピューティング シェーダー 4.1 がサポートされるとは限りません。 ID3D11Device::CreateComputeShader がコンピューティング シェーダー 4.1 プログラムで例外をスローする場合は、コンピューティング シェーダー 4.0 にフォールバックするようにアプリを準備する必要があります。

機能レベル 9 のオプション機能

Windows 8 以降の機能レベル 9 には、次の機能が追加されます。

D3D11_FEATURE_DATA_D3D9_OPTIONS: power-of-2 以外のテクスチャを使用したラップ テクスチャ アドレス指定のサポートを示します。 これがサポートされている場合は、このようなテクスチャでD3D11_TEXTURE_ADDRESS_MODE_WRAPを使用できます。

D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT: シェーダー モデル 4.0 の機能レベル9_xシェーダーでの比較サンプラーのサポートを示します。 これは、ピクセル シェーダーの深度テストに使用され、シャドウ マッピングやステンシルなどの一般的な手法をサポートできます。

Windows 8.1以降の機能レベル 9 デバイスには、次の機能が追加されました。

D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT: DirectX 9 レベルのハードウェアで使用できる単純なインスタンス化機能のサポートを示します。 単純なインスタンス化とは、入力レイアウトの定義に使用されるD3D11_INPUT_ELEMENT_DESC構造体のすべての InstanceDataStepRate メンバーが 1 である必要があることを意味します。 機能レベル 9.3 以降をサポートするデバイスには、インスタンス化の完全なサポートが既に含まれています。

シェーダー プログラムのオプションの浮動小数点精度のサポート

D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT: この構造体のフィールドは、最小有効桁数が有効になっている場合は浮動小数点数の長さを示し、完全な 32 ビット浮動小数点精度のみがサポートされている場合は 0 を示します。

機能レベル 9 デバイスの場合、頂点シェーダーの最小精度はピクセル シェーダーとは異なる場合があります。 頂点シェーダーの精度は、 AllOtherShaderStagesMinPrecision フィールドに示されます。

D3D11_FEATURE_DATA_DOUBLES: 機能レベル 11 デバイスは、シェーダー モデル 5.0 プログラム内で倍精度計算をサポートできます。 シェーダー内での倍精度計算のサポートは、浮動小数点を計算シェーダー プログラム内で倍精度に変換できることを意味し、各シェーダー パス内で高い精度の計算の利点を提供します。 倍精度数値は、出力バッファーに書き込まれる前に float に戻す必要があります。 倍精度除算は必ずしもサポートされないことに注意してください。

Direct3D 11.2 の追加機能

Direct3D 11.2 には、Direct3D 11 デバイスでサポートできる 4 つの新しいオプション機能が追加されています。 これらの機能は、 D3D11_FEATURE_DATA_D3D11_OPTIONS1 構造にあります。

TiledResourcesTier: タイルリソースのサポートを示し、サポートされているレベルを示します。

MinMaxFiltering: フィルター処理結果を最小値 (または最大値) と比較するD3D11_FILTER_MINIMUM_* および D3D11_FILTER_MAXIMUM_* フィルターオプションのサポートを示します。 「D3D11_FILTER」を参照してください。

ClearViewAlsoSupportsDepthOnlyFormats: 深度バッファー リソース ビューのクリアのサポートを示します。

MapOnDefaultBuffers:D3D11_USAGE_DEFAULT フラグを使用して作成されたレンダー ターゲット バッファーのマッピングのサポートを示します。

タイル ベースのレンダリング

D3D11_FEATURE_DATA_ARCHITECTURE_INFO: グラフィックス デバイスがレンダリング コマンドをバッチ処理し、既定でタイルベースのレンダリングを実行するかどうかを示します。 これは、グラフィックス エンジンの最適化のヒントとして使用できます。

開発とデバッグのオプション機能

D3D11_FEATURE_DATA_D3D11_OPTIONS::D iscardAPIsSeenByDriver: 開発中にこのメンバーを監視して、 DiscardViewDiscardResource が役に立つ可能性があるハードウェア上のレガシ ドライバーを除外できます。

D3D11_FEATURE_DATA_MARKER_SUPPORT: これは、ハードウェアとドライバーが GPU プロファイリングのデータ マーキングをサポートしている場合にサポートされます。

デバイス