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