Windows 10 ディスプレイおよびグラフィックス ドライバーの新機能

このページでは、Windows 10 バージョン 2004 (WDDM 2.7) のディスプレイ ドライバーとグラフィックス ドライバーの新機能について説明します。 これまでのバージョンの WDDM 2.X で追加された機能については、以前の WDDM 2.X バージョンの新機能を参照してください。

メッシュ シェーダー

メッシュ シェーダーは、ラスタライズを使用するときの Direct3D 12 のグラフィックス パイプラインの柔軟性とパフォーマンスを向上させる手段です。 メッシュ シェーダーは入力アセンブラー (特に頂点シェーダーとジオメトリ シェーダーのステージ) に代わる新しい機能であり、入力アセンブラーの固定機能の動作の一部を柔軟な機能の動作に置き換えます。 メッシュ シェーダーを使用すると、アプリケーションは入力アセンブラーよりも早くカリングを適用できるため、より効率的にカリングを適用できます。 プリミティブは GPU でインデックス データを処理しなくてもカリングできます。3D アプリケーションのプリミティブ数は時間の経過とともに増加の一途をたどることが確認されているので、これは非常に有益です。

ピクセル シェーダーがアタッチされている場合、メッシュ シェーダーから出力されるプリミティブは、ピクセル シェーダー ステージに直接フィードされます。

メッシュ シェーダー機能を使用すると、メッシュ シェーダー ステージとともに、増幅シェーダーという新しいステージが導入されます。 増幅シェーダーは GPU テセレーション ステージに代わるものです。 アプリケーションは、必要に応じてメッシュ シェーダーを何回か呼び出すように増幅シェーダーを設定します。 増幅シェーダーはオプションのステップであり、アプリケーションはジオメトリの詳細度レベルを動的に制御できます。

メッシュ シェーダー機能には、新しいシェーディング言語構造と UMD の変更が含まれます。 メッシュ シェーダーのデバイス報告機能として、MeshShaderTier という名前のフィールドが D3D12DDI_D3D12_OPTIONS_DATA_0073 から報告されます。 また、2 つの新しいシェーダー ステージが導入されるので、D3D12DDIARG_CREATE_PIPELINE_STATE_0075 には hMeshShaderhAmplificationShader という 2 つの新しいフィールドがあります。 開始するには、コマンド リスト DDI PFND3D12DDI_DISPATCH_MESH_0074 があり、間接ディスパッチの D3D12DDI_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH もあります。

DirectX レイトレーシング (DXR) 1.1

WDDM 2.7 には Direct3D 12 の DXR の初期リリースに基づく、いくつかの新機能と機能強化が導入されています。

  • インライン レイトレーシングは、個別の動的シェーダーまたはシェーダー テーブルを使用しないレイトレーシングの代替形式です。 これは、"動的シェーダーベース" のレイトレーシングと呼ばれる DXR 1.0 形式のレイトレーシングを使用するシェーダーが適合しないあらゆるケースで、開発者に柔軟性と利便性を与えるものです。 インライン レイトレーシングは、コンピューティング シェーダー、ピクセル シェーダーなど、任意のシェーダーのステージで使用できます。 これは、WDDM 2.7 で使用できると言われていますが、DDI の変更には対応していません。

  • アプリケーションは、ExecuteIndirect を介して DispatchRays を呼び出し、GPU のレイトレーシング処理を構成することができます。 レイトレーシング処理をカリング、並べ替え、または調整するアプリケーションにとってこれは有用です。アプリケーションは、シェーダーを使用してその処理を実行します。 これに伴い、D3D12DDI_INDIRECT_ARGUMENT_TYPE 列挙値が用意されました。 間接レイトレーシング ディスパッチを使用する場合、execute-indirect バッファーの各要素は D3D12DDIARG_DISPATCH_RAYS_0054 型です。

  • さまざまなシェーダーの組み合わせを考慮してパイプラインの状態を作成するオーバーヘッドは、3D コンピューター グラフィックスの難しい問題の 1 つです。 DXR 1.1 には add-to-state-object という役立つ機能が含まれています。 API で公開されているように、AddToStateObject() により、アプリケーションは追加される内容にのみ比例する CPU オーバーヘッドで、既存の状態オブジェクトにシェーダーを追加できます。 これに伴い、PFND3D12DDI_ADD_TO_STATE_OBJECT_0072PFND3D12DDI_CALC_PRIVATE_ADD_TO_STATE_OBJECT_SIZE_0072 という 2 つのデバイス DDI 関数も導入されました。

一般的な機能報告には、レベル 1.1 の報告に使用される新しい列挙値 D3D12DDI_RAYTRACING_TIER_1_1 があります。

サンプラー フィードバック

サンプラー フィードバックは、テクスチャのサンプリング情報と場所をキャプチャして記録するための Direct3D 12 の機能です。 サンプラー フィードバックがないと、開発者にはこうした詳細が見えません。 この機能を使用すると、アプリケーションは、サンプリングされた MIP を認識できるだけでなく、それらの MIP 上の場所を認識できるようになります。 アプリケーションでは、次のようなサンプリング情報に関心がある場合があります。

  • テクスチャ ストリーミング システムで次に読み込む内容を正確に把握する
  • テクスチャ空間シェーディング レンダリング システムでシェーディングする必要がある内容を正確に把握する

サンプル操作のフィードバックは、不透明なリソースの一種として機能する "フィードバック マップ" に書き込まれますが、アプリケーションで検査可能な情報を取得するためにはこれをコード変換する必要があります。フィードバック自体の書き込みについては、シェーダー モデル 6_5 に HLSL 構造体があります。 セマンティクスは、Texture2D のサンプルとそのバリアントのセマンティクスによく似ています。

サンプラー フィードバックは新しいシェーディング言語の構造体を適切に使用しますが、UMD の変更も含まれます。 デバイス機能検査の場合は、D3D12DDI_D3D12_OPTIONS_DATA_0073 で報告される SamplerFeedbackTier という名前の上限があります。 リソースの作成は、新しいフィールドであるサンプラー フィードバック MIP 領域を取得するように変更されました。タイプは D3D12DDI_MIP_REGION_0075 です。 これに伴い、新しい記述子作成メソッド PFND3D12DDI_CREATE_SAMPLER_F Enterprise Edition DBACK_UNORDERED_ACCESS_VIEW_0075 も導入されました。

Content Protection

WDDM 2.7 で、オプションの保護リソースのサポートが Direct3D 12 ビデオ操作に追加されました。 バックグラウンドでは、WDDM 2.7 より前に保護リソースが存在していましたが、クロス API 共有とグラフィックスまたはコンピューティングでしか使用できず、ビデオでは使用できませんでした。

保護リソースのサポートは、ドライバーからグローバルなものとして報告されるわけではありません。操作単位です。 特定の操作で保護リソースがサポートされることがドライバーから報告された場合は、その操作で保護リソースの読み書きが可能であり、リソースの種類で許可されていればクロス API 共有がサポートされることを意味します。 もう 1 つ言及すべき点は、ドライバーが特定の形式の保護リソースのサポートを要求する場合、その形式を非保護リソースでもサポートする必要があるということです。

WDDM 2.7 では、オプションの D3D12DDI_HPROTECTEDRESOURCESESSION インスタンスを取得するようにリソースの作成方法が変更されています。 セットアップと割り当てを通知するために、オブジェクト作成時にこのパラメーターがドライバーに渡されます。 さらに、保護リソースが操作で使用されるかどうかを示すために、メモリ予算チェックが変更されました。 protected-resource-session パラメーターが NULL 以外であれば、保護リソースに書き込む操作であることを表します。 非保護リソースに書き込むには、操作オブジェクトを再作成する必要があります。

出力が保護リソースである場合、デコーダーとモーション推定の参照は、保護リソースである必要があります。 保護リソースに書き込む場合に、ビデオ処理で保護リソースと非保護リソースの組み合わせから読み取ることがあります。

保護リソースに書き込む 1 つ以上の操作を記録する前に、PFND3D12DDI_Standard Edition TPROTECTEDRESOURCE Standard Edition SSION_0030 を NULL 以外の保護リソース セッションで呼び出す必要があります。 非保護リソースに書き込む 1 つ以上の操作を記録する前に、NULL で PFND3D12DDI_SETPROTECTEDRESOURCESESSION_0030 を呼び出す必要があります。

WDDM 2.7 のコンテンツ保護のための DDI の変更に関する上記のガイド付きツアーよりも詳しい情報については、まずは D3D12DDI_VIDEO_DECODE_PROTECTED_RESOURCES_DATA_0072 をご覧ください。

ツールの履歴バッファー レポートの改良

WDDM 2.7 では、GPU デバッグ ツールで履歴バッファーを使用する方法にメリットを与える DDI の変更が導入されています。 この変更により、一度に 1 つのコマンド リストではなく、複数のコマンド リストに対応する処理を 1 回のコマンド バッファー送信に含めることができます。 この変更によって、GPU デバッグ ツールはアプリケーションのパフォーマンス特性をより正確に報告できます。

この機能は、D3D12DDICAPS_TYPE_0073_SUPPORT_BATCHED_MARKERS によって報告されます。 新しい D3DDDI_MARKERLOGTYPE (列挙値 D3DDDIMLT_BATCHED は、D3DDDI_BATCHEDMARKERDATA に対応) があります。 ETW イベント データ構造は、D3DDDIMLT_BATCHED 型の場合に D3DDDI_BATCHEDMARKERDATA 要素を数個含むように改良されました。

DisplayPort (DP) AUX/I2C

DP 補助 (AUX) チャネルは、DP デバイスの機能の読み取り、リンク トレーニング、トポロジ検出、I2C バス アクセスなどに使用されるデバイスごとのレジスタ ファイルである DP 構成データ (DPCD) へのアクセスを提供します。 まずは DXGK_DP_INTERFACE を参照してください。