enumeración D3D12DDI_BARRIER_SYNC (d3d12umddi.h)

Un valor de D3D12DDI_BARRIER_SYNC es un OR bit a bit de los siguientes campos que especifican el ámbito de sincronización del trabajo de GPU con respecto a la barrera.

Sintaxis

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
La sincronización no es necesaria antes o después de una barrera. Cuando se usa, D3D12DDI_BARRIER_SYNC_NONE debe ser el único conjunto de bits.

Un valor SyncBefore de D3D12DDI_BARRIER_SYNC_NONE implica que no se han realizado barreras ni accesos anteriores al recurso en el mismo ámbito ExecuteCommandLists.

Un syncAfter valor de D3D12DDI_BARRIER_SYNC_NONE implica que no se tiene acceso a los subrecursos correspondientes después de la barrera en el mismo ámbito de ExecuteCommandLists.

En ambos casos, AccessAfter debe ser D3D12DDI_BARRIER_ACCESS_NO_ACCESS.
D3D12DDI_BARRIER_SYNC_ALL
Valor: 0x1
Un SyncBefore valor de D3D12DDI_BARRIER_SYNC_ALL indica que todo el trabajo anterior debe completarse antes de ejecutar la barrera.

Un SyncAfter valor de D3D12DDI_BARRIER_SYNC_ALL indica que todo el trabajo posterior debe esperar a que se complete la barrera.
D3D12DDI_BARRIER_SYNC_DRAW
Valor: 0x2
Este valor es un ámbito paraguas para todas las fases de canalización draw. Sincronice con las siguientes cargas de trabajo de GPU:

* drawInstanced
* DrawIndexedInstanced
* SetGraphicsRootDescriptorTable
* setGraphicsRootShaderResource
* setGraphicsRootUnorderedAccessView
* setGraphicsRootConstantBufferView

La sincronización de SetGraphicsRootXxx es necesaria para admitir descriptores de D3D12DDI_DESCRIPTOR_RANGE_FLAG_0013_DATA_STATIC_WHILE_SET_AT_EXECUTE.

Un syncBefore valor de D3D12DDI_BARRIER_SYNC_DRAW indica que todo el trabajo de Draw anterior debe completarse antes de ejecutar la barrera.

Un syncAfter valor de D3D12DDI_BARRIER_SYNC_DRAW indica que todo el trabajo de Draw posterior debe esperar a que se complete la barrera.
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER
Valor: 0x4
Sincronice con la ejecución de la fase del ensamblador de entrada.
D3D12DDI_BARRIER_SYNC_INDEX_INPUT
Valor: 0x4
Se asigna a D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER.
D3D12DDI_BARRIER_SYNC_VERTEX_SHADING
Valor: 0x8
Sincronice con todas las fases de sombreado de vértices, incluidos vértices, dominio, casco, teselación, geometría, amplificación y sombreado de malla.
D3D12DDI_BARRIER_SYNC_PIXEL_SHADING
Valor: 0x10
Sincronizar con la ejecución del sombreador de píxeles.
D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL
Valor: 0x20
Sincronice con las operaciones de lectura y escritura de profundidad/galería de símbolos. Esto incluye accesos a la vista de galería de símbolos de profundidad (DSV) durante Draw* y ClearRenderTargetView.
D3D12DDI_BARRIER_SYNC_RENDER_TARGET
Valor: 0x40
Sincronice con las operaciones de lectura y escritura de destino de representación. Esto incluye escrituras de vista de destino de representación (RTV) durante Draw* y ClearRenderTargetView.
D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING
Valor: 0x80
Sincronice con las siguientes cargas de trabajo de GPU:

de distribución de
* SetComputeRootDescriptorTable
* SetComputeRootShaderResource
* SetComputeRootUnorderedAccessView
* setComputeRootConstantBufferView

La sincronización
setComputeRootXxx de es necesaria para admitir descriptores de D3D12DDI_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTION.
D3D12DDI_BARRIER_SYNC_RAYTRACING
Valor: 0x100
Sincronice con la ejecución de raytracing.
D3D12DDI_BARRIER_SYNC_COPY
Valor: 0x200
Sincronice con los comandos Copy.
D3D12DDI_BARRIER_SYNC_RESOLVE
Valor: 0x400
Sincronice con los comandos Resolve.
D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT
Valor: 0x800
Sincronice con la ejecución executeIndirect.
D3D12DDI_BARRIER_SYNC_PREDICATION
Valor: 0x800
Sincronice con los comandos predicados. Alias con D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT*.
D3D12DDI_BARRIER_SYNC_ALL_SHADING
Valor: 0x1000
Sincronice con toda la ejecución del sombreador.
D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING
Valor: 0x2000
Sincronice con la ejecución del sombreador, excepto el sombreado de píxeles. Existe para la compatibilidad con la API de ResourceBarrier heredada.
D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO
Valor: 0x4000
Sincronice con PFND3D12DDI_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_0054 trabajo.
D3D12DDI_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW
Valor: 0x8000
Sincronizar con la ejecución en un UAV.
D3D12DDI_BARRIER_SYNC_VIDEO_DECODE
Valor: 0x100000
Sincronizar con la ejecución de descodificación de vídeo.
D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS
Valor: 0x200000
Sincronizar con la ejecución del proceso de vídeo.
D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE
Valor: 0x400000
Sincronizar con la ejecución de codificación de vídeo.
D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE
Valor: 0x800000
Sincronice con PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 trabajo.

La barrera correspondiente campo AccessBefore o AccessAfter debe tener establecido el D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE bit.
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE
Valor: 0x1000000
Sincronice con PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 trabajo.

La barrera correspondiente campo AccessBefore o AccessAfter debe tener establecido el D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE bit.
D3D12DDI_BARRIER_SYNC_SPLIT
Valor: 0x80000000
Bit de sincronización especial que indica una barrera dividida. Se usa como valor de SyncAfter para indicar el inicio de una barrera dividida. La aplicación debe proporcionar una barrera coincidente con SyncBefore establecido en D3D12DDI_BARRIER_SYNC_SPLIT. Vea comentarios.

Observaciones

Una barrera dividida es una sugerencia para el controlador de que debe producirse una transición de estado entre dos puntos en un flujo de comandos, incluso entre los límites ExecuteCommandLists. Los controladores pueden completar las transiciones de diseño necesarias y almacenar la memoria caché en cualquier momento entre el inicio y el final de una barrera de división.

Las API de barrera mejoradas permiten la sincronización SPLIT. Las barreras divididas se representan mediante un par de barreras en las que la barrera inicial usa un valor de D3D12DDI_BARRIER_SYNC_SPLITSyncAfter y la barrera final usa un valor D3D12DDI_BARRIER_SYNC_SPLITSyncBefore.

Los pares de barreras divididas deben usar LayoutBefore idénticos, LayoutAfter, AccessBeforey AccessAfter para las barreras iniciales y finales. Los pares de barreras divididas deben ser secuenciales sin otras barreras que intervengan en el mismo recurso. El siguiente fragmento de código es un ejemplo de nivel de aplicación.

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

Se permiten barreras divididas entre los límites executeCommandLists. En este caso, todos los valores de AccessBefore y AccessAfter se omiten de forma eficaz, ya que los límites executeCommandLists se encargan de cualquier vaciado de caché. Básicamente, las barreras divididas entre ExecuteCommandLists son barreras de solo diseño. Por lo tanto, dividir una barrera de búfer o una barrera de textura de acceso simultáneo a través de los límites ExecuteCommandLists no tiene ningún propósito. Una barrera de división BEGIN o END no coincidente en un búfer o textura de acceso simultáneo en un ámbito ExecuteCommandLists determinado no se usa de forma eficaz y la capa de depuración genera una advertencia.

Requisitos

Requisito Valor
cliente mínimo admitido Windows 11 (WDDM 3.0)
encabezado de d3d12umddi.h

Consulte también

D3D12DDI_BARRIER_ACCESS

D3D12DDI_BUFFER_BARRIER_0088

D3D12DDI_GLOBAL_BARRIER_0088

D3D12DDI_RANGED_BARRIER_0088

D3D12DDI_TEXTURE_BARRIER_0088