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_NONESyncBefore 値は、同じ ExecuteCommandLists スコープ内のリソースに対して以前のバリアやアクセスが行われなかった場合を意味します。

D3D12DDI_BARRIER_SYNC_NONESyncAfter 値は、同じ ExecuteCommandLists スコープ内のバリアの後に、対応するサブリソースにアクセスしないことを意味します。

どちらの場合も、 AccessAfterD3D12DDI_BARRIER_ACCESS_NO_ACCESSする必要があります。
D3D12DDI_BARRIER_SYNC_ALL
値: 0x1
syncBeforeD3D12DDI_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 値を使用するバリアのペアで表されます。

分割バリア ペアでは、初期バリアと最終バリアの両方に同じ 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 境界を越えてバリアを分割できます。 この場合、ExecuteCommandLists 境界はキャッシュのフラッシュを処理するため、 AccessBeforeAccessAfter の値はすべて実質的に無視されます。 基本的に、クロス ExecuteCommandLists 分割バリアはレイアウト専用バリアです。 したがって、ExecuteCommandLists 境界を越えてバッファー バリアまたは同時アクセス テクスチャ バリアを分割しても、目的はありません。 特定の ExecuteCommandLists スコープ内のバッファーまたは同時アクセス テクスチャの一致しない BEGIN または END 分割バリアは、実質的に使用されず、デバッグ レイヤーによって警告が生成されます。

要件

要件
サポートされている最小のクライアント Windows 11 (WDDM 3.0)
Header d3d12umddi.h

こちらもご覧ください

D3D12DDI_BARRIER_ACCESS

D3D12DDI_BUFFER_BARRIER_0088

D3D12DDI_GLOBAL_BARRIER_0088

D3D12DDI_RANGED_BARRIER_0088

D3D12DDI_TEXTURE_BARRIER_0088