Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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_NONEValor: 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_ALLValor: 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_DRAWValor: 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_ASSEMBLERValor: 0x4 Sincronice con la ejecución de la fase del ensamblador de entrada. |
D3D12DDI_BARRIER_SYNC_INDEX_INPUTValor: 0x4 Se asigna a D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER. |
D3D12DDI_BARRIER_SYNC_VERTEX_SHADINGValor: 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_SHADINGValor: 0x10 Sincronizar con la ejecución del sombreador de píxeles. |
D3D12DDI_BARRIER_SYNC_DEPTH_STENCILValor: 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_TARGETValor: 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_SHADINGValor: 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_RAYTRACINGValor: 0x100 Sincronice con la ejecución de raytracing. |
D3D12DDI_BARRIER_SYNC_COPYValor: 0x200 Sincronice con los comandos Copy. |
D3D12DDI_BARRIER_SYNC_RESOLVEValor: 0x400 Sincronice con los comandos Resolve. |
D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECTValor: 0x800 Sincronice con la ejecución executeIndirect. |
D3D12DDI_BARRIER_SYNC_PREDICATIONValor: 0x800 Sincronice con los comandos predicados. Alias con D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT*. |
D3D12DDI_BARRIER_SYNC_ALL_SHADINGValor: 0x1000 Sincronice con toda la ejecución del sombreador. |
D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADINGValor: 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_INFOValor: 0x4000 Sincronice con PFND3D12DDI_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_0054 trabajo. |
D3D12DDI_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEWValor: 0x8000 Sincronizar con la ejecución en un UAV. |
D3D12DDI_BARRIER_SYNC_VIDEO_DECODEValor: 0x100000 Sincronizar con la ejecución de descodificación de vídeo. |
D3D12DDI_BARRIER_SYNC_VIDEO_PROCESSValor: 0x200000 Sincronizar con la ejecución del proceso de vídeo. |
D3D12DDI_BARRIER_SYNC_VIDEO_ENCODEValor: 0x400000 Sincronizar con la ejecución de codificación de vídeo. |
D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTUREValor: 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_STRUCTUREValor: 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_SPLITValor: 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 | d3d12umddi.h |