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_ACCESS。 D3D12DDI_BARRIER_ACCESS_NO_ACCESS 表示在某个后续屏障或下一个 ECL 范围之前,预期不会访问资源。

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

对于在 ExecuteCommandLists 范围结束之前对资源执行最终操作,启动布局转换也很有用。 如果 SyncAfter是D3D12DDI_BARRIER_SYNC_NONE,则必须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