Condividi tramite


enumerazione D3D12DDI_BARRIER_SYNC (d3d12umddi.h)

Un valore D3D12DDI_BARRIER_SYNC è un OR bit per bit dei campi seguenti che specificano l'ambito di sincronizzazione della GPU rispetto alla barriera.

Sintassi

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

Costanti

 
D3D12DDI_BARRIER_SYNC_NONE
Valore: 0x0
La sincronizzazione non è necessaria prima o dopo una barriera. Se usato, D3D12DDI_BARRIER_SYNC_NONE deve essere l'unico bit impostato.

Un valore SyncBefore di D3D12DDI_BARRIER_SYNC_NONE implica che non siano presenti barriere o accessi precedenti alla risorsa nello stesso ambito ExecuteCommandLists.

Un valore SyncAfter di D3D12DDI_BARRIER_SYNC_NONE implica che le sottorisorse corrispondenti non sono accessibili dopo la barriera nello stesso ambito ExecuteCommandLists.

In entrambi i casi, AccessAfter deve essere D3D12DDI_BARRIER_ACCESS_NO_ACCESS.
D3D12DDI_BARRIER_SYNC_ALL
Valore: 0x1
Un valore SyncBefore di D3D12DDI_BARRIER_SYNC_ALL indica che tutte le operazioni precedenti devono essere completate prima di eseguire la barriera.

Un valore SyncAfter di D3D12DDI_BARRIER_SYNC_ALL indica che tutto il lavoro successivo deve attendere il completamento della barriera.
D3D12DDI_BARRIER_SYNC_DRAW
Valore: 0x2
Questo valore è un ambito generico per tutte le fasi della pipeline di disegno. Eseguire la sincronizzazione con i carichi di lavoro GPU seguenti:

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

La sincronizzazione SetGraphicsRootXxx è necessaria per supportare i descrittori di D3D12DDI_DESCRIPTOR_RANGE_FLAG_0013_DATA_STATIC_WHILE_SET_AT_EXECUTE.

Un valore SyncBefore di D3D12DDI_BARRIER_SYNC_DRAW indica che tutte le operazioni di disegno precedenti devono essere completate prima di eseguire la barriera.

Un valore SyncAfter di D3D12DDI_BARRIER_SYNC_DRAW indica che tutte le operazioni di disegno successive devono attendere il completamento della barriera.
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER
Valore: 0x4
Eseguire la sincronizzazione con l'esecuzione della fase dell'assembler di input.
D3D12DDI_BARRIER_SYNC_INDEX_INPUT
Valore: 0x4
Esegue il mapping a D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER.
D3D12DDI_BARRIER_SYNC_VERTEX_SHADING
Valore: 0x8
Eseguire la sincronizzazione con tutte le fasi di ombreggiatura dei vertici, tra cui vertice, dominio, scafo, tassellamento, geometria, amplificazione e ombreggiatura mesh.
D3D12DDI_BARRIER_SYNC_PIXEL_SHADING
Valore: 0x10
Eseguire la sincronizzazione con l'esecuzione di pixel shader.
D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL
Valore: 0x20
Eseguire la sincronizzazione con operazioni di lettura/scrittura depth/stencil. Sono inclusi gli accessi depth-stencil (DSV) durante Draw* e ClearRenderTargetView.
D3D12DDI_BARRIER_SYNC_RENDER_TARGET
Valore: 0x40
Eseguire la sincronizzazione con le operazioni di lettura/scrittura di destinazione di rendering. Sono incluse le scritture della visualizzazione di destinazione di rendering (RTV) durante Draw* e ClearRenderTargetView.
D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING
Valore: 0x80
Eseguire la sincronizzazione con i carichi di lavoro GPU seguenti:

* Dispatch
* SetComputeRootDescriptorTable
* SetComputeRootShaderResource
* SetComputeRootUnorderedAccessView
* SetComputeRootConstantBufferView

La sincronizzazione setComputeRootXxx per supportare i descrittori di D3D12DDI_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTION.
D3D12DDI_BARRIER_SYNC_RAYTRACING
Valore: 0x100
Eseguire la sincronizzazione con l'esecuzione di raytracing.
D3D12DDI_BARRIER_SYNC_COPY
Valore: 0x200
Eseguire la sincronizzazione con i comandi Copia.
D3D12DDI_BARRIER_SYNC_RESOLVE
Valore: 0x400
Eseguire la sincronizzazione con i comandi Resolve.
D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT
Valore: 0x800
Eseguire la sincronizzazione con l'esecuzione di ExecuteIndirect.
D3D12DDI_BARRIER_SYNC_PREDICATION
Valore: 0x800
Eseguire la sincronizzazione con i comandi predicati. Alias con D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT*.
D3D12DDI_BARRIER_SYNC_ALL_SHADING
Valore: 0x1000
Eseguire la sincronizzazione con tutte le esecuzioni dello shader.
D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING
Valore: 0x2000
Eseguire la sincronizzazione con l'esecuzione dello shader ad eccezione dell'ombreggiatura pixel. Esiste per la compatibilità con l'API ResourceBarrier legacy.
D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO
Valore: 0x4000
Eseguire la sincronizzazione con PFND3D12DDI_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_0054 lavoro.
D3D12DDI_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW
Valore: 0x8000
Eseguire la sincronizzazione con l'esecuzione con un UAV.
D3D12DDI_BARRIER_SYNC_VIDEO_DECODE
Valore: 0x100000
Eseguire la sincronizzazione con l'esecuzione di Decodifica video.
D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS
Valore: 0x200000
Eseguire la sincronizzazione con l'esecuzione del processo video.
D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE
Valore: 0x400000
Eseguire la sincronizzazione con l'esecuzione della codifica video.
D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE
Valore: 0x800000
Eseguire la sincronizzazione con PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 lavoro.

La barriera corrispondente AccessBefore o campo AccessAfter deve avere il D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE bit impostato.
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE
Valore: 0x1000000
Eseguire la sincronizzazione con PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 lavoro.

La barriera corrispondente AccessBefore o campo AccessAfter deve avere il D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE bit impostato.
D3D12DDI_BARRIER_SYNC_SPLIT
Valore: 0x80000000
Bit di sincronizzazione speciale che indica una barriera divisa. Usato come valore SyncAfter per indicare l'inizio di una barriera divisa. L'applicazione deve fornire una barriera corrispondente con SyncBefore impostata su D3D12DDI_BARRIER_SYNC_SPLIT. Vedere la sezione Osservazioni.

Osservazioni

Una barriera divisa è un suggerimento per il driver che deve verificarsi una transizione di stato tra due punti in un flusso di comandi, anche superare i limiti di ExecuteCommandLists. I driver possono completare le transizioni di layout necessarie e lo scaricamento della cache in qualsiasi momento tra l'inizio e la fine di una barriera divisa.

Le API barriera avanzate consentono la sincronizzazione SPLIT. Le barriere suddivise sono rappresentate da una coppia di barriere in cui la barriera iniziale usa un valore D3D12DDI_BARRIER_SYNC_SPLITSyncAfter e la barriera finale usa un valore D3D12DDI_BARRIER_SYNC_SPLITSyncBefore.

Le coppie di barriere suddivise devono usare LayoutBefore, LayoutAfter, AccessBeforee AccessAfter valori per le barriere iniziali e finali. Le coppie di barriere suddivise devono essere sequenziali senza altre barriere intermedie sulla stessa risorsa. Il frammento di codice seguente è un esempio a livello di applicazione.

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

Sono consentite barriere suddivise tra i limiti di ExecuteCommandLists. In questo caso tutti i AccessBefore e AccessAfter valori vengono effettivamente ignorati poiché i limiti executeCommandLists si occupano di qualsiasi scaricamento della cache. Essenzialmente, le barriere divise cross-ExecuteCommandLists sono barriere di sola layout. Di conseguenza, la divisione di una barriera buffer o una barriera di trama di accesso simultaneo tra i limiti ExecuteCommandLists non ha alcun scopo. Una barriera di divisione BEGIN o END non corrispondente in una trama di buffer o di accesso simultaneo in un determinato ambito ExecuteCommandLists è effettivamente inutilizzata e il livello di debug genera un avviso.

Fabbisogno

Requisito Valore
client minimo supportato Windows 11 (WDDM 3.0)
intestazione d3d12umddi.h

Vedere anche

D3D12DDI_BARRIER_ACCESS

D3D12DDI_BUFFER_BARRIER_0088

D3D12DDI_GLOBAL_BARRIER_0088

D3D12DDI_RANGED_BARRIER_0088

D3D12DDI_TEXTURE_BARRIER_0088