D3D12DDI_BARRIER_SYNC列舉 (d3d12umddi.h)
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_INDEX_INPUT = 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_CLEAR_UNORDERED_ACCESS_VIEW = 0x8000,
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 必須是唯一的位集。 SyncBefore 值 D3D12DDI_BARRIER_SYNC_NONE 表示在相同 ExecuteCommandLists 範圍內沒有對資源進行上述障礙或存取。 SyncAfter 值 D3D12DDI_BARRIER_SYNC_NONE 表示在相同 ExecuteCommandLists 範圍中的屏障之後,不會存取對應的子資源。 在這兩種情況下,AccessAfter 必須 D3D12DDI_BARRIER_ACCESS_NO_ACCESS。 |
D3D12DDI_BARRIER_SYNC_ALL 值:0x1 SyncBefore 值 D3D12DDI_BARRIER_SYNC_ALL 表示必須先完成上述所有工作,才能執行屏障。 SyncAfter 值 D3D12DDI_BARRIER_SYNC_ALL 表示所有後續工作都必須等候屏障完成。 |
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 描述元。 SyncBefore 值 D3D12DDI_BARRIER_SYNC_DRAW 表示所有先前的 Draw 工作都必須完成,才能執行屏障。 SyncAfter 值 D3D12DDI_BARRIER_SYNC_DRAW 表示所有後續的 Draw 工作都必須等候屏障完成。 |
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER 值:0x4 針對輸入組合器階段執行進行同步處理。 |
D3D12DDI_BARRIER_SYNC_INDEX_INPUT 值:0x4 對應至D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER。 |
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_CLEAR_UNORDERED_ACCESS_VIEW 值:0x8000 針對執行同步處理至UAV。 |
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 工作進行同步處理。 AccessBefore 或 |
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE 值:0x1000000 針對 PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 工作進行同步處理。 AccessBefore 或 |
D3D12DDI_BARRIER_SYNC_SPLIT 值:0x80000000 特殊同步位,表示分割屏障。 用來做為 SyncAfter 值,表示分割屏障的開頭。 應用程式必須提供相符的屏障,且 SyncBefore 設定為 D3D12DDI_BARRIER_SYNC_SPLIT。 請參閱。 |
言論
分割屏障是驅動程式的提示,指出狀態轉換必須在命令數據流中的兩個點之間發生,甚至跨越ExecuteCommandLists界限。 驅動程式可以完成所需的配置轉換,並在分割屏障的開始和結尾之間隨時快取排清。
增強的屏障 API 允許 SPLIT 同步處理。 分割屏障是由一組障礙來表示,其中初始屏障使用 D3D12DDI_BARRIER_SYNC_SPLITSyncAfter 值,而最終屏障則使用 D3D12DDI_BARRIER_SYNC_SPLITSyncBefore 值。
分割屏障組必須使用相同的 LayoutBefore、LayoutAfter、AccessBefore,以及 AccessAfter 初始和最終障礙的值。 分割屏障組必須是循序的,且相同資源上沒有其他介入障礙。 下列代碼段是應用層級範例。
// 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 界限分割屏障。 在此情況下,會有效忽略所有 AccessBefore 和 AccessAfter 值,因為 ExecuteCommandLists 界限會處理任何快取排清。 基本上,跨 ExecuteCommandLists 分割屏障是僅限版面配置屏障。 因此,跨 ExecuteCommandLists 界限分割緩衝區屏障或同時存取紋理屏障無目的。 指定 ExecuteCommandLists 範圍中緩衝區或同時存取紋理的不相符 BEGIN 或 END 分割屏障實際上未使用,而且偵錯層會產生警告。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 11 (WDDM 3.0) |
標頭 | d3d12umddi.h |