Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Значение 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 |