D3D12_FEATURE_DATA_ARCHITECTURE 構造体 (d3d12.h)

特定のアダプター プロパティに対してアプリケーションをより適切に最適化できるように、アダプター アーキテクチャに関する詳細を提供します。

メモ この構造体は、 D3D12_FEATURE_DATA_ARCHITECTURE1 構造体に置き換えられます。 アプリケーションがWindows 10バージョン 1703 (Creators' Update) 以降を対象とする場合は、代わりに D3D12_FEATURE_DATA_ARCHITECTURE1 (および D3D12_FEATURE_ARCHITECTURE1) を使用します。
 

構文

typedef struct D3D12_FEATURE_DATA_ARCHITECTURE {
  UINT NodeIndex;
  BOOL TileBasedRenderer;
  BOOL UMA;
  BOOL CacheCoherentUMA;
} D3D12_FEATURE_DATA_ARCHITECTURE;

メンバー

NodeIndex

マルチアダプター操作では、デバイスのどの物理アダプターが関連するかを示します。 「マルチアダプター システム」を参照してください。 NodeIndex は、アプリケーションが各アダプターのアーキテクチャに関する詳細を取得できるため、 CheckFeatureSupport を呼び出す前にアプリケーションによって入力されます。

TileBasedRenderer

ハードウェアとドライバーがタイルベースのレンダラーをサポートするかどうかを指定します。 ハードウェアとドライバーがタイルベースのレンダラーをサポートしている場合、ランタイムはこのメンバーを TRUE に 設定します。

UMA

ハードウェアとドライバーが UMA をサポートするかどうかを指定します。 ハードウェアとドライバーが UMA をサポートしている場合、ランタイムはこのメンバーを TRUE に 設定します。

CacheCoherentUMA

ハードウェアとドライバーがキャッシュコヒーレント UMA をサポートするかどうかを指定します。 ハードウェアとドライバーがキャッシュコヒーレント UMA をサポートしている場合、ランタイムはこのメンバーを TRUE に 設定します。

注釈

UMA と CacheCoherentUMA の使用方法

D3D12 アプリでは、メモリ所在地の管理と最適なヒープ プロパティの提供について心配する必要があります。 D3D12 アプリは、D3D12_HEAP_TYPE_DEFAULT ヒープ内のリソースの所在地のみを管理することで、多くの GPU アーキテクチャ全体で簡素化され、合理的に実行できます。 これらのアプリは、DXGI_MEMORY_SEGMENT_GROUP_LOCALの IDXGIAdapter3::QueryVideoMemoryInfo のみを呼び出す必要があり、D3D12_HEAP_TYPE_UPLOADとD3D12_HEAP_TYPE_READBACK同じメモリ セグメント グループからのものであるというトレラントである必要があります。

ただし、このような単純な設計は、制限をプッシュするアプリケーションでは制約が大きすぎます。 そのため、D3D12_FEATURE_DATA_ARCHITECTUREは、基になるアダプターのプロパティに対するアプリケーションの最適化を向上するのに役立ちます。

一部のアプリケーションでは、ディスクリート アダプターの最適化を改善し、システム メモリとビデオ メモリの両方の予算を管理する複雑さが増します。 アップロード ヒープのサイズが既定のテクスチャのサイズに匹敵する場合は、メモリ使用率がほぼ 2 倍になります。 このような最適化をサポートする場合、アプリケーションは 2 つの所在地予算を検出するか、 UMAfalse であることを認識できます。

一部のアプリケーションでは、統合/UMA アダプター、特にモバイル デバイスでのバッテリ寿命の延長に関心があるアダプターに対して、より適切に最適化したい場合があります。 単純な D3D12 アプリケーションは、UMA で常に必要とは限らない場合に、属性が異なるヒープ間でデータを強制的にコピーします。 しかし、UMAプロパティ自体は、GPU設計の合理的にあいまいな灰色の領域を包含します。 UMA は、GPU でアクセス可能なすべてのメモリを CPU に自由にアクセスできることを意味すると想定しないでください。 CacheCoherentUMA という考え方にさらに近いプロパティがあります。

CacheCoherentUMAfalse の場合は、1 つの所在地予算を使用できますが、UMA の設計は、一般的に 3 つのヒープ属性の恩恵を受けます。 アップロードと読み取りバックのリソースとヒープを賢明に使用してリソースのコピーを削除し、メモリへの CPU アクセスを提供する機会が存在します。 しかし、このような機会は明確ではありません。 そのため、アプリケーションは慎重にする必要があります。また、特定のデバイス ID を有効または排除することが保証される可能性があるため、さまざまな "UMA" システムでの実験をお勧めします。 GPU メモリ アーキテクチャと、ヒープの種類がキャッシュ プロパティにどのように変換されるかを理解することをお勧めします。 成功の可能性は、各プロセッサがデータの読み取りまたは書き込みの頻度、データ アクセスのサイズと局所性などに依存する可能性があります。高度な開発者の場合: UMA が true で CacheCoherentUMAfalse の場合、これらのアダプターの最も一意の特性は、アップロード ヒープがまだ書き込み結合されることです。 ただし、一部の UMA アダプターでは、既定のヒープとアップロード ヒープの CPU アクセスなしプロパティと書き込み結合プロパティの両方の利点があります。 詳細については、「 GetCustomHeapProperties 」を参照してください。

CacheCoherentUMA が true の場合、アプリケーションはヒープの属性を破棄し、どこでもアップロード ヒープと同等のカスタム ヒープを使用することをより強く楽しめることができます。 ゼロ コピー UMA の最適化は、共有使用のメリットを得るだけのシナリオが増えるので、より一般的に推奨されます。 メモリ モデルは、より多くのシナリオとより広範な導入に非常に役立ちます。 いくつかのコーナーケースは、利点が容易に得られないが、他のオプションよりもはるかにまれで有害ではないはずです。 上級開発者向け: CacheCoherentUMA は、メモリ階層内の大量のキャッシュも CPU と GPU の間で統合または統合されることを意味します。 最も一意の観察可能な特性は、アップロード ヒープが実際には CacheCoherentUMA に書き戻されることです。 これらのアーキテクチャでは、アップロード ヒープでの書き込み結合の使用は、一般的に有害です。

低レベルの詳細は、ほとんどの単一アダプター アプリケーションでは無視する必要があります。 通常どおり、シングルアダプター アプリケーションではランドスケープを簡略化し、ヒープをアップロードするための CPU 書き込みで、書き込み結合に優しいパターンを使用できます。 下位レベルの詳細は、マルチアダプター アプリケーションの概念を強化するのに役立ちます。 多くの場合、マルチアダプター アプリケーションでは、アダプター間でデータを効率的に移動するための最適なカスタム ヒープ プロパティを選択するのに十分なアダプター アーキテクチャプロパティを理解する必要があります。

要件

要件
Header d3d12.h

こちらもご覧ください

コア構造

D3D12_FEATURE