перечисление D3D12DDI_BARRIER_SYNC (d3d12umddi.h)
Значение D3D12DDI_BARRIER_SYNC — это битовая или из следующих полей, которые указывают область синхронизации работы GPU относительно барьера.
Синтаксис
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
} ;
Константы
D3D12DDI_BARRIER_SYNC_NONE Значение: 0x0 Синхронизация не требуется ни до, ни после барьера. При использовании D3D12DDI_BARRIER_SYNC_NONE должен быть единственным битом. Значение SyncBeforeD3D12DDI_BARRIER_SYNC_NONE подразумевает отсутствие предыдущих барьеров или доступа к ресурсу в той же ExecuteCommandLists области. Значение SyncAfterD3D12DDI_BARRIER_SYNC_NONE подразумевает, что соответствующие подресурсы не доступны после барьера в той же области ExecuteCommandLists. В обоих случаях AccessAfter должны быть D3D12DDI_BARRIER_ACCESS_NO_ACCESS. |
D3D12DDI_BARRIER_SYNC_ALL Значение: 0x1 Значение D3D12DDI_BARRIER_SYNC_ALL SyncBefore указывает, что все предыдущие действия должны завершиться перед выполнением барьера. Значение SyncAfterD3D12DDI_BARRIER_SYNC_ALL указывает, что все последующие работы должны ожидать завершения барьера. |
D3D12DDI_BARRIER_SYNC_DRAW Значение: 0x2 Это значение является зонтичной областью для всех этапов конвейера Draw. Синхронизация со следующими рабочими нагрузками GPU: * DrawInstanced * DrawIndexedInstanced * SetGraphicsRootDescriptorTable * SetGraphicsRootShaderResource * SetGraphicsRootUnorderedAccessView * SetGraphicsRootConstantBufferView Синхронизация SetGraphicsRootXxx необходима для поддержки дескрипторов D3D12DDI_DESCRIPTOR_RANGE_FLAG_0013_DATA_STATIC_WHILE_SET_AT_EXECUTE. Значение SyncBeforeD3D12DDI_BARRIER_SYNC_DRAW указывает, что все предыдущие действия рисования должны завершиться перед выполнением барьера. Значение SyncAfterD3D12DDI_BARRIER_SYNC_DRAW указывает, что все последующие действия Рисования должны ожидать завершения барьера. |
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER Значение: 0x4 Синхронизация с выполнением этапа сборщика входных данных. |
D3D12DDI_BARRIER_SYNC_INDEX_INPUT Значение: 0x4 Сопоставляется с D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER. |
D3D12DDI_BARRIER_SYNC_VERTEX_SHADING Значение: 0x8 Синхронизируйте все этапы заливки вершин, включая вершины, домен, корпус, тесселяции, геометрию, амплификацию и заливку сетки. |
D3D12DDI_BARRIER_SYNC_PIXEL_SHADING Значение: 0x10 Синхронизация с выполнением шейдера пикселей. |
D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL Значение: 0x20 Синхронизированы с операциями чтения и записи глубины и набора элементов. Это включает в себя доступ к представлению элементов глубины (DSV) во время рисования* и ClearRenderTargetView. |
D3D12DDI_BARRIER_SYNC_RENDER_TARGET Значение: 0x40 Синхронизация с операциями чтения и записи целевого объекта отрисовки. Сюда входят записи представления целевого объекта отрисовки (RTV) во время рисования* и ClearRenderTargetView. |
D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING Значение: 0x80 Синхронизация со следующими рабочими нагрузками GPU: * диспетчера * SetComputeRootDescriptorTable * SetComputeRootShaderResource * SetComputeRootUnorderedAccessView * SetComputeRootConstantBufferView Для поддержки дескрипторов D3D12DDI_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTION требуется синхронизация setComputeRootXxx. |
D3D12DDI_BARRIER_SYNC_RAYTRACING Значение: 0x100 Синхронизация с выполнением луча. |
D3D12DDI_BARRIER_SYNC_COPY Значение: 0x200 Синхронизация с командами Copy. |
D3D12DDI_BARRIER_SYNC_RESOLVE Значение: 0x400 Синхронизация с командами Resolve. |
D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT Значение: 0x800 Синхронизация с выполнением ExecuteIndirect. |
D3D12DDI_BARRIER_SYNC_PREDICATION Значение: 0x800 Синхронизация с командами предикаций. Псевдоним с D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT*. |
D3D12DDI_BARRIER_SYNC_ALL_SHADING Значение: 0x1000 Синхронизация со всеми выполнением шейдера. |
D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING Значение: 0x2000 Синхронизация с выполнением шейдера, кроме заливки пикселей. Существует для совместимости с устаревшим API ResourceBarrier. |
D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO Значение: 0x4000 Синхронизация с PFND3D12DDI_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_0054 работой. |
D3D12DDI_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW Значение: 0x8000 Синхронизация с выполнением с UAV. |
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 Синхронизация с PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 работой. Соответствующий барьер AccessBefore или поле AccessAfter должно иметь D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE битовый набор. |
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE Значение: 0x1000000 Синхронизация с PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 работой. Соответствующий барьер AccessBefore или поле AccessAfter должно иметь D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE битовый набор. |
D3D12DDI_BARRIER_SYNC_SPLIT Значение: 0x80000000 Специальный бит синхронизации, указывающий на разделенный барьер. Используется в качестве значения SyncAfter для указания начала разделенного барьера. Приложение должно предоставить соответствующий барьер с SyncBefore для D3D12DDI_BARRIER_SYNC_SPLIT. См. примечания. |
Замечания
Разделенный барьер — это указание драйверу, что переход состояния должен происходить между двумя точками в потоке команд, даже пересекая границы ExecuteCommandLists. Драйверы могут выполнять необходимые переходы макета и сбрасывать кэш в любое время между началом и окончанием разделенного барьера.
Расширенные API-интерфейсы барьеров разрешают синхронизацию SPLIT. Разделенные барьеры представлены парой барьеров, в которых начальный барьер использует значение D3D12DDI_BARRIER_SYNC_SPLITSyncAfter, а последний барьер использует значение D3D12DDI_BARRIER_SYNC_SPLITSyncBefore.
Разделенные пары барьеров должны использовать идентичные LayoutBefore, LayoutAfter, AccessBeforeи значения AccessAfter для начальных и окончательных барьеров. Разделенные пары барьеров должны быть последовательными без других промежуточных барьеров в том же ресурсе. Следующий фрагмент кода является примером на уровне приложения.
// 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
Разрешены разделение барьеров между границами ExecuteCommandLists. В этом случае все значения AccessBefore и AccessAfter фактически игнорируются, так как границы ExecuteCommandLists заботятся о очистке кэша. По сути, перекрестные барьеры ExecuteCommandLists — это барьеры, доступные только для макета. Поэтому разделение буферного барьера или барьер текстуры одновременного доступа между границами ExecuteCommandLists не служит ни для каких целей. Несовпадение барьера BEGIN или END для буфера или текстуры одновременного доступа в заданной области ExecuteCommandLists фактически не используется, а уровень отладки выдает предупреждение.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 11 (WDDM 3.0) |
заголовка | d3d12umddi.h |