D3D12_RESOURCE_DESC结构 (d3d12.h)
描述资源,例如纹理。 此结构广泛使用。
语法
typedef struct D3D12_RESOURCE_DESC {
D3D12_RESOURCE_DIMENSION Dimension;
UINT64 Alignment;
UINT64 Width;
UINT Height;
UINT16 DepthOrArraySize;
UINT16 MipLevels;
DXGI_FORMAT Format;
DXGI_SAMPLE_DESC SampleDesc;
D3D12_TEXTURE_LAYOUT Layout;
D3D12_RESOURCE_FLAGS Flags;
} D3D12_RESOURCE_DESC;
成员
Dimension
D3D12_RESOURCE_DIMENSION的一个成员,指定资源的维度(例如,D3D12_RESOURCE_DIMENSION_TEXTURE1D),还是缓冲区(D3D12_RESOURCE_DIMENSION_BUFFER)。
Alignment
指定对齐方式。
Width
指定资源的宽度。
Height
指定资源的高度。
DepthOrArraySize
指定资源的深度(如果为 3D)或数组大小(如果它是 1D 或 2D 资源的数组)。
MipLevels
指定 MIP 级别数。
Format
指定 DXGI_FORMAT的一个成员。
SampleDesc
指定 DXGI_SAMPLE_DESC 结构。
Layout
指定 D3D12_TEXTURE_LAYOUT的一个成员。
Flags
按位 OR 标记,作为 D3D12_RESOURCE_FLAGS 枚举常量。
言论
将此结构用于:
- ID3D12Resource::GetDesc
- ID3D12Device::GetResourceAllocationInfo
- ID3D12Device::CreateCommittedResource
- ID3D12Device::CreatePlacedResource
- ID3D12Device::CreateReservedResource
- ID3D12Device::GetCopyableFootprints
- 许多帮助程序函数,请参阅 D3D12的帮助程序结构和函数。
两个常见资源是缓冲区和纹理,它们都使用此结构,但字段的使用方式却大相径庭。
缓冲区
缓冲区是连续的内存区域。 Width 可以是 1 到已提交资源的 D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORTD3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT 的 MaxGPUVirtualAddressBitsPerResource 字段或 MaxGPUVirtualAddressBitsPerProcess 字段。 但是,GPU 虚拟地址空间、内存驻留预算耗尽(请参阅 IDXGIAdapter3::QueryVideoMemoryInfo),或者系统内存可能很容易首先发生。对齐 必须为 64KB(D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT)或 0,实际上为 64KB。
Height、DepthOrArraySize,MipLevels 必须为 1。
格式 必须DXGI_FORMAT_UNKNOWN。
SampleDesc.Count 必须为 1,质量 必须为 0。
布局 必须D3D12_TEXTURE_LAYOUT_ROW_MAJOR,因为应用程序理解缓冲区内存布局,行主纹理数据通常通过缓冲区封送。
标志 仍必须由缓冲区的应用程序准确填写,但出现轻微异常。 但是,应用程序可以使用最多的功能支持,而不必担心对缓冲区的效率影响。 标志字段用于控制与纹理相关的属性。
纹理
纹理是连续内存区域中纹素的多维排列,经过大量优化,以最大化呈现和采样的带宽。 纹理大小很难预测,并且因适配器而异。 应用程序必须使用 ID3D12Device::GetResourceAllocationInfo 来准确了解其大小。TEXTURE1D、TEXTURE2D和TEXTURE3D在每个格式上都不支持正交。 请参阅 D3D12_FORMAT_SUPPORT1中的D3D12_FORMAT_SUPPORT1_TEXTURE1D、D3D12_FORMAT_SUPPORT1_TEXTURE2D和D3D12_FORMAT_SUPPORT1_TEXTURE3D的使用。
Width、Height和 DepthOrArraySize 必须介于 1 和特定特征级别和纹理维度支持的最大维度之间。 但是,GPU 虚拟地址空间、内存驻留预算耗尽(请参阅 IDXGIAdapter3::QueryVideoMemoryInfo),或者系统内存可能很容易首先发生。 对于压缩格式,这些维度是逻辑的。 例如:
- 对于TEXTURE1D:
- 宽度 必须小于或等于小于 11_0 的功能级别和功能级别 11_0 或更高版本的D3D11_REQ_TEXTURE1D_U_DIMENSION D3D10_REQ_TEXTURE1D_U_DIMENSION。
- 高度 必须为 1。
- DepthOrArraySize 被解释为数组大小,并且必须在小于 11_0 的功能级别上D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION小于或等于D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION功能级别 11_0 或更高版本。
- 对于TEXTURE2D:
- 宽度 和 高度 必须小于或等于功能级别小于或等于 11_0 和D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION或功能级别 11_0 或更高版本的D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION。
- DepthOrArraySize 被解释为数组大小,并且必须小于或等于功能级别小于 11_0 和功能级别 11_0 或更高版本的D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION。
- 对于TEXTURE3D:
- 宽度 和 高度 和 DepthOrArraySize 必须小于或等于功能级别小于或等于 11_0 的功能级别上的D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION,并且功能级别为 11_0 或更高版本D3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSION。
- DepthOrArraySize 被解释为深度。
对齐方式
对齐 可以是 0、4KB、64KB 或 4MB 之一。如果 对齐 设置为 0,运行时会将 4MB 用于 MSAA 纹理,将针对其他所有内容使用 64KB。 当纹理较小时,应用程序可能会为几个纹理类型选择比这些默认值更小的对齐方式。 可以使用 64KB 对齐方式创建具有 UNKNOWN 布局和 MSAA 的纹理(如果它们通过下面详述的较小大小限制)。
具有未知布局且没有 MSAA 且没有呈现目标或深度模具标志的纹理可以使用 4KB 对齐方式创建(同样,传递较小的大小限制)。
当最详细的 mip 级别的估计大小是较大对齐限制或更少时,应用程序可以创建更小的对齐资源。 运行时将使用独立于体系结构的大小估计机制,该机制模拟标准重排和 D3D12 平铺资源的大小方式。 但是,磁贴大小将是此类计算的较小对齐限制。 以非呈现目标和非深度模具纹理为例,运行时将假定近等平铺形状为 4KB,并计算最详细的 mip 级别所需的磁贴数。 如果磁贴数等于或小于 16,则应用程序可以创建 4KB 对齐的资源。 因此,只要宽度和高度足够小,任何数组大小和任意数量的 mip 级别都可以为 4KB 的 mi2d 数组。只要宽度和高度足够小,适合特定格式和 MSAA。
MipLevels
MipLevels 可以是 0 或 1 到 Width、Height 和 DepthOrArraySize 维度支持的最大 mip 级别。 使用 0 时,API 将自动计算支持的最大 mip 级别,并使用该级别。 但是,某些资源和堆属性会阻止 mip 级别,因此应用必须将值指定为 1。有关每个格式的限制,请参阅 D3D12_FORMAT_SUPPORT1 D3D12_FORMAT_SUPPORT1_MIP字段。 MSAA 资源、具有D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER的纹理以及具有D3D12_HEAP_FLAG_ALLOW_DISPLAY的堆都排除了 mip 级别。
格式
格式 必须是设备功能级别支持的有效格式。SampleDesc
SampleDesc.Count 大于 1 和/或非零 质量 仅支持TEXTURE2D;设置D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET或D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL时。不支持以下各项:
- D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
- D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,
- D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
- D3D12_HEAP_FLAG_ALLOW_DISPLAY
要求
要求 | 价值 |
---|---|
标头 | d3d12.h |