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 枚举常量。

注解

将此结构用于:

两种常见资源是缓冲区和纹理,它们都使用此结构,但字段的用途却大相径庭。

缓冲区

缓冲区是连续的内存区域。 Width 可以介于 1 和已提交资源的 maxGPUVirtualAddressBitsPerResource字段D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORTMaxGPUVirtualAddressBitsPerProcess 字段之间。 但是,GPU 虚拟地址空间耗尽、内存驻留预算 (请参阅 IDXGIAdapter3::QueryVideoMemoryInfo) ,或系统内存可能很容易先发生。

对齐 必须为 64KB (D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) 或 0,即 64KB。

HeightDepthOrArraySizeMipLevels 必须为 1。

格式 必须DXGI_FORMAT_UNKNOWN。

SampleDesc.Count 必须为 1,Quality 必须为 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

WidthHeightDepthOrArraySize 必须介于 1 和特定特征级别和纹理尺寸支持的最大尺寸之间。 但是,GPU 虚拟地址空间耗尽、内存驻留预算 (请参阅 IDXGIAdapter3::QueryVideoMemoryInfo) ,或系统内存可能很容易先发生。 对于压缩格式,这些维度是合乎逻辑的。 例如:

  • 对于TEXTURE1D:
    • 对于 小于 11_0 的功能级别,宽度必须小于或等于D3D10_REQ_TEXTURE1D_U_DIMENSION,在功能级别 11_0 或更高时D3D11_REQ_TEXTURE1D_U_DIMENSION。
    • 高度 必须为 1。
    • DepthOrArraySize 被解释为数组大小,并且必须小于或等于小于 11_0 的功能级别上的D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION,在功能级别 11_0 或更高时D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION。
  • 对于TEXTURE2D:
    • 宽度高度 必须小于或等于D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION小于 11_0 的功能级别和D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION或特征级别 11_0 或更高。
    • DepthOrArraySize 解释为数组大小,必须小于或等于小于 11_0 的功能级别上的D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION,在功能级别 11_0 或更高时D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION。
  • 对于TEXTURE3D:
    • WidthHeightDepthOrArraySize 必须小于或等于功能级别小于 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 之一。

如果 Alignment 设置为 0,则运行时将对 MSAA 纹理使用 4MB,对其他所有纹理使用 64KB。 当纹理较小时,对于几个纹理类型,应用程序可能会选择比这些默认值更小的对齐方式。 如果具有未知布局和 MSAA 的纹理通过以下) 详述的小尺寸限制,则可以通过 64KB 对齐 (创建纹理。

可以使用 4KB 对齐 (再次创建具有无 MSAA 且没有呈现目标或深度模具标志的未知布局的纹理,同时) 传递较小的大小限制。

当最详细的 mip 级别的估计大小为较大或更小的对齐限制的总和时,应用程序可以创建较小的对齐资源。 运行时将使用与体系结构无关的大小估计机制,该机制模拟标准重排和 D3D12 平铺资源的大小调整方式。 但是,对于此类计算,磁贴大小将受到较小的对齐限制。 以非呈现目标和非深度模具纹理为例,运行时将假定近等边图块形状为 4KB,并计算最详细的 mip 级别所需的平铺数。 如果磁贴数等于或小于 16,则应用程序可以创建 4KB 对齐的资源。 因此,只要宽度和高度对于特定格式和 MSAA 足够小,任何数组大小和任意数量的 mip 级别的 mip 的 mipped 2d 数组都可以为 4KB。

MipLevels

MipLevels 可以为 0,或 1 到 WidthHeightDepthOrArraySize 维度支持的最大 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 级别。

Format

格式 必须是设备功能级别支持的有效格式。

SampleDesc

仅当设置了 D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET 或 TEXTURE2D D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL 时,才支持大于 1 和/或非零 Quality 的SampleDesc.Count

不支持以下项:

  • D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
  • D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,
  • D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
  • D3D12_HEAP_FLAG_ALLOW_DISPLAY
请参阅D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS来确定有效的计数和质量值。

要求

要求
Header d3d12.h

另请参阅

CD3DX12_RESOURCE_DESC

核心结构

D3D12_HEAP_FLAGS