D3D12_TEXTURE_LAYOUT列舉 (d3d12.h)
指定紋理配置選項。
Syntax
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_TEXTURE_LAYOUT_ROW_MAJOR建立,因為數據列主要紋理數據可以位於它們中,而不需要建立紋理物件。 這通常用於上傳或讀取回溯紋理數據,特別是針對離散/NUMA 配接器。 不過, D3D12_TEXTURE_LAYOUT_ROW_MAJOR也可以在 GPU 或配接器之間封送處理紋理數據時使用。 如需使用 ID3D12GraphicsCommandList::CopyTextureRegion 的使用範例,請參閱下列一些主題: |
D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE 值: 2 表示 64KB 磚和尾 mip 封裝內的版面配置會由驅動程序決定。 沒有標準wizzle 模式。 此紋理配置會排列成連續的 64KB 區域,也稱為磚,其中包含在每個維度上連續的材質數目接近等量。 磚會依數據列主要順序排列。 雖然磚之間沒有邊框間距,但通常在每個維度的最後一個磚內沒有未使用的紋素。 圖格內的紋素版面配置未定義。 每個子資源緊接在前一個子資源結束的位置,而子資源順序會遵循與子資源序數相同的序列。 不過,尾 mip 封裝是配接器特定的。 如需詳細資訊,請參閱並排顯示的資源層和 ID3D12Device::GetResourceTiling。 此紋理配置可在與虛擬記憶體頁面對應功能搭配使用時,啟用部分駐留或疏鬆紋理案例。 此紋理配置必須與 ID3D12Device::CreateReservedResource 搭配使用,才能使用 ID3D12CommandQueue::UpdateTileMappings。 某些限制適用於具有此版面配置的紋理:
|
D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE 值: 3 表示預設紋理使用標準化的wizzle 圖樣。 此紋理配置會以與D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE相同的方式排列,不同之處在於會定義圖格內的紋素配置。 尾 mip 封裝是配接器特定的。 此紋理配置可在封送處理多個適配卡或 CPU 與 GPU 之間的數據時進行優化。 當多個元件瞭解紋理記憶體配置時,可以減少複製的數量。 此配置通常比數據列主要版面配置更有效率,因為鄰近紋素的旋轉不可變位置。 此配置通常只能與支援標準wizzle 的適配卡搭配使用,但跨配接器共用堆積有例外狀況。 此版面配置的限制是不支援下列各項:
|
備註
D3D12_RESOURCE_DESC 結構會 使用此列舉。
此列舉可控制預設紋理的撥動模式,並啟用預設紋理的地圖支援。 呼叫端必須查詢 D3D12_FEATURE_DATA_D3D12_OPTIONS ,以確保支援每個選項。
標準撥動格式會套用在每個頁面大小的區塊內,而且頁面會以線性順序配置彼此。 16 位交錯模式會定義從頁面內預先撥動位置到后撥動位置的轉換。
若要示範,請考慮上述的 2D 32bpp swizzle 格式。 這會以下列交錯遮罩表示,其中左邊的位最重要:
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);
規格需求
需求 | 值 |
---|---|
標頭 | d3d12.h |