磁碟區磚資源 (Direct3D 12)
磁碟區 (3D) 紋理可用來作為磚資源,指出磚解析度為三維。
概述
並排式資源會將 Direct3D 資源物件與其備份記憶體分離(過去的資源與其備份記憶體有 1:1 關聯性)。 這允許各種有趣的案例,例如串流紋理數據,以及重複使用或減少記憶體使用量。
Direct3D 11.2 支援 2D 紋理並排資源。 3D 並排紋理的選擇性支援適用於 Direct3D 12 和 Direct3D 11.3(請參閱 D3D12_TILED_RESOURCES_TIER)。
2D 紋理所使用的一般資源維度為 4 x 4 磚,3D 紋理則為 4 x 4 x 4 磚。
位/像素(1 個樣本/像素) | 磚尺寸(像素,w x h x d) |
---|---|
8 | 64x32x32 |
16 | 32x32x32 |
32 | 32x32x16 |
64 | 32x16x16 |
128 | 16x16x16 |
BC 1,4 | 128x64x16 |
BC 2,3,5,6,7 | 64x64x16 |
請注意,磚化資源不支援下列格式:96bpp 格式、視訊格式、R1_UNORM、R8G8_B8G8_UNORM、R8R8_G8B8_UNORM。
在下圖中,深灰色代表 NULL 圖格。
- 紋理 3D 並排顯示資源預設對應 (最詳細的 mip)
- 紋理 3D 並排顯示資源默認對應 (第二個最詳細的 mip)
- 紋理 3D 並排顯示資源 (最詳細的 mip)
- 紋理 3D 並排顯示資源 (第二個最詳細的 mip)
- 紋理 3D 並排顯示資源 (單一磚)
- 紋理 3D 並排資源 (統一方塊)
紋理 3D 並排顯示的資源預設對應 (最詳細的 mip)
紋理 3D 並排顯示的資源預設對應 (第二個最詳細的 mip)
紋理 3D 並排顯示資源 (最詳細的 Mip)
下列程式代碼會在最詳細的 Mip 上設定 3D 並排顯示的資源。
D3D12_TILED_RESOURCE_COORDINATE trCoord{};
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 0;
D3D12_TILE_REGION_SIZE trSize{};
trSize.bUseBox = false;
trSize.NumTiles = 63;
最詳細的 mip
紋理 3D 並排顯示資源 (第二部最詳細的 mip)
下列程式代碼會設定 3D 並排顯示的資源,以及第二個最詳細的 mip。
D3D12_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 1;
D3D12_TILE_REGION_SIZE trSize;
trSize.bUseBox = false;
trSize.NumTiles = 6;
紋理 3D 並排顯示資源 (單一磚)
下列程式代碼會設定單一磚資源。
D3D12_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 1;
trCoord.Z = 1;
trCoord.Subresource = 0;
D3D12_TILE_REGION_SIZE trSize;
trSize.bUseBox = true;
trSize.NumTiles = 27;
trSize.Width = 3;
trSize.Height = 3;
trSize.Depth = 3;
紋理 3D 並排顯示資源 (統一方塊)
下列程式代碼會設定統一方塊並排資源(請注意 語句 trSize.bUseBox = true;) :
D3D12_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 0;
trCoord.Y = 1;
trCoord.Z = 0;
trCoord.Subresource = 0;
D3D12_TILE_REGION_SIZE trSize;
trSize.bUseBox = true;
trSize.NumTiles = 27;
trSize.Width = 3;
trSize.Height = 3;
trSize.Depth = 3;
並排顯示的資源 API
相同的 API 呼叫同時用於 2D 和 3D 並排顯示的資源。
列舉
- D3D12_TILED_RESOURCES_TIER :決定磚資源支援層級。
- D3D12_FORMAT_SUPPORT2 :用來測試磚資源支援。
- D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS:決定多重取樣資源中的磚資源支援。
- D3D12_TILE_COPY_FLAGS:保留旗標來回復制和從已撥動的磚資源和線性緩衝區。
結構
- D3D12_TILED_RESOURCE_COORDINATE:保留 x、y 和 z 座標,以及子資源參考。 請注意,有協助程式結構:CD3DX12_TILED_RESOURCE_COORDINATE。
- D3D12_TILE_REGION_SIZE :指定磚區域的大小和數目。
- D3D12_TILE_SHAPE:圖格圖形為材質的寬度、高度和深度。
- D3D12_FEATURE_DATA_D3D12_OPTIONS:保留支援的磚資源層級和布爾值,VolumeTiledResourcesSupported,指出是否支援磁碟區磚資源。
方法
- ID3D12Device::CheckFeatureSupport:用來判斷目前硬體支援哪些功能,以及哪個層級。
- ID3D12GraphicsCommandList::CopyTiles:將磚從緩衝區複製到並排資源,反之亦然。
- ID3D12CommandQueue::UpdateTileMappings:更新磚資源中磚位置與資源堆積中記憶體位置的對應。
- ID3D12CommandQueue::CopyTileMappings:將來源磚資源的對應複製到目的地並排顯示的資源。
- ID3D12Device::GetResourceTiling:取得磚資源如何分解成磚的資訊。