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 必须是唯一的位集。

D3D12DDI_BARRIER_SYNC_NONE的SyncBefore 值表示,在同一 ExecuteCommandLists 范围内没有对资源进行上述屏障或访问。

D3D12DDI_BARRIER_SYNC_NONE的SyncAfter 值表示,在相同 ExecuteCommandLists 范围内的屏障之后,不会访问相应的子资源。

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

D3D12DDI_BARRIER_SYNC_ALL SyncAfter 值指示所有后续工作必须等待屏障完成。
D3D12DDI_BARRIER_SYNC_DRAW
值: 0x2
此值是所有 Draw 管道阶段的伞式范围。 针对以下 GPU 工作负荷同步:

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

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

D3D12DDI_BARRIER_SYNC_DRAWSyncBefore 值指示在执行屏障之前必须完成上述所有绘图工作。

SyncAfter 值D3D12DDI_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
与谓词命令同步。 别名 为 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 工作同步。

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

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

注解

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

增强的屏障 API 允许 SPLIT 同步。 拆分屏障由一对屏障表示,其中初始屏障使用 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 边界负责任何缓存刷新。 从本质上讲,跨 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