D3D12DDI_BARRIER_SYNC列挙 (d3d12umddi.h)
D3D12DDI_BARRIER_SYNC 値は、バリアに関する GPU 作業の同期スコープを指定する、次のフィールドのビットごとの OR です。
構文
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 が唯一のビット セットである必要があります。 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_ALL の SyncBefore 値は、バリアを実行する前に、上記のすべての作業を完了する必要があることを示します。 SyncAfterD3D12DDI_BARRIER_SYNC_ALL の値は、後続のすべての作業がバリアが完了するまで待機する必要があることを示します。 |
D3D12DDI_BARRIER_SYNC_DRAW 値: 0x2 この値は、すべての Draw パイプライン ステージのアンブレラ スコープです。 次の GPU ワークロードと同期します。 * DrawInstanced DrawIndexedInstanced の SetGraphicsRootDescriptorTable SetGraphicsRootShaderResource SetGraphicsRootUnorderedAccessView SetGraphicsRootConstantBufferView D3D12DDI_DESCRIPTOR_RANGE_FLAG_0013_DATA_STATIC_WHILE_SET_AT_EXECUTE 記述子をサポートするには、SetGraphicsRootXxx 同期が必要です。 D3D12DDI_BARRIER_SYNC_DRAW の SyncBefore 値は、バリアを実行する前に、上記のすべての描画作業を完了する必要があることを示します。 SyncAfterD3D12DDI_BARRIER_SYNC_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 D3D12DDI_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTION 記述子をサポートするには、SetComputeRootXxx 同期が必要です。 |
D3D12DDI_BARRIER_SYNC_RAYTRACING 値: 0x100 レイトレーシングの実行に対して同期します。 |
D3D12DDI_BARRIER_SYNC_COPY 値: 0x200 コピー コマンドに対して同期します。 |
D3D12DDI_BARRIER_SYNC_RESOLVE 値: 0x400 [解決] コマンドに対して同期します。 |
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 境界を越えても、コマンド ストリーム内の 2 つのポイント間で状態遷移を行う必要があることをドライバーに示すヒントです。 ドライバーは、必要なレイアウトの切り替えを完了し、分割バリアの開始と終了の間にいつでもキャッシュ フラッシュを実行できます。
強化されたバリア 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 |