次の方法で共有


WDDM 2.1 の機能

このトピックでは、Windows 10 Anniversary Edition (Windows 10 バージョン 1607) 以降で使用できる Windows ディスプレイ ドライバー モデル (WDDM) バージョン 2.1 の機能と機能強化について詳しく説明します。

WDDM 2.1 自体はオプションです。 実装されている場合、それは必須およびオプションのドライバー機能のコレクションです。 これらの機能のいずれかをサポートするドライバーは、すべての必須機能をサポートする必要があります。 サポートは Windows Hardware Lab Kit (HLK) テストで検証できますが、Dxgkrnl では、機能と DDI の一貫性がチェックされます。

WDDM 2.1 要件テーブル

機能 適合性
提供と再利用の改良 必須
ビデオ メモリ管理 省略可能
HW で保護されたコンテンツの信頼性の向上 ハードウェアの選択
Windows GameDVR でのアプリケーションのサポート 必須
間接ディスプレイ ハードウェアの選択
ドライバー ストアとサイドバイサイド インストール 必須
カメラ/キャプチャ シナリオ用の DirectX メモリ サーフェス共有 必須

WDDM 2.1 では、D3D9、D3D10、D3D10.1、D3D11、D3D11.x、D3D12 の D3D バージョンがサポートされています。

提供と再利用の改良

バックグラウンド モードで実行されるアプリケーションのメモリ占有領域を減らすために、PFND3DDDI_RECLAIMALLOCATIONS3CBコールバック関数が追加されました。 このインターフェイスを使用すると、アプリケーションは、バックグラウンドに入るときに完全に開放できるリソースを提供できるようになります。 その結果、DirectX を使用するバックグラウンド アプリからプロセス ライフタイム マネージャーが再利用できるメモリ量が増えるので、メモリ不足時のバックグラウンド アプリケーションの停止が少なくなります。

その他の DDI 変更点:

リソースの提供と再利用の詳細については、「提供と再利用の変更点」を参照してください。

Windows GameDVR でのアプリケーションのサポート

Windows 10 Anniversary エディションでは、全画面表示のゲームで Windows ゲーム バーと GameDVR を使用する機能が強化されています。

現行バッチ処理と呼ばれるパフォーマンス機能をサポートするには、WDDM 2.1 ドライバーが必要です。この機能により、フリップ モデル スワップチェーンのマルチスレッド サポートが追加されます。 これは、ゲーム バーを備えた全画面表示ゲームが以前のバージョンの Windows と同じレベルのパフォーマンスで実行されるようにする重要な機能です。

この機能を有効にするために、次の DDI が追加されました。

間接ディスプレイ

WDDM 2.1 では、間接ディスプレイを使用すると、USB 接続されたディスプレイを他のモニターと同じユーザー エクスペリエンスに参加させることができます。 さらに、間接ディスプレイ ドライバー (IDD) は、カーネル モード ドライバーよりも開発が簡単なユーザー モード ドライバーであり、その結果、システムの全体的な信頼性の向上に貢献します。

WDDM 2.1 では、次の USB ディスプレイ機能/エクスペリエンスが有効になっています。

  • USB ディスプレイを Windows プラットフォームに接続したり、オペレーティング システムをアップグレードしたりすると、適切なドライバーが Windows Update からダウンロードされてインストールされます。

  • モニターを USB ディスプレイ ハードウェアに接続すると、正しいモニター トポロジ、解像度、DPI が検出され、設定されます。

  • ユーザーは、モニターの解像度とモニターのスケーリングを変更できます。

  • ユーザーが USB ディスプレイを切断したりディスプレイを再接続したりしても予期しない副次的影響が発生することはありません。

  • 切断してもモニター トポロジーは保持されるので、同じモニターに再接続されます。

  • USB ディスプレイは、スリープや休止状態などのさまざまな電源状態で正常に機能します。

間接ディスプレイの詳細については、間接ディスプレイ ドライバー モデルの概要に関するページを参照してください。

ドライバー ストアとサイドバイサイドのドライバー インストール

WDDM 2.1 では、ドライバー ストアによるグラフィックス ドライバーのインストールが導入されています。 このグラフィックス ドライバーのインストール メカニズムを使用することで、Windows Update からのドライバー更新プログラムのレジリエンスが向上し、ドライバー ファイルのバージョンの不一致によってシステムが不安定になったりユーザーが再起動を実行したりすることがなくなります。 今後提供されるドライバー更新プログラムはそれぞれドライバー ストア内の一意の場所 (つまり System32\DriverStore\FileRepository\[…]) から直接実行されるので、ドライバー ファイルの上書きや不一致は回避されます。

ドライバー ストアの機能を実装するには、ドライバー ファイルが一意のドライバー リポジトリにコピーされるようにグラフィックス ドライバー INF ファイルを変更する必要があります。 INF の変更については、「INF 要件」で詳しく説明しています。

DXIL

WDDM 2.1 では、DirectX バイト コード (DXBC) から DirectX 中間言語 (DXIL) への GPU シェーダー コンパイラー スタックの移行が導入されています。DXIL はシェーダー命令を GPU に送信する新しい形式です。 DXIL に移行すると、開発者は次の利点を享受できます。

  • プログラミング - GPU プログラミング構文と開発者にお馴染みの CPU 言語の違いを最小限に抑えることで、開発しやすさが向上し、開発者にとってのシェーダー作成プロセスの複雑さが軽減されます。

  • パフォーマンスの高いコンパイラー:

    • ランタイム シェーダー パフォーマンス が有効になっているので、パフォーマンスが向上します。
    • DXIL には、GPU 内部の SIMD プロセッサのレーン間でデータを共有できる一連の組み込み機能が用意されています。
  • ワークフローの柔軟性 - DXIL を使用すると、開発者は独自のカスタム ツールと最適化パスを制御し、ビルド時と実行時に適用するコンパイル手順を選択できます。

  • 高度な言語機能 - 進化した言語が、GPU コードと CPU コードの違いをなくして GPU プログラマーの学習曲線をフラット化するという重要な機能を提供します。

開発者にメリットを提供することを重視したこうした機能によって、新規導入または更新されたゲームのパフォーマンスが (既存のハードウェアで実行する場合であっても) 向上するという利点がエンド ユーザーにもたらされます。

カメラ/キャプチャ シナリオ用の DirectX メモリ サーフェス共有

WDDM 2.1 では、複数のプロセス間でカメラまたはキャプチャ デバイスを同時に共有するフレーム サーバー コンポーネントが導入されました。 これにより、プロセスと共同プロセスの間で画像データを何回もコピーするのではなく、複数のアプリケーションから読み取れる 1 つのメモリ位置に、キャプチャされたフレームを保存できます。 この機能により、WDDM 2.1 準拠のハードウェアとドライバーでは、複数のプロセスにわたってキャプチャ画像をより効率的に管理できるので、電力の節約、帯域幅の削減、待機時間の削減が可能になり、アプリケーションとユーザーのパフォーマンスが向上します。

フレーム サーバーは、キャプチャ画像をプロセス間で共有可能なメモリとして割り当て、アクセスを要求してきたプロセスにそのメモリを共有します。 フレーム サーバーはテクスチャを複数のクライアント プロセスにブロードキャストするため、テクスチャは同時読み取りをサポートする必要があります。 現在、NV12 テクスチャはこの目的でサポートされています。

パイプライン状態オブジェクト (PSO) のキャッシュとライブラリ

D3D12 で導入されたパイプライン状態オブジェクト (PSO) は、グラフィックス パイプラインの命令とリソース (状態とも呼ばれます) を統合オブジェクトとして表し、D3D とドライバーの状態分解の不一致を減らすインターフェイスです。 グラフィカルに関する要求の厳しいアプリケーションやゲームを実行するには、膨大な数の PSO を作成する必要があります。

WDDM 2.1 の PSO ライブラリとキャッシュを使用すると、ゲーム アプリケーションは、初回実行時に作成された後に PSO を物理ストレージに格納できます。 これにより、D3D ランタイムは、ライブラリにある事前作成済みの PSO を将来のインスタンスで取得できるようになるので、PSO 抽出時間が短縮されます。 たとえば、初めてまたは PC を再起動した後にゲームを実行すると、コンテンツは保存された PSO として物理ライブラリから読み込まれます。

パイプライン GPU タイムスタンプの開始

WDDM 2.1 では、GPU パイプラインでグラフィックス イベントのタイムスタンプの開始を取得する機能が導入されました。 この機能をパイプラインのタイムスタンプの終わりと組み合わせて使用すると、開発者は、GPU で実行されているアプリケーションのアクティビティの並列処理、パイプライン処理、タイミングを明確かつ詳細に視覚化できます。 各イベントの実行時間も取得すれば、開発者はコードをさらに最適化し、非効率性やその他のパフォーマンスの問題を調査できます。

この機能は、"リアルタイムでオーバーヘッドの少ない" GPU パフォーマンス データ収集の実現に貢献すると同時に、GPU 上のワークロードを視覚化して測定するのに十分な情報を提供します。 この機能の目的は、GPU で実行されている処理の正確な順序と時間を再構築するために十分な情報を提供して、エンジンの並列処理とパイプライン処理をツールで視覚化し、GPU ワークロードを測定し、潜在的な同期の問題を特定できるようにすることです。

GPU マイクロコードの表示

WDDM 2.1 を使用すると、開発者は GPU マイクロコード ビューイングを提供することでシェーダーをさらに最適化できます。 開発者は上位レベル シェーダー言語 (HLSL) でシェーダーを作成してグラフィックス パイプラインをプログラミングし、GPU ドライバーの中間言語にコンパイルします。 ドライバーが追加のコンパイルと最適化を実行して、そのコードを GPU 固有の命令に変換します。この変換はメイン開発者には認識されません。 この機能により、開発者には、シェーダーの最適化と速度の程度を評価するために、読み取り可能な GPU 固有のコードが提示されます。

この機能により、ユーザーモード ドライバー (UMD) は、グラフィックス パイプライン (シェーダー) のプログラム可能な各ステージにコメントを付け、プログラマーによるシェーダーの使用や誤用に関する実用的な情報を返すことができます。 GPU 固有のマイクロコードは逆アセンブルされ、UMD コメントと共に読み取り可能な文字列形式で提示されます。 開発者は、読み取り可能な GPU コードへの HLSL コード マッピングを並べて表示できます。これにより、コードを動的に変更し、GPU コード側でコンパイラーの最適化結果を確認できます。

WDDM バージョンの確認

WDDM 2.1 キャップ

ドライバーは、バージョン定数を使用して、DXGK_DRIVERCAPS::WDDMVersion によって WDDM 2.1 のサポートを報告します。

DXGK_WDDMVERSION::DXGKDDI_WDDMv2_1 = 0x2100

Dxgkrnl は、サポートされている機能を調べる方法として WDDMVersion キャップを使用しません。このタスクは、他のキャップまたは DDI プレゼンスに任されます。 ただし、ドライバーが WDDM 2.1 サポートを WDDMVersion キャップで報告した場合、Dxgkrnl は WDDM 2.1 に必要なキャップまたは DDI が存在するかどうかを検証し、存在しない場合はアダプターの作成に失敗します。 キャップが一致しない場合、アダプターまたはセグメントの作成に失敗します。

Note

既存または新規のアプリケーションでは、ここで説明しているようなプラットフォームの機能強化によって有効になる Windows 10 Anniversary Edition 機能を利用するために、ドライバー モデルを照会する必要はありません。 機能の変更は、それぞれのランタイムを通じて公開する必要があります。

KMT_DRIVERVERSION_WDDM_2_1 と一致するように、次の定数が追加されました。

typedef enum _DXGIDRIVERMODELVERSION
{
    DXGIDMVERSION_1_0            = 1000,
    DXGIDMVERSION_1_1_PRERELEASE = 1102,
    DXGIDMVERSION_1_1            = 1105, 
    DXGIDMVERSION_1_2            = 1200,
    DXGIDMVERSION_1_3            = 1300,
    DXGIDMVERSION_2_0            = 2000,
    DXGIDMVERSION_2_1            = 2100,

} DXGIDRIVERMODELVERSION;

カーネルモード ドライバー (KMD) の DDI インターフェイスのバージョンは次のとおりです。

#define DXGKDDI_INTERFACE_VERSION_VISTA      0x1052
#define DXGKDDI_INTERFACE_VERSION_VISTA_SP1  0x1053
#define DXGKDDI_INTERFACE_VERSION_WIN7       0x2005
#define DXGKDDI_INTERFACE_VERSION_WIN8       0x300E
#define DXGKDDI_INTERFACE_VERSION_WDDM1_3    0x4002
#define DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION  0x4003
#define DXGKDDI_INTERFACE_VERSION_WDDM2_0    0x5023
#define DXGKDDI_INTERFACE_VERSION_WDDM2_1    0x6002

グラフィックス INF の要件

WDDM 2.1 グラフィックス ドライバーには、WDDM 2.0 以前のドライバーと比較して異なる INF 要件があります。 次のとおりです。

  1. WDDM 2.1 には、WDDM 2.0 グラフィックス ドライバー (D1) と同じ機能スコアが必要です。

  2. WDDM 2.1 グラフィックス ドライバーでは、別の OS INF インストール セクションを使用する必要があります。

  3. WDDM 2.1 グラフィックス ドライバー INF の "ドライバー ストア" インストールの変更。

詳細については、「INF ファイルのセクションとディレクティブ」を参照してください。

32 ビットと 64 ビットのドライバー ファイルは以前と変わらずドライバー ストアから読み込まれます。 WoW64 ファイル システムのリダイレクトは、ドライバー ストアには適用されません。 IHV では、標準の INF 構文を使用してサブフォルダーを指定できます。たとえば、必要に応じて、一意のドライバー ストア フォルダーの下に WoW64 フォルダーを作成します。

ドライバー ストアからの実行をサポートする INF と以前の動作の違いの例を次に示します。

WINDOWS 10 ANNIVERSARY EDITION APPROACH: RUNNING DRIVERS FROM THE DRIVER STORE
[DestinationDirs]
KMDCopyFiles = 13
UMDCopyFiles = 13
UMDWoW64CopyFiles = 13

[DDInstall]
CopyFiles=KMDCopyFiles
CopyFiles=UMDCopyFiles
CopyFiles=UMDWoW64CopyFile

[KMDCopyFiles]
myKMD.sys

[UMDCopyFiles]
myUMD64.dll
myOpenCL64.dll
myOpenGL64.dll

[UMDWow64CopyFiles]
myUMD32.dll
myOpenCL32.dll
myOpenGL32.dll

[DDInstall.Services]
AddService = serviceName, 0x00000002, serviceName_Service_Inst

[serviceName_Service_Inst]
ServiceBinary = %13%\serviceName.sys

[regAdd]
HKR,,UserModeDriverName,%REG_MULTI_SZ%,%13%\myUMD64.dll, %13%\myUMD64.dll, %13%\myUMD64.dll, %13%\myUMD64.dll
HKR,,UserModeDriverNameWoW,%REG_MULTI_SZ%, %13%\myUMD32.dll, %13%\myUMD32.dll, %13%\myUMD32.dll, %13%\myUMD32.dll
HKLM,"Software\Khronos\OpenCL\Vendors",%13%\myOpenCL64.dll,%REG_DWORD%,0x00000000
HKLM,"Software\Wow6432Node\Khronos\OpenCL\Vendors",%13%\ myOpenCL32.dll,%REG_DWORD%,0x00000000
HKR,,OpenGLDriverName,%REG_MULTI_SZ%,%13%\myOpenGL64.dll
HKR,,OpenGLDriverNameWoW,%REG_MULTI_SZ%,%13%\myOpenGL32.dll

サブフォルダーを指定するために、ドライバーは次の例に示すような構文を使用できます。

...
[DestinationDirs]
...
UMDWoW64CopyFiles = 13,WoW64
...
[regAdd]
...
HRK,, UserModeDriverNameWoW,%REG_MULTI_SZ%, %13%\WoW64\myUMD.dll, %13%\WoW64\myUMD.dll, %13%\

The manufacturer install section decoration for Windows 10 Anniversary edition WDDM 2.1 drivers is as follows: 
...
[Manufacturer]
%Grfx_Manf% =  IHVGfx, NTamd64.10.0…14310
...
[IHVGfx.NTamd64.10.0…14310]
; HW ID list
[list of HW IDs]

ドライバーのバージョン管理

グラフィックス アダプターまたはチップ セットのドライバー DLL ファイルと SYS ファイルには、適切なフォーマットのファイル バージョンが必要です。

ドライバー情報ファイル (.inf)、カーネル モード ドライバー (.sys)、およびユーザー モード ドライバー (.dll) ファイルのバージョン情報が一致している必要があります。 さらに、.inf の [SignatureAttributes] セクションで PETrust バイナリとして指定するファイルのバージョン情報は、.inf と一致しなければなりません。 ドライバー パッケージ内の追加バイナリのファイル バージョン情報を .inf と一致させることをお勧めします。

レガシ オペレーティング システムのファイル バージョン管理の一般的な要件と一致させるには、ファイル バージョンのフォーマットが AA.BB.CCCCC.DDDDD パターンに従っている必要があります。各要素は次のとおりです。

  • AA は、.inf に記載されている最も処理能力の高いデバイスのドライバー モデル バージョンを表しています

  • BB (WDDM 1.2 以降のドライバーの場合) は、.inf に記載されている最も処理能力の高いデバイスの最高の D3D 機能レベルを表しています

  • BB (WDDM 1.1 以降のドライバーの場合) は、.inf に記載されている最も処理能力の高いデバイスでサポートされている最高の DDI バージョンを表しています

  • CCCCC は、ベンダーによって選択された最大 5 桁の数字 (0 から 65535 まで) です

  • DDDDD は、ベンダーによって選択された最大 5 桁の数字 (0 から 65535 まで) です

AA フィールドの値:

ドライバー モデル AA 値
WDDM v2.1 21
WDDM v2.0 20
WDDM v1.3 10
WDDM v1.2 9
WDDM v1.1 8
WDDM v1.0 7
XDDM 6

BB フィールドの値 (WDDM 1.2 以降):

DirectX の機能レベル BB 値
12_x 21
12_1 20
12_0 19
11_1 18
11_0 17
10_1 16
10_0 15
9_3 14
9_2 14
9_1 14

BB フィールドの値 (WDDM 1.1 以前):

DDI のバージョン BB 値
機能レベル 11_0 の D3D11-DDI 17
機能レベル 10 の D3D11-DDI 16
D3D10-DDI 15
D3D9 DDI 14

Note

数値の前にゼロを埋め込む必要はありません。つまり、CCCCC フィールドまたは DDDDD フィールドで 123 を 00123 と表記する必要はありません。 以前のバージョンの Windows OS では、最後の 2 つのフィールドは 4 桁 (CCCC.DDDD) でした。 そのため、Windows 10 および WDDM 2.0 より前のバージョンのドライバーの例には 4 桁しかありません。

  • Windows Vista WDDM 1.0:

    • D3D9 DDI ドライバーでは、7.14.0000.0000 から 7.14.9999.9999 を使用できます
    • D3D10 DDI ドライバーでは、7.15.0000.0000 から 7.15.9999.9999 を使用できます
  • Windows 7 WDDM 1.1:

    • D3D9 DDI ドライバーでは、8.14.0000.0000 から 8.14.9999.9999 を使用できます
    • D3D10 DDI ドライバーでは、8.15.0000.0000 から 8.15.9999.9999 を使用できます
    • FL_10_0 ドライバーを使用する D3D11 DDI では、8.16.0000.0000 から 8.16.9999.9999 を使用できます
    • FL_11_0 ドライバーを使用する D3D11 DDI では、8.17.0000.0000 から 8.17.9999.9999 を使用できます
  • Windows 8 WDDM 1.2:

    • FL_10_0 HW では、9.15.0000.0000 から 9.15.9999.9999 を使用できます
    • FL_10_1 HW では、9.16.0000.0000 から 9.16.9999.9999 を使用できます
    • FL_11_0 HW では、9.17.0000.0000 から 9.17.9999.9999 を使用できます
    • FL_11_1 HW では、9.18.0000.0000 から 9.18.9999.9999 を使用できます
  • Windows 8.1 WDDM 1.3:

    • FL_10_0 HW では、10.15.0000.0000 から 10.15.9999.9999 を使用できます
    • FL_10_1 HW では、10.16.0000.0000 から 10.16.9999.9999 を使用できます
    • FL_11_0 HW では、10.17.0000.0000 から 10.17.9999.9999 を使用できます
    • FL_11_1 HW では、10.18.0000.0000 から 10.18.9999.9999 を使用できます
  • Windows 10 WDDM 2.0:

    • FL_11_1 HW では、20.18.0000.0000 から 20.18.65535.65535 を使用できます
    • FL_12_0 HW では、20.19.0000.0000 から 20.19.65535.65535 を使用できます
    • FL_12_1 HW では、20.20.0000.0000 から 20.20.65535.65535 を使用できます
  • Windows 10 WDDM 2.1:

    • FL_11_1 HW では、20.18.0000.0000 から 21.18.65535.65535 を使用できます
    • FL_12_0 HW では、20.19.0000.0000 から 21.19.65535.65535 を使用できます
    • FL_12_1 HW では、20.20.0000.0000 から 21.20.65535.65535 を使用できます

適用

10586 より高い Windows 10 ビルドの HLK 認定プレイリストの必須テストでは、上記の規則が適用されます。 以前のバージョンの OS では、このテストは省略可能です。 10586 以降の Windows 10 ビルドでは、WDDM バージョンが 2.1 に更新されました。 別の見方をすれば、必須要件は WDDM 2.1 以降用にビルドされたドライバーにのみ適用されるということです。