Поделиться через


перечисление 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

См. также

D3D12DDI_BARRIER_ACCESS

D3D12DDI_BUFFER_BARRIER_0088

D3D12DDI_GLOBAL_BARRIER_0088

D3D12DDI_RANGED_BARRIER_0088

D3D12DDI_TEXTURE_BARRIER_0088