卷平铺资源 (Direct3D 12)
卷(3D)纹理可用作平铺资源,指出磁贴分辨率为三维。
概述
平铺资源将 Direct3D 资源对象与其后盾内存分离(过去资源与其后盾内存有 1:1 关系)。 这允许各种有趣的方案,例如在纹理数据中流式处理以及重用或减少内存使用量。
Direct3D 11.2 支持 2D 纹理平铺资源。 Direct3D 12 和 Direct3D 11.3(请参阅 D3D12_TILED_RESOURCES_TIER)提供了对 3D 平铺纹理的可选支持。
平铺中使用的典型资源维度是 4 x 4 平铺用于 2D 纹理,4 x 4 x 4 平铺用于 3D 纹理。
位/像素 (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;
的第二详细 mip
纹理 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:获取有关平铺资源如何分解为磁贴的信息。