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