立体平铺资源
立体 (3D) 纹理可以用作平铺资源,请注意,平铺分辨率是三维的。
概述
平铺资源将 D3D 资源对象与其后备内存分离(过去的资源与其后备内存存在一对一的关系)。 这允许各种有趣的方案,例如在纹理数据中流式传输以及重用或减少内存使用量
D3D11.2 支持 2D 纹理平铺资源。 D3D12 和 D3D11.3 添加了对 3D 平铺纹理的支持。
平铺中使用的典型资源尺寸是 4 x 4 个图块(针对 2D 纹理)和 4 x 4 x 4 个图块(针对 3D 纹理)。
位数/像素(每像素 1 个示例) | 磁贴尺寸(像素,宽 x 高 x 深) |
---|---|
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 平铺资源。
D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 0;
D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = false;
trSize.NumTiles = 63;
纹理 3D 平铺资源(第二详细的 MIP)
下面的代码会设置一个 3D 平铺资源和第二详细的 MIP:
D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 1;
D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = false;
trSize.NumTiles = 6;
纹理 3D 平铺资源(单平铺)
下面的代码会设置单平铺资源:
D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 1;
trCoord.Z = 1;
trCoord.Subresource = 0;
D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = true;
trSize.NumTiles = 27;
trSize.Width = 3;
trSize.Height = 3;
trSize.Depth = 3;
纹理 3D 平铺资源(统一框)
以下代码会设置统一框平铺资源(请注意语句 trSize.bUseBox = true;) :
D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 0;
trCoord.Y = 1;
trCoord.Z = 0;
trCoord.Subresource = 0;
D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = true;
trSize.NumTiles = 27;
trSize.Width = 3;
trSize.Height = 3;
trSize.Depth = 3;
D3D11.3 平铺资源 API
对 2D 和 3D 平铺资源使用相同的 API 调用:
枚举
- D3D11_TILED_RESOURCES_TIER :确定平铺资源支持级别。
- D3D11_FORMAT_SUPPORT2 :用于测试平铺资源支持。
- D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG :确定多采样资源中的平铺资源支持。
- D3D11_TILE_COPY_FLAGS :保存用于向/从重排平铺资源和线性缓冲区复制的标志。
结构
- D3D11_TILED_RESOURCE_COORDINATE :保留 x、y 和 z 坐标和子资源引用。 请注意,有一个帮助程序类:CD3D11_TILED_RESOURCE_COORDINATE。
- D3D11_TILE_REGION_SIZE :指定平铺区域的大小和磁贴数。
- D3D11_TILE_SHAPE :以纹素表示宽度、高度和深度的磁贴形状。
- D3D11_FEATURE_DATA_D3D11_OPTIONS1:保留支持的磁贴资源层级别。
方法
- ID3D11Device::CheckFeatureSupport :用于确定当前硬件支持哪些功能以及哪些层。
- ID3D11DeviceContext2::CopyTiles :将磁贴从缓冲区复制到平铺资源,反之亦然。
- ID3D11DeviceContext2::UpdateTileMappings :将平铺资源中的磁贴位置映射更新到磁贴池中的内存位置。
- ID3D11DeviceContext2::CopyTileMappings :将映射从源平铺资源复制到目标平铺资源。
- ID3D11DeviceContext2::GetResourceTiling :获取有关如何将平铺资源分解为磁贴的信息。
相关主题