D3D12_RESOURCE_STATES 枚举 (d3d12.h)

定义常量,这些常量指定资源与资源的使用方式相关的状态。

语法

typedef enum D3D12_RESOURCE_STATES {
  D3D12_RESOURCE_STATE_COMMON = 0,
  D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x1,
  D3D12_RESOURCE_STATE_INDEX_BUFFER = 0x2,
  D3D12_RESOURCE_STATE_RENDER_TARGET = 0x4,
  D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 0x8,
  D3D12_RESOURCE_STATE_DEPTH_WRITE = 0x10,
  D3D12_RESOURCE_STATE_DEPTH_READ = 0x20,
  D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 0x40,
  D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 0x80,
  D3D12_RESOURCE_STATE_STREAM_OUT = 0x100,
  D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 0x200,
  D3D12_RESOURCE_STATE_COPY_DEST = 0x400,
  D3D12_RESOURCE_STATE_COPY_SOURCE = 0x800,
  D3D12_RESOURCE_STATE_RESOLVE_DEST = 0x1000,
  D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 0x2000,
  D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE = 0x400000,
  D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE = 0x1000000,
  D3D12_RESOURCE_STATE_RESERVED_INTERNAL_8000,
  D3D12_RESOURCE_STATE_RESERVED_INTERNAL_4000,
  D3D12_RESOURCE_STATE_RESERVED_INTERNAL_100000,
  D3D12_RESOURCE_STATE_RESERVED_INTERNAL_40000000,
  D3D12_RESOURCE_STATE_RESERVED_INTERNAL_80000000,
  D3D12_RESOURCE_STATE_GENERIC_READ,
  D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE,
  D3D12_RESOURCE_STATE_PRESENT = 0,
  D3D12_RESOURCE_STATE_PREDICATION = 0x200,
  D3D12_RESOURCE_STATE_VIDEO_DECODE_READ = 0x10000,
  D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE = 0x20000,
  D3D12_RESOURCE_STATE_VIDEO_PROCESS_READ = 0x40000,
  D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE = 0x80000,
  D3D12_RESOURCE_STATE_VIDEO_ENCODE_READ = 0x200000,
  D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE = 0x800000
} ;

常量

 
D3D12_RESOURCE_STATE_COMMON
值: 0
应用程序应仅为了跨不同图形引擎类型访问资源而转换为此状态。

具体而言,在以前在 DIRECT/COMPUTE) 上使用资源之前,在 COPY 队列 (上使用资源之前,在 DIRECT/COMPUTE (上使用之前,必须先处于 COMMON 状态,然后再用于 COPY) 。 在 DIRECT 和 COMPUTE 队列之间访问数据时,不存在此限制。

对于使用隐式状态转换的所有复制队列用法,可以使用 COMMON 状态。 有关详细信息,请在 多引擎同步中找到“common”。

此外,纹理必须处于 COMMON 状态,以便 CPU 访问合法,假设纹理最初是在 CPU 可见堆中创建的。
D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER
值: 0x1
当 GPU 作为顶点缓冲区或常量缓冲区访问子资源时,子资源必须处于此状态。 这是只读状态。
D3D12_RESOURCE_STATE_INDEX_BUFFER
值: 0x2
当 3D 管道作为索引缓冲区访问子资源时,子资源必须处于此状态。 这是只读状态。
D3D12_RESOURCE_STATE_RENDER_TARGET
值: 0x4
资源用作呈现器目标。 当子资源呈现到或被 ID3D12GraphicsCommandList::ClearRenderTargetView 清除时,子资源必须处于此状态。

这是一种只写状态。 若要从呈现器目标作为着色器资源进行读取,该资源必须位于 D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCED3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE中。
D3D12_RESOURCE_STATE_UNORDERED_ACCESS
值: 0x8
资源用于无序访问。 当 GPU 通过无序访问视图访问子资源时,子资源必须处于此状态。 使用 ID3D12GraphicsCommandList::ClearUnorderedAccessViewIntID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat 清除子资源时,也必须处于此状态。 这是读/写状态。
D3D12_RESOURCE_STATE_DEPTH_WRITE
值: 0x10
D3D12_RESOURCE_STATE_DEPTH_WRITE 是与其他状态互斥的状态。 当标志 (看到D3D12_CLEAR_FLAGS) 指示应 (清除给定子资源时,应将其用于 ID3D12GraphicsCommandList::ClearDepthStencilView,否则子资源状态) 无关紧要, 在可写深度模具视图中使用它时, (在 PSO 启用了深度写入时看到D3D12_DSV_FLAGS) (查看D3D12_DEPTH_STENCIL_DESC) 。
D3D12_RESOURCE_STATE_DEPTH_READ
值: 0x20
DEPTH_READ是可以与其他状态组合的状态。 当子资源位于只读深度模具视图中时,或禁用 D3D12_DEPTH_STENCIL_DESC 的深度写入时,应使用该参数。 它可以与其他读取状态组合 (例如 ,D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE) ,以便资源可用于深度或模具测试,并由同一绘图调用中的着色器访问。 当绘制调用将写入深度或清除命令无效时使用。
D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE
值: 0x40
资源与像素着色器以外的着色器一起使用。 子资源必须处于此状态,然后才能被任何阶段 (读取,但像素着色器阶段) 通过着色器资源视图读取。 只要像素着色器中还设置了标志 D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE ,你仍然可以使用此标志的资源。 这是只读状态。
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE
值: 0x80
资源与像素着色器一起使用。 在像素着色器通过着色器资源视图读取子资源之前,子资源必须处于此状态。 这是只读状态。
D3D12_RESOURCE_STATE_STREAM_OUT
值: 0x100
资源与流输出一起使用。 当 3D 管道作为流出目标访问子资源时,子资源必须处于此状态。 这是一种只写状态。
D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT
值: 0x200
资源用作间接参数。
当子资源用作传递给间接绘图方法 ID3D12GraphicsCommandList::ExecuteIndirect 的参数缓冲区时,子资源必须处于此状态。
这是只读状态。
D3D12_RESOURCE_STATE_COPY_DEST
值: 0x400
资源用作复制操作中的目标。
当子资源用作复制操作或 blt 操作的目标时,子资源必须处于此状态。
这是一种只写状态。
D3D12_RESOURCE_STATE_COPY_SOURCE
值: 0x800
资源用作复制操作中的源。
当子资源用作复制操作或 blt 操作的源时,它们必须处于此状态。
这是只读状态。
D3D12_RESOURCE_STATE_RESOLVE_DEST
值: 0x1000
资源用作解析操作中的目标。
D3D12_RESOURCE_STATE_RESOLVE_SOURCE
值: 0x2000
资源用作解析操作中的源。
D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE
值: 0x400000
使用此作为初始状态创建缓冲区时,指示资源是光线跟踪加速结构,用于 ID3D12GraphicsCommandList4::BuildRaytracingAccelerationStructureID3D12GraphicsCommandList4::CopyRaytracingAccelerationStructureID3D12Device::CreateShaderResourceView中用于D3D12_SRV_DIMENSION_RAYTRACING_ACCELERATION_STRUCTURE 维度。

注意

要用于 D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE 状态的资源必须在该状态下创建,然后永远不会从中转换出来。 创建的未处于该状态的资源也不能转换为该资源。 有关详细信息,请参阅 GitHub 上的 DirectX 光线跟踪 (DXR) 功能规范中的 加速结构内存限制

D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE
值: 0x1000000
从 Windows 10 版本 1903 开始, (10.0;内部版本 18362) ,指示资源是用于可变速率着色 (VRS) 的屏幕空间着色率图像。 有关详细信息,请参阅 可变速率着色 (VRS)
D3D12_RESOURCE_STATE_GENERIC_READ
D3D12_RESOURCE_STATE_GENERIC_READ是其他读取状态位的逻辑 OR 组合。 这是上传堆所需的启动状态。 应用程序通常应尽可能避免转换为D3D12_RESOURCE_STATE_GENERIC_READ,因为这可能会导致缓存过早刷新或资源布局更改 (例如压缩/解压缩) ,从而导致不必要的管道停滞。 相反,应仅将资源转换为实际使用的状态。
D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE
等效于 D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE
D3D12_RESOURCE_STATE_PRESENT
值: 0
与 D3D12_RESOURCE_STATE_COMMON 同义。
D3D12_RESOURCE_STATE_PREDICATION
值: 0x200
资源用于 Predication
D3D12_RESOURCE_STATE_VIDEO_DECODE_READ
值: 0x10000
资源在解码操作中用作源。 示例包括读取压缩的位流和从解码引用读取,
D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE
值: 0x20000
资源用作解码操作中的目标。 此状态用于解码输出和直方图。
D3D12_RESOURCE_STATE_VIDEO_PROCESS_READ
值: 0x40000
资源用于在视频处理期间读取视频数据;也就是说,资源在处理操作(如视频编码 (压缩) )中用作源。
D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE
值: 0x80000
资源用于在视频处理期间写入视频数据;也就是说,资源用作处理操作(例如视频编码 (压缩) )的目标。
D3D12_RESOURCE_STATE_VIDEO_ENCODE_READ
值: 0x200000
资源用作编码操作中的源。 此状态用于运动估计的输入和引用。
D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE
值: 0x800000
此资源用作编码操作中的目标。 此状态用于解析运动矢量堆操作的目标纹理。

备注

此枚举由以下方法使用:

要求

   
标头 d3d12.h

另请参阅