これまでの WDDM 2.X バージョンで追加された機能

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

WDDM 2.6

スーパーウェット インク

スーパーウェット インクは、フロントバッファー レンダリングに関する機能です。 IHV ドライバーは、ハードウェアでサポートされていない形式またはモードの "表示可能な" テクスチャの作成をサポートできます。 これを行うには、アプリから要求されたテクスチャを、表示可能な形式/レイアウトを持つ "シャドウ" テクスチャと共に割り当て、現時点のその 2 つの間でコピーします。 この "シャドウ" は、必ずしも私たちが考えるような通常のテクスチャではありません。単に圧縮データである場合もあります。 さらには、存在する必要がない場合もあり、代わりに最適化される場合もあります。

ランタイムは、表示可能なサーフェスの以下の側面を理解できるように進化していくはずです。

  • 特定の VidPnSource/平面に表示するためにシャドウが存在する必要があるかどうか。

  • シャドウが存在することが最適かどうか。

  • アプリケーション サーフェスからシャドウ サーフェスにコンテンツを転送するタイミング。 ランタイムは、Present では暗黙的であるのに対して、この操作については明示的です。

  • モードの設定や、元のサーフェスとシャドウ サーフェスの間の動的な切り替えを要求する方法。

スキャンアウトは、VBlank の直後に開始され、画像の上から下に向かって垂直方向にスキャンし、次の VBlank の直前に完了します。 常にこれが当てはまるわけではなく、ピクセル クロックのタイミングとテクスチャのデータのレイアウトによって左右されます。実際に圧縮が利用可能な場合は特にそうです。

フロントバッファー レンダリングを (可能な場合に) 有効にすることを目的として、スキャンアウトの前に発生する変換を分離して理解するための新しい DDI が追加されました。 D3DWDDM2_6DDI_SCANOUT_FLAGSPFND3DWDDM2_6DDI_PREPARE_SCANOUT_TRANSFORMATION を参照してください。

可変レート シェーディング

可変レート シェーディング (粗ピクセル シェーディング) は、レンダリングされたイメージ間でさまざまなレートでレンダリング パフォーマンス/パワーを割り当てることができるメカニズムです。

前のモデルで、MSAA (マルチサンプル アンチエイリアシング) を使用してジオメトリ エイリアシングを減らすには、次の手順を実行します。

  • ターゲットを割り当てるときに事前に、ジオメトリ エイリアシングを減らす量を把握しておく必要があります。
  • ターゲットが割り当てられたら、ジオメトリ エイリアシングを減らす量は変更できません。

WDDM 2.6 では、粗シェーディングという新しい概念を追加することにより、新しいモデルで MSAA を粗ピクセルという反対方向に拡張しています。 これは、ピクセルよりも粗い間隔でシェーディングを実行できる領域です。 ピクセルのグループを 1 つの単位としてシェーディングし、その結果をグループ内のすべてのサンプルにブロードキャストできます。

粗シェーディング API では、シェーディング グループに入れるピクセル数をアプリで指定することができます。 粗ピクセル サイズは、レンダー ターゲットが割り当てられた後に変更することができます。 そのため、画面の領域やドロー パスごとに粗シェーディング レートを変えることができます。

複数層の実装は、ユーザーがクエリ可能な 2 つのキャップで使用できます。 レベル 1 と 2 では、単一サンプリング リソースと MSAA リソースの両方で粗シェーディングを使用できます。 MSAA リソースの場合、シェーディングは粗ピクセル単位か、通常どおりのサンプル単位で実行できます。 ただし、レベル 1 とレベル 2 では、MSAA リソースの場合、粗サンプリングを使用してピクセル単位とサンプル単位の間の頻度でシェーディングすることはできません。

レベル 1:

  • シェーディング レートは描画単位でしか指定できません。それ以上に細かい単位は使用できません

  • シェーディング レートは、レンダー ターゲット内のどこに位置しているかによらず、描画されるものに一律に適用されます

レベル 2:

  • シェーディング レートは、レベル 1 と同様に、描画単位で指定できます。 さらに、"描画単位" と以下を組み合わせて指定することもできます。

    • 誘発頂点 (provoking vertex) ごとのセマンティック、および
    • 画面空間イメージ
  • 3 つのソースからのシェーディング レートは、コンバイナーのセットを使用して組み合わせます

  • 画面領域の画像のタイル サイズは 16 x 16 以下です。 アプリによって要求されたシェーディング レートは、正確に配信されることが保証されています (時間フィルターやその他の再構築フィルターの精度のため)

  • SV_ShadingRate PS 入力がサポートされています。 誘発頂点単位のレート (ここではプリミティブ単位のレートとも呼びます) は、1 つのビューポートが使用され、SV_ViewportIndex が書き込まれていない場合にのみ有効です。

  • 誘発頂点単位のレート (ここではプリミティブ単位のレートとも呼びます) は、SupportsPerVertexShadingRateWithMultipleViewports キャップが true とマークされている場合、複数のビューポートで使用できます。 また、その場合は、SV_ViewportIndex が書き込まれるときに使用できます。

PFND3D12DDI_RS_SET_SHADING_RATE_0062D3D12DDI_SHADING_RATE_0062 を参照してください。

診断情報の収集

診断情報の収集により、レンダリング機能と表示機能の両方で構成されるグラフィックス アダプター用ドライバーから OS がプライベート データを収集できるようになります。 この新機能は、WDDM 2.6 での要件です。

新しい DDI では、ドライバーが読み込まれるたびに OS が情報を収集できるようにする必要があります。 現在、OS では、ミニポートによって実装された DxgkDdiCollectDebugInfo 関数を使用して、ドライバーのプライベート データに対して TDR (タイムアウト検出と回復) 関連のケースを照会します。 新しい DDI は、さまざまな理由でデータを収集するために使用されます。 OS は、診断が必要な場合にこの DDI を呼び出し、要求されている種類の情報を提供します。 ドライバーは、問題を調査するために重要なすべての個人情報を収集し、OS に送信する必要があります。 DxgkDdiCollectDebugInfo は最終的に非推奨となり、DxgkDdiCollectDiagnosticInfo に置き換えられる予定です。

DXGKDDI_COLLECTDIAGNOSTICINFO を参照してください。

バックグラウンド処理

バックグラウンド処理により、ユーザー モード ドライバーは目的のスレッド動作を表現し、ランタイムでその動作を制御/監視することができます。 ユーザー モード ドライバーでは、バックグラウンド スレッドをスピンアップし、可能な限り低い優先度を割り当てます。また、これらのスレッドによってクリティカル パス スレッドが中断せず、全般的には成功するように NT スケジューラを利用します。

API を使用すると、アプリは、ワークロードに適したバックグラウンド処理の量と、その作業を実行するタイミングを調整できます。

PFND3D12DDI_QUEUEPROCESSINGWORK_CB_0062 を参照してください。

ドライバーのホット アップデート

ドライバーのホット アップデートは、OSコンポーネントを更新する必要があるときに、サーバーのダウンタイムを可能な限り短縮します。

ドライバー ホット パッチは、カーネル モード ドライバーにセキュリティ パッチを適用するために使用されます。 その場合、ドライバーはアダプター メモリの保存を求められ、アダプターが停止され、ドライバーがアンロードされ、新しいドライバーが読み込まれ、アダプターが再び起動されます。

DXGKDDI_SAVEMEMORYFORHOTUPDATEDXGKDDI_RESTOREMEMORYFORHOTUPDATE を参照してください。

WDDM 2.5

追跡対象のワークロード

"追跡対象のワークロード" は、プロセッサの高速実行と消費電力の削減の間のトレードオフを細かく制御するための試験的な機能です。通知があるまで使用できません。 この機能の実装は Windows 10 バージョン 2003 から削除されました。セキュリティ フィックスの一環として、以前の OS バージョンから非推奨になりました。

コンテンツの変更

トピック 説明
HMD および専用ディスプレイ用の EDID 拡張 (VSDB) 2018 年 12 月 3 日 ディスプレイ メーカー向けの仕様
DirectX グラフィックス カーネル サブシステム (Dxgkrnl.sys) 2018 年 12 月 4 日 Windows オペレーティング システムが Microsoft DirectX グラフィックス カーネル サブシステム (Dxgkrnl.sys) を介して実装するカーネルモード インターフェイス。
WDDM 2.1 の機能 2019 年 1 月 10 日 WDDM 2.1 の新機能と更新された機能について説明します

レイトレーシング

新しい Direct3D DDI が、ハードウェア アクセラレーションによるレイトレーシングをサポートするために、Direct3D API と並行して作成されました。 次のような DDI があります。

レイトレーシングの詳細については、以下を参照してください。

ディスプレイの同期

OS は、ディスプレイがドライバーによって OS に公開されるとき、つまり、ディスプレイが有効になる前に、ディスプレイの同期機能があるか検査します。 TypeIntegratedDisplay 子デバイスの場合、アダプターの初期化中に DxgkDdiQueryAdapterInfo Type DXGKQAITYPE_INTEGRATED_DISPLAY_DESCRIPTOR2 を呼び出して報告されます。 WDDM 2.5 以降でサポートされている TypeVideoOutput 子デバイスの場合、機能は DxgkDdiUpdateMonitorLinkInfo を介したホット プラグ処理の一部として報告されるため、ターゲットまたは接続されたモニターに基づいて機能が変わる可能性があります。

OS は、DxgkDdiSetTimingsFromVidPn 呼び出しで、パス単位の DXGK_SET_TIMING_PATH_INFO 構造体の入力フィールドにディスプレイの同期を指定します。

WDDM 2.1

WDDM 2.1 は、新しいシナリオを可能にし、Windows グラフィックス サブシステムのパフォーマンス、信頼性、アップグレードのレジリエンス、診断の強化、将来的なシステムの発展という領域で大幅な向上を実現します。 WDDM 2.0 ドライバー モデルは、D3D12 の前提条件です。 WDDM 2.0 と DirectX12 は、Windows 10 以降でのみ使用できます。

WDDM 2.1 の機能の追加と更新の一覧を次に示します。

  • メモリ管理に費やされるオーバーヘッド時間を削減し、乏しいグラフィックス メモリをより効率的に使用することで、グラフィックスのパフォーマンスが向上しました。 グラフィックス パフォーマンスの向上は次のとおりです。

    • リソースの提供と再利用 - バックグラウンド モードで実行されるアプリケーションのメモリ占有領域を減らすために、提供と再利用が改良されています。
    • 2 MB (メガバイト) ページ テーブル エントリ エンコードのサポート - WDDM 2.1 では、VRAM での大規模なページ テーブル エントリ (PTE) エンコードが有効になっています。 これをサポートしているシステムでは、この変更によってパフォーマンスが向上します。
    • 64 KB メモリ ページのサポート - WDDM 2.1 では、64 KB 粒度を使用した仮想メモリ割り当てもサポートされています。 この変更は特に、仮想メモリ ページにアクセスするためのオーバーヘッドを減らすことで、API と SoC にメリットをもたらします。
  • 現行バッチ処理によるハードウェア ベースの保護コンテンツの改良 (PlayReady 3.0)

  • ドライバー ストアによるグラフィックス ドライバーのインストールでドライバーのアップグレードのレジリエンスを強化。

  • DXIL、新しいシェーダー コンパイラー言語

  • D3D12 のパフォーマンスと最適化の改良

  • 開発者向けの診断オプションの改良

詳細については、「WDDM 2.1 の機能」を参照してください。

WDDM 2.0

WDDM 2.0 には、メモリ管理の更新が含まれています。

GPU 仮想メモリ

  • 物理メモリはすべて、グラフィックス処理装置 (GPU) のメモリ マネージャーで管理できる仮想セグメントとして抽象化されます。
  • プロセスごとに独自の GPU 仮想アドレス空間を取得します。
  • スウィズリング範囲のサポートは廃止されました。

詳細については、WDDM 2.0 での GPU 仮想メモリに関するページを参照してください。

ドライバーのレジデンシー

  • ビデオ メモリ マネージャーは、ドライバーにコマンド バッファーを送信する前に、割り当て領域がメモリに存在することを確認します。 この機能を補助するために、ユーザーモード ドライバーのデバイス ドライバー インターフェイス (DDI) が追加されました (MakeResidentTrimResidencyEvict)。
  • 割り当てとパッチの場所の一覧は、WDDM 2.0 モデルでは必要ないため、段階的に除外されます。
  • ユーザー モード ドライバーが割り当ての追跡を処理するようになりました。 これを有効にするために、いくつかの DDI が追加されました。
  • ドライバーにはメモリ予算が与えられ、メモリ逼迫時に適応することが期待されます。 これにより、ユニバーサル Windows ドライバーはアプリケーション プラットフォームをまたいで機能できるようになります。
  • プロセス同期とコンテキスト監視用に DDI が追加されました。

詳細については、「WDDM 2.0 でのドライバー常駐」を参照してください。