D3D12_TEXTURE_LAYOUT列挙 (d3d12.h)

テクスチャ レイアウト オプションを指定します。

構文

typedef enum D3D12_TEXTURE_LAYOUT {
  D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
  D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,
  D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
  D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3
} ;

定数

 
D3D12_TEXTURE_LAYOUT_UNKNOWN
値: 0
レイアウトが不明であり、アダプターに依存している可能性があることを示します。
作成時に、ドライバーは他のリソース プロパティ (特にリソース サイズとフラグ) に基づいて最も効率的なレイアウトを選択します。
別のテクスチャ レイアウトから特定の機能が必要な場合を除き、この選択を優先します。

UMA アーキテクチャには、ゼロ コピー テクスチャ アップロードの最適化が存在します。 ID3D12Resource::WriteToSubresource を参照してください。
D3D12_TEXTURE_LAYOUT_ROW_MAJOR
値: 1
テクスチャのデータが行メジャー順 ("ピッチ線形順序" と呼ばれることもあります) で格納されることを示します。

このテクスチャ レイアウトでは、メモリ内の行の連続するテクセルが、次の行のテクセルの前に連続して配置されます。
同様に、特定の深度または配列スライスの連続するテクセルは、次の深度または配列スライスのテクセルの前にメモリ内で連続しています。
データのコレクションを揃えるために、行間と深度スライスまたは配列スライスの間にパディングが存在する場合があります。
ストライドは、行、深度、または配列スライス間のメモリ内の距離です。と には、任意のパディングが含まれます。

このテクスチャ レイアウトを使用すると、他のレイアウトが使用できない場合に、複数のアダプター間でテクスチャ データを共有できます。

このレイアウトは通常、広範な使用では効率的ではないので、多くの制限が適用されます。


  • 近くのテクセルの局所性は回転不変ではありません。

  • 次のテクスチャ プロパティのみがサポートされています。

    • D3D12_RESOURCE_DIMENSION_TEXTURE_2D。

    • 1 つのミップ レベル。

    • 1 つの配列スライス。

    • 64 KB の配置。

    • MSAA 以外。

    • D3D12_RESOURCE_FLAGなし_ALLOW_DEPTH_STENCIL。

    • 形式を YUV 形式にすることはできません。



  • テクスチャは、 D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTERを使用してヒープ上に作成する必要があります。


バッファーは D3D12_TEXTURE_LAYOUT_ROW_MAJORを使用して作成されます。これは、行主テクスチャ データをテクスチャ オブジェクトを作成せずにその中に配置できるためです。
これは一般的に、テクスチャ データのアップロードまたは読み取りに使用されます。特に個別の/NUMA アダプターの場合です。
ただし、 D3D12_TEXTURE_LAYOUT_ROW_MAJORは、GPU またはアダプター間でテクスチャ データをマーシャリングするときにも使用できます。
ID3D12GraphicsCommandList::CopyTextureRegion の使用例については、次のトピックを参照してください。

D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE
値: 2
64 KB タイル内のレイアウトとテール ミップ パッキングがドライバー次第であることを示します。
標準のスウィズル パターンはありません。

このテクスチャ レイアウトは、隣接する 64 KB の領域 (タイルとも呼ばれます) に配置され、各ディメンションに沿って連続するテクセルの数がほぼ等しい量が含まれます。
タイルは行メジャー順に並べられます。
タイル間にパディングはありませんが、通常、各ディメンションの最後のタイル内に未使用のテクセルがあります。
タイル内のテクセルのレイアウトは未定義です。
各サブリソースは、直前のサブリソースが終了する直後に続き、サブリソースの順序はサブリソース序数と同じシーケンスに従います。
ただし、テールミップパッキングはアダプタ固有です。
詳細については、「タイル化されたリソース層と ID3D12Device::GetResourceTiling」を参照してください。

このテクスチャ レイアウトを使用すると、仮想メモリ ページ マッピング機能と共に使用する場合に、部分的に常駐またはスパーステクスチャのシナリオが可能になります。
ID3D12CommandQueue::UpdateTileMappings を使用できるようにするには、このテクスチャ レイアウトを ID3D12Device::CreateReservedResource と共に使用する必要があります。

次のレイアウトのテクスチャには、いくつかの制限が適用されます。


  • アダプターは 、D3D12_TILED_RESOURCES_TIER 1 以上をサポートする必要があります。

  • 64 KB のアラインメントを使用する必要があります。

  • D3D12_RESOURCE_DIMENSION_TEXTURE1D はサポートされておらず、すべての形式でもありません。

  • タイルリソース層は、 D3D12_RESOURCE_DIMENSION_TEXTURE3Dを持つテクスチャがサポートされているかどうかを示します。

D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE
値: 3
既定のテクスチャが標準化されたスウィズル パターンを使用することを示します。

このテクスチャ レイアウトは、タイル内のテクセルのレイアウトが定義されている点を除き、D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLEと同じように配置されます。 テールミップパッキングはアダプタ固有です。

このテクスチャ レイアウトを使用すると、複数のアダプター間、または CPU と GPU の間でデータをマーシャリングするときの最適化が可能になります。
複数のコンポーネントがテクスチャ メモリ レイアウトを理解している場合、コピーの量を減らすことができます。
このレイアウトは、一般に、隣接するテクセルの回転に不変な局所性があるため、行メジャー レイアウトよりも広範な使用に対して効率的です。
このレイアウトは通常、標準のスウィズルをサポートするアダプターでのみ使用できますが、アダプター間共有ヒープには例外が存在します。

このレイアウトの制限事項は、次のことがサポートされていないことです。

注釈

この列挙型は、 D3D12_RESOURCE_DESC 構造体によって使用されます。

この列挙は、既定のテクスチャのスウィズル パターンを制御し、既定のテクスチャでマップのサポートを有効にします。 呼び出し元は、各オプションがサポートされていることを確認するために、 D3D12_FEATURE_DATA_D3D12_OPTIONS に対してクエリを実行する必要があります。

標準のスウィズル形式は、各ページ サイズのチャンク内に適用され、ページは互いに対して直線的な順序でレイアウトされます。 16 ビット インターリーブ パターンは、事前にスウィズルされたページ内の場所からスウィズル後の場所への変換を定義します。

標準的なスウィズル パターン

デモを行うために、上記の 2D 32bpp スウィズル形式を検討してください。 これは、次のインターリーブ マスクで表されます。左側のビットは最も重要です。

UINT xBytesMask = 1010 1010 1000 1111
UINT yMask =      0101 0101 0111 0000

swizzled アドレスを計算するには、次のコードを使用できます ( _pdep_u32 組み込み命令がサポートされています)。

UINT swizzledOffset = resourceBaseOffset +
                      _pdep_u32(xOffset, xBytesMask) +
                      _pdep_u32(yOffset, yBytesMask);

要件

要件
Header d3d12.h

こちらもご覧ください

CD3DX12_RESOURCE_DESC

コア列挙

UMA の最適化: CPU アクセス可能なテクスチャと標準スウィズル