D3D12DDI_BARRIER_SYNC列挙 (d3d12umddi.h)
重要
一部の情報はプレリリース製品に関連しており、市販される前に大幅に変更される可能性があります。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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_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 syncBefore 値D3D12DDI_BARRIER_SYNC_ALLは、バリアを実行する前に、上記のすべての作業を完了する必要があることを示します。 SyncAfter の値D3D12DDI_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 同期が必要です。 syncBefore の値D3D12DDI_BARRIER_SYNC_DRAWは、バリアを実行する前に、上記のすべての描画作業を完了する必要があることを示します。 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 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 Video Decode の実行に対して同期します。 |
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 または AccessAfter フィールドには 、D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE ビットが設定されている必要があります。 |
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE 値: 0x1000000 PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054作業と同期します。 対応するバリア AccessBefore または AccessAfter フィールドには 、D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE ビットが設定されている必要があります。 |
D3D12DDI_BARRIER_SYNC_SPLIT 値: 0x80000000 分割バリアを示す特別な同期ビット。 分割バリアの開始を示すために SyncAfter 値として使用されます。 アプリケーションは、 SyncBefore が D3D12DDI_BARRIER_SYNC_SPLIT に設定された一致するバリアを提供する必要があります。 「解説」を参照してください。 |
Remarks
分割バリアは、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 境界を越えてバリアを分割できます。 この場合、ExecuteCommandLists 境界はキャッシュのフラッシュを処理するため、 AccessBefore と AccessAfter の値はすべて実質的に無視されます。 基本的に、クロス ExecuteCommandLists 分割バリアはレイアウト専用バリアです。 したがって、ExecuteCommandLists 境界を越えてバッファー バリアまたは同時アクセス テクスチャ バリアを分割しても、目的はありません。 特定の ExecuteCommandLists スコープ内のバッファーまたは同時アクセス テクスチャの一致しない BEGIN または END 分割バリアは、実質的に使用されず、デバッグ レイヤーによって警告が生成されます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 11 (WDDM 3.0) |
Header | d3d12umddi.h |
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示