卷平铺资源 (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_UNORMR8G8_B8G8_UNORMR8R8_G8B8_UNORM

在下图中,深灰色表示 NULL 磁贴。

纹理 3D 平铺资源默认映射(最详细的 mip)

平铺三维资源 的默认映射

纹理 3D 平铺资源默认映射(第二个最详细的 mip)

显示第二个最详细的 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 平铺资源。

枚举

结构

方法