D3D12DDI_BARRIER_SYNC-Enumeration (d3d12umddi.h)
Ein D3D12DDI_BARRIER_SYNC Wert ist ein bitweiser OR 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,
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 Eine Synchronisierung ist weder vor noch nach einer Barriere erforderlich. Bei Verwendung muss D3D12DDI_BARRIER_SYNC_NONE der einzige Bitsatz sein. Ein SyncBefore-Wertvon D3D12DDI_BARRIER_SYNC_NONE impliziert, dass zuvor keine Barrieren oder Zugriffe auf die Ressource im gleichen ExecuteCommandLists-Bereich vorgenommen wurden. Ein SyncAfter-Wertvon D3D12DDI_BARRIER_SYNC_NONE impliziert, dass nach der Barriere im gleichen ExecuteCommandLists-Bereich nicht auf die entsprechenden Unterressourcen zugegriffen wird. In beiden Fällen muss AccessAfterD3D12DDI_BARRIER_ACCESS_NO_ACCESS sein. |
D3D12DDI_BARRIER_SYNC_ALL Wert: 0x1 Der SyncBefore-WertD3D12DDI_BARRIER_SYNC_ALL gibt an, dass alle vorherigen Arbeiten abgeschlossen werden müssen, bevor die Barriere ausgeführt wird. Der SyncAfter-Wertvon D3D12DDI_BARRIER_SYNC_ALL gibt an, dass alle nachfolgenden Arbeiten auf den Abschluss der Barriere warten müssen. |
D3D12DDI_BARRIER_SYNC_DRAW Wert: 0x2 Dieser Wert ist ein Übergeordneter Bereich für alle Draw-Pipelinephasen. Synchronisieren Sie 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. Der SyncBefore-WertD3D12DDI_BARRIER_SYNC_DRAW gibt an, dass alle vorangehenden Draw-Arbeiten abgeschlossen werden müssen, bevor die Barriere ausgeführt wird. Der SyncAfter-WertD3D12DDI_BARRIER_SYNC_DRAW gibt an, dass alle nachfolgenden Draw-Arbeiten auf den Abschluss der Barriere warten müssen. |
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER Wert: 0x4 Synchronisieren mit der Ausführung der Eingabeassemierungsphase. |
D3D12DDI_BARRIER_SYNC_INDEX_INPUT Wert: 0x4 Wird D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER zugeordnet. |
D3D12DDI_BARRIER_SYNC_VERTEX_SHADING Wert: 0x8 Synchronisieren Sie mit allen Vertexschattierungsphasen, einschließlich Vertex, Domäne, Rumpf, Tessellation, Geometrie, Verstärkung und Gitterschattierung. |
D3D12DDI_BARRIER_SYNC_PIXEL_SHADING Wert: 0x10 Synchronisieren mit Pixelshaderausführung. |
D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL Wert: 0x20 Synchronisieren sie mit Lese-/Schreibvorgängen für Tiefen-/Schablonen. Dazu gehören DSV-Zugriffe (Depth Sten Cil View) während Draw* und ClearRenderTargetView. |
D3D12DDI_BARRIER_SYNC_RENDER_TARGET Wert: 0x40 Synchronisierung mit Lese-/Schreibvorgängen des Renderziels. Dies schließt RtV-Schreibvorgänge (Renderzielansicht) während Draw* und ClearRenderTargetView ein. |
D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING Wert: 0x80 Synchronisieren Sie 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 Resolve-Befehlen. |
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 sie mit allen Shaderausführungen. |
D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING Wert: 0x2000 Synchronisieren mit Shaderausführung mit Ausnahme von Pixelschattierung. Aus Gründen der Kompatibilität mit der älteren ResourceBarrier-API ist 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_VIDEO_DECODE Wert: 0x100000 Synchronisieren mit Video-Decodierungsausführung. |
D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS Wert: 0x200000 Synchronisieren mit der Ausführung des Videoprozesses. |
D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE Wert: 0x400000 Synchronisieren sie mit der Ausführung der Videocodierung. |
D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE Wert: 0x800000 Synchronisieren mit PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 Arbeit. Für das entsprechende Feld accessBefore oder AccessAfter muss das D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE Bit festgelegt sein. |
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE Wert: 0x1000000 Synchronisieren mit PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 Arbeit. Für das entsprechende Feld accessBefore oder AccessAfter muss das D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE Bit festgelegt sein. |
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 entsprechende Barriere bereitstellen, wobei SyncBefore auf D3D12DDI_BARRIER_SYNC_SPLIT festgelegt ist. Siehe Hinweise. |
Hinweise
Eine geteilte Barriere ist ein Hinweis für den Treiber, dass ein Zustandsübergang zwischen zwei Punkten in einem Befehlsdatenstrom erfolgen muss, sogar über ExecuteCommandLists-Grenzen hinweg. Treiber können die erforderlichen Layoutübergänge und Cacheleerungen jederzeit zwischen dem Anfang und dem Ende einer geteilten Barriere durchführen.
Erweiterte Barriere-APIs ermöglichen die SPLIT-Synchronisierung. Geteilte Barrieren werden durch ein Paar von Barrieren dargestellt, bei denen die anfängliche Barriere einen D3D12DDI_BARRIER_SYNC_SPLITSyncAfter-Wert und die endgültige Barriere einen D3D12DDI_BARRIER_SYNC_SPLITSyncBefore-Wert verwendet.
Geteilte Barrierepaare müssen für die anfänglichen und endgültigen Barrieren identische Werte für LayoutBefore, LayoutAfter, AccessBefore und AccessAfter verwenden. Geteilte Barrierepaare müssen sequenziell sein, ohne dass andere barrieren für dieselbe Ressource dazwischen gegriffen werden. 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 über ExecuteCommandLists-Grenzen hinweg sind zulässig. In diesem Fall werden alle AccessBefore- und AccessAfter-Werte effektiv ignoriert, da die ExecuteCommandLists-Grenzen alle Cacheleerungen übernehmen. Im Wesentlichen handelt es sich bei geteilten Barrieren für Cross-ExecuteCommandLists um Nur-Layout-Barrieren. Das Aufteilen einer Pufferbarriere oder einer Texturbarriere für gleichzeitigen Zugriff über ExecuteCommandLists-Grenzen ist daher unzwecklos. Eine nicht übereinstimmende BEGIN- oder END-Split-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 |
---|---|
Unterstützte Mindestversion (Client) | Windows 11 (WDDM 3.0) |
Kopfzeile | d3d12umddi.h |
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für