Freigeben über


D3D12DDI_BARRIER_SYNC-Aufzählung (d3d12umddi.h)

Ein D3D12DDI_BARRIER_SYNC Wert ist ein bitweiser ODER der folgenden Felder, die den Synchronisierungsbereich der GPU-Arbeit in Bezug auf die Barriere angeben.

Syntax

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
} ;

Konstanten

 
D3D12DDI_BARRIER_SYNC_NONE
Wert: 0x0
Die Synchronisierung ist entweder vor oder nach einer Barriere nicht erforderlich. Bei Verwendung muss D3D12DDI_BARRIER_SYNC_NONE der einzige Bitsatz sein.

Ein SyncBefore- Wert von D3D12DDI_BARRIER_SYNC_NONE impliziert, dass keine vorherigen Barrieren oder Zugriffe auf die Ressource im selben ExecuteCommandLists Bereich vorgenommen wurden.

Ein SyncAfter- Wert von D3D12DDI_BARRIER_SYNC_NONE impliziert, dass nach der Barriere in derselben ExecuteCommandLists Bereich nicht auf die entsprechenden Unterressourcen zugegriffen wird.

In beiden Fällen muss AccessAfter-D3D12DDI_BARRIER_ACCESS_NO_ACCESSwerden.
D3D12DDI_BARRIER_SYNC_ALL
Wert: 0x1
Ein SyncBefore- Wert von D3D12DDI_BARRIER_SYNC_ALL gibt an, dass alle vorherigen Arbeiten abgeschlossen sein müssen, bevor die Barriere ausgeführt wird.

Ein SyncAfter Wert von D3D12DDI_BARRIER_SYNC_ALL gibt an, dass alle nachfolgenden Arbeiten warten müssen, bis die Barriere abgeschlossen ist.
D3D12DDI_BARRIER_SYNC_DRAW
Wert: 0x2
Dieser Wert ist ein Dachbereich für alle Draw-Pipelinephasen. Synchronisieren Mit den folgenden GPU-Workloads:

* DrawInstanced-
* DrawIndexedInstanced-
* SetGraphicsRootDescriptorTable-
* SetGraphicsRootShaderResource-
* SetGraphicsRootUnorderedAccessView-
* SetGraphicsRootConstantBufferView-

Die SetGraphicsRootXxx- Synchronisierung ist erforderlich, um D3D12DDI_DESCRIPTOR_RANGE_FLAG_0013_DATA_STATIC_WHILE_SET_AT_EXECUTE Deskriptoren zu unterstützen.

Ein SyncBefore- Wert von D3D12DDI_BARRIER_SYNC_DRAW gibt an, dass alle vorherigen Draw-Arbeiten abgeschlossen sein müssen, bevor die Barriere ausgeführt wird.

Ein SyncAfter Wert von D3D12DDI_BARRIER_SYNC_DRAW gibt an, dass alle nachfolgenden Draw-Arbeiten warten müssen, bis die Barriere abgeschlossen ist.
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER
Wert: 0x4
Synchronisieren sie mit der Ausführung der Eingabeassemblerphase.
D3D12DDI_BARRIER_SYNC_INDEX_INPUT
Wert: 0x4
Ordnet D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER zu.
D3D12DDI_BARRIER_SYNC_VERTEX_SHADING
Wert: 0x8
Synchronisieren Sie mit allen Vertexschattierungsphasen, einschließlich Vertex, Domäne, Rumpf, Tessellation, Geometrie, Amplifikation und Gitterschattierung.
D3D12DDI_BARRIER_SYNC_PIXEL_SHADING
Wert: 0x10
Synchronisieren mit Der Ausführung des Pixelshaders.
D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL
Wert: 0x20
Synchronisieren mit Tiefen-/Schablonen-Lese-/Schreibvorgängen. Dies umfasst tiefenschablonenansicht (DSV)-Zugriffe während Draw* und ClearRenderTargetView.
D3D12DDI_BARRIER_SYNC_RENDER_TARGET
Wert: 0x40
Synchronisieren mit Lese-/Schreibvorgängen des Renderziels. Dies schließt Renderzielansichts-Schreibvorgänge (RTV) während Draw* und ClearRenderTargetView ein.
D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING
Wert: 0x80
Synchronisieren Mit den folgenden GPU-Workloads:

* Versand
* SetComputeRootDescriptorTable-
* SetComputeRootShaderResource-
* SetComputeRootUnorderedAccessView-
* SetComputeRootConstantBufferView-

Die SetComputeRootXxx- Synchronisierung ist erforderlich, um D3D12DDI_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTION Deskriptoren zu unterstützen.
D3D12DDI_BARRIER_SYNC_RAYTRACING
Wert: 0x100
Synchronisieren mit raytracing-Ausführung.
D3D12DDI_BARRIER_SYNC_COPY
Wert: 0x200
Synchronisieren mit Kopierbefehlen.
D3D12DDI_BARRIER_SYNC_RESOLVE
Wert: 0x400
Synchronisieren mit Befehlen zum Auflösen.
D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT
Wert: 0x800
Synchronisieren mit ExecuteIndirect-Ausführung.
D3D12DDI_BARRIER_SYNC_PREDICATION
Wert: 0x800
Synchronisieren mit Prädication-Befehlen. Alias mit D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT*.
D3D12DDI_BARRIER_SYNC_ALL_SHADING
Wert: 0x1000
Synchronisieren mit allen Shaderausführungen.
D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING
Wert: 0x2000
Synchronisieren mit Shaderausführung mit Ausnahme von Pixelschattierung. Es ist aus Gründen der Kompatibilität mit der älteren ResourceBarrier-API vorhanden.
D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO
Wert: 0x4000
Synchronisieren mit PFND3D12DDI_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_0054 Arbeit.
D3D12DDI_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW
Wert: 0x8000
Synchronisieren mit ausführung mit einer UAV.
D3D12DDI_BARRIER_SYNC_VIDEO_DECODE
Wert: 0x100000
Synchronisieren mit Videodecodierungsausführung.
D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS
Wert: 0x200000
Synchronisieren mit videoprozessausführung.
D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE
Wert: 0x400000
Synchronisieren mit videocodierter Ausführung.
D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE
Wert: 0x800000
Synchronisieren mit PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 Arbeit.

Die entsprechende Barriere AccessBefore oder AccessAfter Feld muss den D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE Bitsatz aufweisen.
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE
Wert: 0x1000000
Synchronisieren mit PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 Arbeit.

Die entsprechende Barriere AccessBefore oder AccessAfter Feld muss den D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE Bitsatz aufweisen.
D3D12DDI_BARRIER_SYNC_SPLIT
Wert: 0x80000000
Spezielles Synchronisierungsbit, das eine geteilte Barriere angibt. Wird als SyncAfter Wert verwendet, um den Beginn einer geteilten Barriere anzugeben. Die Anwendung muss eine übereinstimmende Barriere bereitstellen, SyncBefore auf D3D12DDI_BARRIER_SYNC_SPLIT festgelegt ist. Siehe Anmerkungen.

Bemerkungen

Eine geteilte Barriere ist ein Hinweis auf den Treiber, dass ein Zustandsübergang zwischen zwei Punkten in einem Befehlsdatenstrom auftreten muss, sogar über ExecuteCommandLists-Grenzen hinweg. Treiber können die erforderlichen Layoutübergänge abschließen und Zwischenspeicherungen jederzeit zwischen Dem Start und Ende einer geteilten Barriere leeren.

Erweiterte Barrier-APIs ermöglichen die SPLIT-Synchronisierung. Geteilte Barrieren werden durch ein Paar Barrieren dargestellt, bei denen die anfängliche Barriere einen D3D12DDI_BARRIER_SYNC_SPLITSyncAfter-wert verwendet, und die endgültige Barriere verwendet einen D3D12DDI_BARRIER_SYNC_SPLITSyncBefore--Wert.

Split barrier pairs must use identical LayoutBefore, LayoutAfter, AccessBefore, and AccessAfter values for the initial and final barrier. Split barrier pairs must be sequential with no other intervening barrier on the same resource. Der folgende Codeausschnitt ist ein Beispiel auf Anwendungsebene.

// 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

Geteilte Barrieren sind über ExecuteCommandLists-Grenzen hinweg zulässig. In diesem Fall werden alle AccessBefore- und AccessAfter- Werte effektiv ignoriert, da die ExecuteCommandLists-Grenzen für alle Cache-Leeren sorgen. Im Wesentlichen sind geteilte Barrieren mit cross-ExecuteCommandLists Layout-Only-Barrieren. Das Aufteilen einer Pufferbarriere oder einer Texturbarriere für gleichzeitigen Zugriff über ExecuteCommandLists-Grenzen hat daher keinen Zweck. Eine nicht übereinstimmende BEGIN- oder END-Geteilte Barriere für einen Puffer oder eine Textur mit gleichzeitigem Zugriff in einem bestimmten ExecuteCommandLists-Bereich wird effektiv nicht verwendet, und die Debugebene erzeugt eine Warnung.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 11 (WDDM 3.0)
Header- d3d12umddi.h

Siehe auch

D3D12DDI_BARRIER_ACCESS

D3D12DDI_BUFFER_BARRIER_0088

D3D12DDI_GLOBAL_BARRIER_0088

D3D12DDI_RANGED_BARRIER_0088

D3D12DDI_TEXTURE_BARRIER_0088