D3D12DDI_BARRIER_ACCESS枚举 (d3d12umddi.h)

D3D12DDI_BARRIER_ACCESS 值是以下字段的按位 OR,用于指定对屏障的资源访问。

语法

typedef enum D3D12DDI_BARRIER_ACCESS {
  D3D12DDI_BARRIER_ACCESS_COMMON = 0x0,
  D3D12DDI_BARRIER_ACCESS_VERTEX_BUFFER = 0x1,
  D3D12DDI_BARRIER_ACCESS_CONSTANT_BUFFER = 0x2,
  D3D12DDI_BARRIER_ACCESS_INDEX_BUFFER = 0x4,
  D3D12DDI_BARRIER_ACCESS_RENDER_TARGET = 0x8,
  D3D12DDI_BARRIER_ACCESS_UNORDERED_ACCESS = 0x10,
  D3D12DDI_BARRIER_ACCESS_DEPTH_STENCIL_WRITE = 0x20,
  D3D12DDI_BARRIER_ACCESS_DEPTH_STENCIL_READ = 0x40,
  D3D12DDI_BARRIER_ACCESS_SHADER_RESOURCE = 0x80,
  D3D12DDI_BARRIER_ACCESS_STREAM_OUTPUT = 0x100,
  D3D12DDI_BARRIER_ACCESS_INDIRECT_ARGUMENT = 0x200,
  D3D12DDI_BARRIER_ACCESS_PREDICATION = 0x200,
  D3D12DDI_BARRIER_ACCESS_COPY_DEST = 0x400,
  D3D12DDI_BARRIER_ACCESS_COPY_SOURCE = 0x800,
  D3D12DDI_BARRIER_ACCESS_RESOLVE_DEST = 0x1000,
  D3D12DDI_BARRIER_ACCESS_RESOLVE_SOURCE = 0x2000,
  D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_READ = 0x4000,
  D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE = 0x8000,
  D3D12DDI_BARRIER_ACCESS_SHADING_RATE_SOURCE = 0x10000,
  D3D12DDI_BARRIER_ACCESS_VIDEO_DECODE_READ = 0x20000,
  D3D12DDI_BARRIER_ACCESS_VIDEO_DECODE_WRITE = 0x40000,
  D3D12DDI_BARRIER_ACCESS_VIDEO_PROCESS_READ = 0x80000,
  D3D12DDI_BARRIER_ACCESS_VIDEO_PROCESS_WRITE = 0x100000,
  D3D12DDI_BARRIER_ACCESS_VIDEO_ENCODE_READ = 0x200000,
  D3D12DDI_BARRIER_ACCESS_VIDEO_ENCODE_WRITE = 0x400000,
  D3D12DDI_BARRIER_ACCESS_NO_ACCESS = 0x80000000
} ;

常数

 
D3D12DDI_BARRIER_ACCESS_COMMON
值:0x0
给定 ExecuteCommandLists 范围内所有资源的默认初始访问权限。 支持与当前布局和资源属性兼容的任何类型的访问,包括不超过一个写入访问权限。 对于使用 D3D12DDI_BARRIER_LAYOUT_COMMON的缓冲区和纹理,D3D12DDI_BARRIER_ACCESS_COMMON 支持并发读取和写入访问。

用作 AccessAfter时,可以使用 D3D12DDI_BARRIER_ACCESS_COMMON 将资源返回回通用辅助功能。 请注意,如果错误地使用,这可能会强制不必要的缓存刷新。 如果可能,AccessAfter 应限制为显式访问位。

避免将 D3D12DDI_BARRIER_ACCESS_COMMON 用作 accessBefore 值的屏障。 使用显式 AccessBefore 位处理任何读写后写入或写入后风险。
D3D12DDI_BARRIER_ACCESS_VERTEX_BUFFER
值:0x1
缓冲区资源作为当前执行队列中的顶点缓冲区进行访问。
D3D12DDI_BARRIER_ACCESS_CONSTANT_BUFFER
值:0x2
作为当前执行队列中的常量缓冲区可访问缓冲区资源。
D3D12DDI_BARRIER_ACCESS_INDEX_BUFFER
值:0x4
缓冲区资源可作为当前执行队列中的索引缓冲区进行访问。
D3D12DDI_BARRIER_ACCESS_RENDER_TARGET
值:0x8
资源可作为呈现目标进行访问。
D3D12DDI_BARRIER_ACCESS_UNORDERED_ACCESS
值:0x10
资源作为无序访问资源可访问。
D3D12DDI_BARRIER_ACCESS_DEPTH_STENCIL_WRITE
值:0x20
资源可作为可写深度/模具资源访问。
D3D12DDI_BARRIER_ACCESS_DEPTH_STENCIL_READ
值:0x40
资源可作为只读深度/模具资源进行访问。
D3D12DDI_BARRIER_ACCESS_SHADER_RESOURCE
值:0x80
作为着色器资源可访问资源。
D3D12DDI_BARRIER_ACCESS_STREAM_OUTPUT
值:0x100
作为流输出目标可以访问缓冲区。
D3D12DDI_BARRIER_ACCESS_INDIRECT_ARGUMENT
值:0x200
作为间接参数缓冲区可访问缓冲区。
D3D12DDI_BARRIER_ACCESS_PREDICATION
值:0x200
缓冲区可作为谓词缓冲区访问。 别名为 D3D12DDI_BARRIER_ACCESS_INDIRECT_ARGUMENT
D3D12DDI_BARRIER_ACCESS_COPY_DEST
值:0x400
资源可作为复制目标进行访问。
D3D12DDI_BARRIER_ACCESS_COPY_SOURCE
值:0x800
资源可作为复制源访问。
D3D12DDI_BARRIER_ACCESS_RESOLVE_DEST
值:0x1000
资源可作为解析目标进行访问。
D3D12DDI_BARRIER_ACCESS_RESOLVE_SOURCE
值:0x2000
作为解析源可以访问资源。
D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_READ
值:0x4000
作为光线跟踪加速结构进行读取,可以访问资源。 必须已使用初始状态 D3D12DDI_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE创建资源。
D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE
值:0x8000
作为光线跟踪加速结构,可以访问资源进行写入。 必须已使用初始状态 D3D12DDI_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE创建资源。
D3D12DDI_BARRIER_ACCESS_SHADING_RATE_SOURCE
值:0x10000
资源可作为底纹速率源进行访问。
D3D12DDI_BARRIER_ACCESS_VIDEO_DECODE_READ
值:0x20000
对于视频解码队列中的只读访问,可以访问资源。
D3D12DDI_BARRIER_ACCESS_VIDEO_DECODE_WRITE
值:0x40000
对于视频解码队列中的写入访问,可以访问资源。
D3D12DDI_BARRIER_ACCESS_VIDEO_PROCESS_READ
值:0x80000
对于视频进程队列中的只读访问,可以访问资源。
D3D12DDI_BARRIER_ACCESS_VIDEO_PROCESS_WRITE
值:0x100000
对于视频进程队列中的写入访问,可以访问资源。
D3D12DDI_BARRIER_ACCESS_VIDEO_ENCODE_READ
值:0x200000
对于视频编码队列中的只读访问,可以访问资源。
D3D12DDI_BARRIER_ACCESS_VIDEO_ENCODE_WRITE
值:0x400000
对于视频编码队列中的写入访问,可以访问资源。
D3D12DDI_BARRIER_ACCESS_NO_ACCESS
值:0x80000000
读取或写入无法访问资源。 将子资源访问转换为 D3D12DDI_BARRIER_ACCESS_NO_ACCESS后,必须先由 AccessBefore 设置为 D3D12DDI_BARRIER_ACCESS_NO_ACCESS 的屏障重新激活,然后再在同一 ExecuteCommandLists 范围内使用。

D3D12DDI_BARRIER_ACCESS_NO_ACCESS 只能与 D3D12DDI_BARRIER_SYNC_NONED3D12DDI_BARRIER_SYNC_SPLIT结合使用。

不能使用其他访问位设置 D3D12DDI_BARRIER_ACCESS_NO_ACCESSD3D12DDI_BARRIER_ACCESS_NO_ACCESS 指示在一些后续屏障或下一个 ECL 范围之前,不会访问资源。

当子资源不需要足够长的时间时,此值在别名屏障中非常有用,因此从任何读取缓存中清除子资源是有意义的。

它还可用于在 ExecuteCommandLists 作用域结束前启动布局转换,作为资源的最终作。 如果 D3D12DDI_BARRIER_SYNC_NONESyncAfter,则必须 D3D12DDI_BARRIER_ACCESS_NO_ACCESSAccessAfter

要求

要求 价值
最低支持的客户端 Windows 11 (WDDM 3.0)
标头 d3d12umddi.h

另请参阅

D3D12DDI_BARRIER_SYNC

D3D12DDI_BUFFER_BARRIER_0088

D3D12DDI_GLOBAL_BARRIER_0088

D3D12DDI_RANGED_BARRIER_0088

D3D12DDI_TEXTURE_BARRIER_0088