D3D12DDI_BARRIER_SYNC 枚举 (d3d12umddi.h)

重要

某些信息与预发行产品相关,该产品在商业发布之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。

D3D12DDI_BARRIER_SYNC值是以下字段的按位 OR,这些字段指定 GPU 工作相对于屏障的同步范围。

语法

typedef enum D3D12DDI_BARRIER_SYNC {
  D3D12DDI_BARRIER_SYNC_NONE = 0x0,
  D3D12DDI_BARRIER_SYNC_ALL = 0x1,
  D3D12DDI_BARRIER_SYNC_DRAW = 0x2,
  D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER = 0x4,
  D3D12DDI_BARRIER_SYNC_VERTEX_SHADING = 0x8,
  D3D12DDI_BARRIER_SYNC_PIXEL_SHADING = 0x10,
  D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL = 0x20,
  D3D12DDI_BARRIER_SYNC_RENDER_TARGET = 0x40,
  D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING = 0x80,
  D3D12DDI_BARRIER_SYNC_RAYTRACING = 0x100,
  D3D12DDI_BARRIER_SYNC_COPY = 0x200,
  D3D12DDI_BARRIER_SYNC_RESOLVE = 0x400,
  D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT = 0x800,
  D3D12DDI_BARRIER_SYNC_PREDICATION = 0x800,
  D3D12DDI_BARRIER_SYNC_ALL_SHADING = 0x1000,
  D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING = 0x2000,
  D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO = 0x4000,
  D3D12DDI_BARRIER_SYNC_VIDEO_DECODE = 0x100000,
  D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS = 0x200000,
  D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE = 0x400000,
  D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE = 0x800000,
  D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE = 0x1000000,
  D3D12DDI_BARRIER_SYNC_SPLIT = 0x80000000
} ;

常量

 
D3D12DDI_BARRIER_SYNC_NONE
值: 0x0
在屏障之前或之后不需要同步。 使用时, D3D12DDI_BARRIER_SYNC_NONE 必须是唯一设置的位。

SyncBeforeD3D12DDI_BARRIER_SYNC_NONE表示之前没有对同一 ExecuteCommandLists 范围中的资源进行过任何障碍或访问。

SyncAfterD3D12DDI_BARRIER_SYNC_NONE表示在同一 ExecuteCommandLists 范围中的屏障之后不会访问相应的子资源。

在这两种情况下,必须D3D12DDI_BARRIER_ACCESS_NO_ACCESSAccessAfter
D3D12DDI_BARRIER_SYNC_ALL
值: 0x1
SyncBeforeD3D12DDI_BARRIER_SYNC_ALL指示在执行屏障之前必须完成上述所有工作。

SyncAfterD3D12DDI_BARRIER_SYNC_ALL表示所有后续工作都必须等待屏障完成。
D3D12DDI_BARRIER_SYNC_DRAW
值: 0x2
此值是所有绘制管道阶段的伞式范围。 针对以下 GPU 工作负载同步:

* DrawInstanced
* DrawIndexedInstanced
* SetGraphicsRootDescriptorTable
* SetGraphicsRootShaderResource
* SetGraphicsRootUnorderedAccessView
* SetGraphicsRootConstantBufferView

需要 SetGraphicsRootXxx 同步才能支持 D3D12DDI_DESCRIPTOR_RANGE_FLAG_0013_DATA_STATIC_WHILE_SET_AT_EXECUTE 描述符。

SyncBeforeD3D12DDI_BARRIER_SYNC_DRAW指示在执行屏障之前必须完成之前的所有绘图工作。

SyncAfterD3D12DDI_BARRIER_SYNC_DRAW表示所有后续绘图工作都必须等待屏障完成。
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER
值: 0x4
针对输入汇编程序阶段执行进行同步。
D3D12DDI_BARRIER_SYNC_VERTEX_SHADING
值: 0x8
针对所有顶点着色阶段同步,包括顶点、域、外壳、分割、几何、放大和网格着色。
D3D12DDI_BARRIER_SYNC_PIXEL_SHADING
值: 0x10
针对像素着色器执行进行同步。
D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL
值: 0x20
针对深度/模具读取/写入操作进行同步。 这包括在 Draw* 和 ClearRenderTargetView 期间 (DSV) 访问的深度模具视图。
D3D12DDI_BARRIER_SYNC_RENDER_TARGET
值: 0x40
同步呈现器目标读/写操作。 这包括在 Draw* 和 ClearRenderTargetView 期间 (RTV) 写入的呈现目标视图。
D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING
值: 0x80
针对以下 GPU 工作负载同步:

* 调度
* SetComputeRootDescriptorTable
* SetComputeRootShaderResource
* SetComputeRootUnorderedAccessView
* SetComputeRootConstantBufferView

需要 SetComputeRootXxx 同步才能支持 D3D12DDI_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTION 描述符。
D3D12DDI_BARRIER_SYNC_RAYTRACING
值: 0x100
针对光线跟踪执行进行同步。
D3D12DDI_BARRIER_SYNC_COPY
值: 0x200
同步复制命令。
D3D12DDI_BARRIER_SYNC_RESOLVE
值: 0x400
针对 Resolve 命令同步。
D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT
值: 0x800
针对 ExecuteIndirect 执行进行同步。
D3D12DDI_BARRIER_SYNC_PREDICATION
值: 0x800
针对 Predication 命令进行同步。 别名为 D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT*。
D3D12DDI_BARRIER_SYNC_ALL_SHADING
值: 0x1000
针对所有着色器执行进行同步。
D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING
值: 0x2000
与着色器执行同步,像素着色除外。 存在是为了与旧版 ResourceBarrier API 兼容。
D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO
值: 0x4000
针对 PFND3D12DDI_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_0054 工作进行同步。
D3D12DDI_BARRIER_SYNC_VIDEO_DECODE
值: 0x100000
同步视频解码执行。
D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS
值: 0x200000
同步视频进程执行。
D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE
值: 0x400000
同步视频编码执行。
D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE
值: 0x800000
针对 PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 工作进行同步。

相应的 barrier AccessBeforeAccessAfter 字段必须设置 D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE 位。
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE
值: 0x1000000
针对 PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 工作进行同步。

相应的 barrier AccessBeforeAccessAfter 字段必须设置 D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE 位。
D3D12DDI_BARRIER_SYNC_SPLIT
值: 0x80000000
指示拆分屏障的特殊同步位。 用作 SyncAfter 值,用于指示拆分屏障的开始。 应用程序必须提供一个匹配屏障,并将 SyncBefore 设置为 D3D12DDI_BARRIER_SYNC_SPLIT。 请参阅“备注”。

注解

拆分屏障提示驱动程序必须在命令流中的两个点之间发生状态转换,甚至跨越 ExecuteCommandLists 边界。 驱动程序可以在拆分屏障开始和结束之间随时完成所需的布局转换和缓存刷新。

增强型屏障 API 允许拆分同步。 拆分屏障由一对屏障表示,其中初始屏障使用 D3D12DDI_BARRIER_SYNC_SPLITSyncAfter 值,最后一个屏障使用 D3D12DDI_BARRIER_SYNC_SPLITSyncBefore 值。

拆分屏障对必须对初始屏障和最终屏障使用相同的 LayoutBeforeLayoutAfterAccessBeforeAccessAfter 值。 拆分屏障对必须是连续的,在同一资源上没有其他干预屏障。 以下代码片段是应用程序级示例。

// BEGIN split from compute shader UAV to pixel shader SRV
splitBarrierBegin.SyncBefore = D3D12_BARRIER_SYNC_COMPUTE
splitBarrierBegin.SyncAfter = D3D12_BARRIER_SYNC_SPLIT
splitBarrierBegin.AccessBefore = D3D12_BARRIER_ACCESS_UNORDERED_ACCESS
splitBarrierBegin.AccessAfter = D3D12_BARRIER_ACCESS_DIRECT_QUEUE_SHADER_RESOURCE
splitBarrierBegin.LayoutBefore = D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS
splitBarrierBegin.LayoutAfter = D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE

// END split from compute shader UAV to pixel shader SRV
splitBarrierEnd.SyncBefore = D3D12_BARRIER_SYNC_SPLIT
splitBarrierEnd.SyncAfter = D3D12_BARRIER_SYNC_PIXEL_SHADING
splitBarrierEnd.AccessBefore = D3D12_BARRIER_ACCESS_UNORDERED_ACCESS
splitBarrierEnd.AccessAfter = D3D12_BARRIER_ACCESS_DIRECT_QUEUE_SHADER_RESOURCE
splitBarrierEnd.LayoutBefore = D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS
splitBarrierEnd.LayoutAfter = D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE

允许跨 ExecuteCommandLists 边界拆分屏障。 在这种情况下,将有效地忽略所有 AccessBeforeAccessAfter 值,因为 ExecuteCommandLists 边界负责任何缓存刷新。 从本质上讲,cross-ExecuteCommandLists 拆分屏障是仅限布局的屏障。 因此,跨 ExecuteCommandLists 边界拆分缓冲区屏障或同时访问纹理屏障没有任何用处。 给定 ExecuteCommandLists 范围内缓冲区或同时访问纹理上不匹配的 BEGIN 或 END 拆分屏障实际上未使用,调试层会生成警告。

要求

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

另请参阅

D3D12DDI_BARRIER_ACCESS

D3D12DDI_BUFFER_BARRIER_0088

D3D12DDI_GLOBAL_BARRIER_0088

D3D12DDI_RANGED_BARRIER_0088

D3D12DDI_TEXTURE_BARRIER_0088