次の方法で共有


Direct3D レンダリング パフォーマンスの向上

Windows Display Driver Model (WDDM) 1.3 以降のドライバーは、Microsoft Direct3D レンダリング パフォーマンスの向上をサポートできるため、Direct3D 9 ハードウェアでハードウェア コマンド バッファーとカウンターをより適切に使用し、システム メモリをサブリソースに効率的にコピーできます。 これらの機能は、Direct3D バージョン 10 ハードウェアで使用できる機能の一部をミラーリングした、Windows 8.1 以降の新機能です。

新しい Direct3D 11.1 リソースのトリミングとマップについても、既定のパフォーマンスの向上が得られます。 マップの既定のシナリオの概要については、以下の「動作の変更」セクションを参照してください。

レンダリング パフォーマンス リファレンス

このリファレンス セクションでは、ユーザー モード デバイス ドライバー インターフェイス (DDI) について説明します。

ユーザー モード ドライバーによって実装される Direct3D レンダリング パフォーマンス関数

このセクションには、 Microsoft Direct3D レンダリング パフォーマンスの向上をサポートするために、Windows Display Driver Model (WDDM) 1.3 以降のユーザー モード ディスプレイ ドライバーで実装されている関数を記載しています。

PFND3DDDI_FLUSH1: PFND3DDDI_CHECKCOUNTERINFO

PFND3DDDI_CHECKCOUNTER: PFND3DDDI_UPDATESUBRESOURCEUP

Direct3D レンダリング パフォーマンスの構造体と列挙体

これらのユーザー モードの構造体と列挙体は、レンダリング パフォーマンスの向上をサポートしており、Windows 8.1 で新機能または更新された機能として提供されています。 D3D11_1_DDI_FLUSH_FLAGS を除き、すべて Direct3D レベル 9 のドライバーに適用されます。

WDDM 1.3 以降での DDI 実装の要件

WDDM 1.3 以降では、ユーザー モード ドライバーを実装する際に、以下の関数が必須または省略可能です。

関数グループ 説明

WDDM 1.3 より前では、Direct3D 9 の関数は省略可能です。 必須:

WDDM 1.3 以降で使用できる Direct3D 9 の関数。 ドライバーは、これらの関数をすべて実装するか、すべて実装しない必要があります。

直前で説明した WDDM 1.3 以降の省略可能な関数が実装されている場合、これらの関数には動作の変更が関連付けられています。

  • BltDXGI - ネイティブ ステージング
  • Blt1DXGI - ネイティブ ステージング
  • CreateResource2 - ネイティブ ステージング、大規模なキャプチャ テクスチャ
  • GetCaps - タイム スタンプ、単純なインスタンス化
  • Lock - ネイティブ ステージング
  • TexBlt1 - ネイティブ ステージング
  • Unlock - ネイティブ ステージング
  • VolBlt1 - ネイティブ ステージング

これらのシナリオは、GetCaps が呼び出されたときに適用されます。

  • D3DDDICAPS_GETD3DQUERYDATA が設定されている場合、ドライバーは、必要に応じてタイム スタンプのサポートを報告できます。つまり、Direct3D ランタイムはサポートをマスクしません。
  • D3DDDICAPS_GET_SIMPLE_INSTANCING_SUPPORT が設定されている場合、ドライバーは、インスタンス化のためにオプションのハードウェア サポートを報告できます。

これらの Direct3D 11 の関数には、動作の変更が関連付けられています。

  • CreateResource(D3D11) - バッファー マップの既定値 (後述の「動作の変更」セクションを参照)
  • pfnFlush1 - リソースのトリミング
  • ResourceMap - バッファー マップの既定値 (後述の「動作の変更」セクションを参照)
  • ResourceUnmap - バッファー マップの既定値 (後述の「動作の変更」セクションを参照)

リソース作成、マップ、およびマップ解除の関数の呼び出しの動作の変更

WDDM 1.3 以降のドライバーで実装されるこれらの関数では、Direct3D ランタイムは、マップの既定のシナリオ向けに、制限された入力値のセットを提供します。 これらの制限付きの値は、機能レベル 11.1 以降をサポートするドライバーにのみ適用されます。

CreateResource(D3D11) 関数 -

これらの入力 D3D11DDIARG_CREATERESOURCE 構造体メンバーは制限されています。

メンバー 説明

ResourceDimensionUsage

これらの動作の変更は、Direct3D ランタイムが ResourceDimensionD3D10DDIRESOURCE_BUFFER 型を提供し、UsageD3D10_DDI_USAGE_DEFAULT 型を提供する場合にのみ適用されます。

BindFlags

Direct3D ランタイムは、D3D10_DDI_BIND_SHADER_RESOURCE 値と D3D11_DDI_BIND_UNORDERED_ACCESS 値のみを設定します。

MapFlags

ここに記載されている他のすべてのメンバーの要件が満たされている場合、ランタイムは、D3D10_DDI_MAP_READD3D10_DDI_MAP_WRITE、および D3D10_DDI_MAP_READWRITE の値を設定できます。 ドライバーは、これらの値をサポートする必要があります。 D3D10_DDI_MAP_WRITE_DISCARDD3D10_DDI_MAP_WRITE_NOOVERWRITE の値は無効です。

MiscFlags

ランタイムは、D3D11_DDI_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWSD3D11_DDI_RESOURCE_MISC_BUFFER_STRUCTURED の値のみを設定します。

形式

ランタイムは、DXGI_FORMAT_UNKNOWN 値のみを設定します。

SampleDesc

ランタイムは、DXGI_SAMPLE_DESC.Count メンバーを 1 に、Quality メンバーを 0 に設定します。

MipLevels

ランタイムは、この値を 1 に設定します。

ArraySize

ランタイムは、この値を 1 に設定します。

pPrimaryDesc

ランタイムは、この値を NULL に設定します。

ResourceMap 関数 -

ResourceMap の以下の入力パラメーターは制限されています。

パラメーター 説明

hResource

CreateResource(D3D11) の作成呼び出しで MapFlags に 0 以外の値が設定されている場合、Direct3D ランタイムは D3D10DDIRESOURCE_BUFFER リソースのみを設定します。

ランタイムは、DXGI_FORMAT_UNKNOWN 値のみを設定します。

サブリソース

ランタイムは、この値を 0 に設定するのみです。

DDIMap

ここに記載されている他のすべてのメンバー要件が満たされている場合、ランタイムは CreateResource(D3D11) の作成呼び出しで設定された MapFlags 値と一致する、D3D10_DDI_MAP_READD3D10_DDI_MAP_WRITE、または D3D10_DDI_MAP_READWRITE 値を設定できます。

フラグ

ランタイムからの入力値は制限されていませんが、ドライバーは D3D10_DDI_MAP_FLAG_DONOTWAIT 値をサポートできる必要があります。

pMappedSubResource

ランタイムからの入力値は制限されていませんが、ドライバーは、有効な CPU キャッシュ可能なポインターを D3D10DDI_MAPPED_SUBRESOURCE.pData メンバーに割り当て、pData で提供されるバッファーとデータのサイズに一致するように RowPitchDepthPitch を設定する必要があります。

ResourceUnmap 関数 -

ResourceUnmap の以下の入力パラメーターは制限されています。

パラメーター 説明

hDevice

Direct3D ランタイムからの入力値は制限されていませんが、元の ResourceMap 呼び出しの hDevice 値と一致する値です。

hResource

CreateResource(D3D11) の作成呼び出しで MapFlags に 0 以外の値が設定されている場合、ランタイムは D3D10DDIRESOURCE_BUFFER リソースのみを設定します。

サブリソース

ランタイムは、この値を 0 に設定するのみです。