Compartilhar via


D3D12DDI_BARRIER_SYNC enumeração (d3d12umddi.h)

Um valor D3D12DDI_BARRIER_SYNC é um OR bit a bit dos campos a seguir que especificam o escopo de sincronização do trabalho de GPU em relação à barreira.

Sintaxe

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

Constantes

 
D3D12DDI_BARRIER_SYNC_NONE
Valor: 0x0
A sincronização não é necessária antes ou depois de uma barreira. Quando usado, D3D12DDI_BARRIER_SYNC_NONE deve ser o único conjunto de bits.

Um valor SyncBefore de D3D12DDI_BARRIER_SYNC_NONE implica que não houve barreiras ou acessos anteriores feitos ao recurso no mesmo escopo ExecuteCommandLists.

Um valor SyncAfter de D3D12DDI_BARRIER_SYNC_NONE implica que os sub-recursos correspondentes não são acessados após a barreira no mesmo escopo ExecuteCommandLists.

Em ambos os casos, AccessAfter deve ser D3D12DDI_BARRIER_ACCESS_NO_ACCESS.
D3D12DDI_BARRIER_SYNC_ALL
Valor: 0x1
Um valor SyncBefore de D3D12DDI_BARRIER_SYNC_ALL indica que todo o trabalho anterior deve ser concluído antes de executar a barreira.

Um valor de D3D12DDI_BARRIER_SYNC_ALL indica que todo o trabalho subsequente deve aguardar a conclusão da barreira.
D3D12DDI_BARRIER_SYNC_DRAW
Valor: 0x2
Esse valor é um escopo guarda-chuva para todos os estágios de pipeline do Draw. Sincronizar com as seguintes cargas de trabalho de GPU:

* DrawInstanced
* DrawIndexedInstanced
* SetGraphicsRootDescriptorTable
SetGraphicsRootShaderResource
* SetGraphicsRootUnorderedAccessView
SetGraphicsRootConstantBufferView

A sincronização SetGraphicsRootXxx é necessária para dar suporte a descritores D3D12DDI_DESCRIPTOR_RANGE_FLAG_0013_DATA_STATIC_WHILE_SET_AT_EXECUTE.

Um valor SyncBefore de D3D12DDI_BARRIER_SYNC_DRAW indica que todo o trabalho de Desenho anterior deve ser concluído antes de executar a barreira.

Um valor SyncAfter de D3D12DDI_BARRIER_SYNC_DRAW indica que todo o trabalho de Desenho subsequente deve aguardar a conclusão da barreira.
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER
Valor: 0x4
Sincronizar com a execução do estágio assembler de entrada.
D3D12DDI_BARRIER_SYNC_INDEX_INPUT
Valor: 0x4
Mapeia para D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER.
D3D12DDI_BARRIER_SYNC_VERTEX_SHADING
Valor: 0x8
Sincronize em todos os estágios de sombreamento de vértice, incluindo vértice, domínio, casco, mosaico, geometria, amplificação e sombreamento de malha.
D3D12DDI_BARRIER_SYNC_PIXEL_SHADING
Valor: 0x10
Sincronizar com a execução do sombreador de pixel.
D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL
Valor: 0x20
Sincronizar com operações de leitura/gravação de estêncil/profundidade. Isso inclui acessos de DSV (exibição de estêncil de profundidade) durante Draw* e ClearRenderTargetView.
D3D12DDI_BARRIER_SYNC_RENDER_TARGET
Valor: 0x40
Sincronizar com operações de leitura/gravação de destino de renderização. Isso inclui gravações de RTV (modo de exibição de destino de renderização) durante Draw* e ClearRenderTargetView.
D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING
Valor: 0x80
Sincronizar com as seguintes cargas de trabalho de GPU:

de Expedição
SetComputeRootDescriptorTable
SetComputeRootShaderResource
* SetComputeRootUnorderedAccessView
* SetComputeRootConstantBufferView

A sincronização SetComputeRootXxx é necessária para dar suporte a descritores D3D12DDI_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTION.
D3D12DDI_BARRIER_SYNC_RAYTRACING
Valor: 0x100
Sincronizar com a execução do raytracing.
D3D12DDI_BARRIER_SYNC_COPY
Valor: 0x200
Sincronizar com os comandos Copy.
D3D12DDI_BARRIER_SYNC_RESOLVE
Valor: 0x400
Sincronize com os comandos Resolver.
D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT
Valor: 0x800
Sincronizar com a execução ExecuteIndirect.
D3D12DDI_BARRIER_SYNC_PREDICATION
Valor: 0x800
Sincronize com os comandos predication. Aliased com D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT*.
D3D12DDI_BARRIER_SYNC_ALL_SHADING
Valor: 0x1000
Sincronizar com toda a execução do sombreador.
D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING
Valor: 0x2000
Sincronizar com a execução do sombreador, exceto o sombreamento de pixel. Existe para compatibilidade com a API ResourceBarrier herdada.
D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO
Valor: 0x4000
Sincronizar com PFND3D12DDI_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_0054 trabalho.
D3D12DDI_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW
Valor: 0x8000
Sincronizar com a execução com um UAV.
D3D12DDI_BARRIER_SYNC_VIDEO_DECODE
Valor: 0x100000
Sincronizar com a execução de Decodificação de Vídeo.
D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS
Valor: 0x200000
Sincronizar com a execução do Processo de Vídeo.
D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE
Valor: 0x400000
Sincronizar com a execução da Codificação de Vídeo.
D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE
Valor: 0x800000
Sincronizar com PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 trabalho.

A barreira correspondente AccessBefore ou do AccessAfter deve ter o D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE bit definido.
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE
Valor: 0x1000000
Sincronizar com PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 trabalho.

A barreira correspondente AccessBefore ou do AccessAfter deve ter o D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE bit definido.
D3D12DDI_BARRIER_SYNC_SPLIT
Valor: 0x80000000
Bit de sincronização especial que indica uma barreira dividida. Usado como um valor SyncAfter para indicar o início de uma barreira dividida. O aplicativo deve fornecer uma barreira correspondente com SyncBefore definido como D3D12DDI_BARRIER_SYNC_SPLIT. Consulte Comentários.

Observações

Uma barreira dividida é uma dica para o driver de que uma transição de estado deve ocorrer entre dois pontos em um fluxo de comando, mesmo cruzando limites executeCommandLists. Os drivers podem concluir as transições de layout necessárias e o cache libera a qualquer momento entre o início e o fim de uma barreira dividida.

AS APIs de barreira aprimoradas permitem a sincronização SPLIT. As barreiras divididas são representadas por um par de barreiras em que a barreira inicial usa um valor D3D12DDI_BARRIER_SYNC_SPLITSyncAfter e a barreira final usa um valor D3D12DDI_BARRIER_SYNC_SPLITSyncBefore.

Os pares de barreira de divisão devem usar LayoutBefore, LayoutAfter, AccessBefore e AccessAfter valores para as barreiras iniciais e finais. Os pares de barreira de divisão devem ser sequenciais sem nenhuma outra barreira interveniente no mesmo recurso. O snippet de código a seguir é um exemplo no nível do aplicativo.

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

As barreiras divididas entre os limites de ExecuteCommandLists são permitidas. Nesse caso, todos os valores de AccessBefore e AccessAfter são efetivamente ignorados, uma vez que os limites ExecuteCommandLists cuidam de qualquer liberação de cache. Essencialmente, as barreiras divididas entre ExecuteCommandLists são barreiras somente de layout. Portanto, dividir uma barreira de buffer ou uma barreira de textura de acesso simultâneo entre os limites executeCommandLists não serve para nada. Uma barreira de divisão BEGIN ou END sem correspondência em um buffer ou textura de acesso simultâneo em um determinado escopo ExecuteCommandLists é efetivamente não utilizado e a Camada de Depuração produz um aviso.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 11 (WDDM 3.0)
cabeçalho d3d12umddi.h

Consulte também

D3D12DDI_BARRIER_ACCESS

D3D12DDI_BUFFER_BARRIER_0088

D3D12DDI_GLOBAL_BARRIER_0088

D3D12DDI_RANGED_BARRIER_0088

D3D12DDI_TEXTURE_BARRIER_0088