次の方法で共有


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_NONESyncBefore 値は、同じ ExecuteCommandLists スコープ内のリソースに対する先行するバリアまたはアクセスがないことを意味します。

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

どちらの場合も、AccessAfterD3D12DDI_BARRIER_ACCESS_NO_ACCESSする必要があります。
D3D12DDI_BARRIER_SYNC_ALL
値: 0x1
D3D12DDI_BARRIER_SYNC_ALLSyncBefore 値は、バリアを実行する前に、上記のすべての作業を完了する必要があることを示します。

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_DRAWSyncBefore 値は、バリアを実行する前に、上記のすべての描画作業を完了する必要があることを示します。

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 または 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 に設定 一致するバリアを提供する必要があります。 「解説」を参照してください。

備考

分割バリアは、ExecuteCommandLists 境界を越えても、コマンド ストリーム内の 2 つのポイント間で状態遷移を行う必要があることをドライバーに示すヒントです。 ドライバーは、必要なレイアウトの切り替えを完了し、分割バリアの開始と終了の間にいつでもキャッシュ フラッシュを実行できます。

強化されたバリア API により、SPLIT 同期が可能になります。 分割バリアは、初期バリアが D3D12DDI_BARRIER_SYNC_SPLITSyncAfter 値を使用し、最後のバリアが D3D12DDI_BARRIER_SYNC_SPLITSyncBefore 値を使用するバリアのペアによって表されます。

分割バリア ペアでは、初期バリアと最終バリアの両方に対して、LayoutBeforeLayoutAfterAccessBefore、および 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 境界を越えてバリアを分割できます。 この場合、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