Win32 API 日本語リファレンス
ホームGraphics.Direct3D12 › D3D12_TEXTURE_LAYOUT

D3D12_TEXTURE_LAYOUT

列挙型
基底型i4

メンバー 4

名前10進16進説明
D3D12_TEXTURE_LAYOUT_UNKNOWN00x0

レイアウトが不明であり、アダプター依存である可能性が高いことを示します。 作成時、ドライバーは他のリソース プロパティ (特にリソースのサイズとフラグ) に基づいて、最も効率的なレイアウトを選択します。 他のテクスチャ レイアウト固有の機能が必要でない限り、この選択肢を優先してください。

UMA アーキテクチャ向けには、ゼロコピーのテクスチャ アップロード最適化が存在します。ID3D12Resource::WriteToSubresource を参照してください。

D3D12_TEXTURE_LAYOUT_ROW_MAJOR10x1

テクスチャのデータが行優先順 (row-major order、「ピッチリニア順」と呼ばれることもあります) で格納されていることを示します。

このテクスチャ レイアウトでは、1 つの行の連続するテクセルがメモリ上で連続して配置され、その後に次の行のテクセルが続きます。 同様に、特定の深度スライスまたは配列スライスの連続するテクセルはメモリ上で連続しており、その後に次の深度スライスまたは配列スライスのテクセルが続きます。 データのまとまりを整列させるために、行と行の間や、深度スライスまたは配列スライスの間にパディングが存在する場合があります。 ストライドとは、行、深度スライス、または配列スライスの間のメモリ上の距離であり、パディングも含まれます。

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

このレイアウトは一般に多用するには効率的でないため、多くの制限があります。

  • 近接するテクセルの局所性は回転不変ではありません。
  • サポートされるテクスチャ プロパティは次のものだけです。
    • D3D12_RESOURCE_DIMENSION_TEXTURE_2D。
    • 単一のミップ レベル。
    • 単一の配列スライス。
    • 64KB のアラインメント。
    • 非 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_SWIZZLE20x2

64KB タイル内のレイアウトと末尾ミップ (tail mip) のパッキングがドライバーに委ねられることを示します。 標準のスウィズル パターンはありません。

このテクスチャ レイアウトは、タイルとも呼ばれる連続した 64KB の領域に配置され、各次元に沿ってほぼ等しい数の連続するテクセルを含みます。 タイルは行優先順に配置されます。 タイル間にパディングはありませんが、通常は各次元の最後のタイル内に未使用のテクセルが存在します。 タイル内のテクセルのレイアウトは未定義です。 各サブリソースは直前のサブリソースが終わる位置の直後に続き、サブリソースの順序はサブリソース序数と同じ並びに従います。 ただし、末尾ミップのパッキングはアダプター固有です。 詳細については、タイル リソース ティアと ID3D12Device::GetResourceTiling を参照してください。

このテクスチャ レイアウトは、仮想メモリのページ マッピング機能と組み合わせて使用することで、部分的に常駐する (スパースな) テクスチャのシナリオを可能にします。 このテクスチャ レイアウトは ID3D12Device::CreateReservedResource と併用しなければならず、それによって ID3D12CommandQueue::UpdateTileMappings を使用できるようになります。

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

  • アダプターが D3D12_TILED_RESOURCES_TIER 1 以上をサポートしていなければなりません。
  • 64KB のアラインメントを使用しなければなりません。
  • D3D12_RESOURCE_DIMENSION_TEXTURE1D はサポートされておらず、すべてのフォーマットがサポートされるわけでもありません。
  • D3D12_RESOURCE_DIMENSION_TEXTURE3D のテクスチャがサポートされるかどうかは、タイル リソース ティアによって示されます。
D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE30x3

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

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

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

このレイアウトの制限として、次のものはサポートされません。

公式ドキュメント

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

解説(Remarks)

この列挙型は D3D12_RESOURCE_DESC 構造体で使用されます。

この列挙型は、既定のテクスチャのスウィズル パターンを制御し、既定のテクスチャでのマップのサポートを有効にします。 呼び出し元は、各オプションがサポートされていることを確認するために D3D12_FEATURE_DATA_D3D12_OPTIONS を照会しなければなりません。

標準スウィズル フォーマットはページ サイズのチャンクごとに適用され、ページどうしは互いに線形順に配置されます。 16 ビットのインターリーブ パターンが、スウィズル前のページ内位置からスウィズル後の位置への変換を定義します。

Standard swizzle patterns

例として、上記の 2D 32bpp スウィズル フォーマットを考えます。 これは次のインターリーブ マスクで表されます (左側のビットが最上位です)。

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

スウィズルされたアドレスを計算するには、次のようなコードを使用できます (_pdep_u32 組み込み命令がサポートされている場合)。

UINT swizzledOffset = resourceBaseOffset +
                      _pdep_u32(xOffset, xBytesMask) +
                      _pdep_u32(yOffset, yBytesMask);
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

列挙メンバーの定義。HSP タブは #define global(値は16進)。

typedef enum D3D12_TEXTURE_LAYOUT : int {
    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;
public enum D3D12_TEXTURE_LAYOUT : int
{
    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,
}
Public Enum D3D12_TEXTURE_LAYOUT As Integer
    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
End Enum
import enum

class D3D12_TEXTURE_LAYOUT(enum.IntEnum):
    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
pub const D3D12_TEXTURE_LAYOUT_UNKNOWN: i32 = 0;
pub const D3D12_TEXTURE_LAYOUT_ROW_MAJOR: i32 = 1;
pub const D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE: i32 = 2;
pub const D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE: i32 = 3;
// D3D12_TEXTURE_LAYOUT
const (
	D3D12_TEXTURE_LAYOUT_UNKNOWN int32 = 0
	D3D12_TEXTURE_LAYOUT_ROW_MAJOR int32 = 1
	D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE int32 = 2
	D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE int32 = 3
)
const
  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
pub const D3D12_TEXTURE_LAYOUT_UNKNOWN: i32 = 0;
pub const D3D12_TEXTURE_LAYOUT_ROW_MAJOR: i32 = 1;
pub const D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE: i32 = 2;
pub const D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE: i32 = 3;
const
  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
enum D3D12_TEXTURE_LAYOUT : int {
    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,
}
#define global D3D12_TEXTURE_LAYOUT_UNKNOWN                0x0
#define global D3D12_TEXTURE_LAYOUT_ROW_MAJOR              0x1
#define global D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE 0x2
#define global D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE  0x3