перечисление 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_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_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
Значение SyncBeforeD3D12DDI_BARRIER_SYNC_ALL указывает, что перед выполнением барьера все предыдущие действия должны быть завершены.

Значение 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 указывает, что перед выполнением барьера все предыдущие действия draw должны быть завершены.

Значение SyncAfterD3D12DDI_BARRIER_SYNC_DRAW указывает, что все последующие трудоемкие операции Draw должны ожидать завершения барьера.
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER
Значение: 0x4
Синхронизация с выполнением этапа сборщика входных данных.
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) во время draw* и ClearRenderTargetView.
D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING
Значение: 0x80
Синхронизируйте со следующими рабочими нагрузками GPU:

* Отправки
* SetComputeRootDescriptorTable
* SetComputeRootShaderResource
* SetComputeRootUnorderedAccessView
* SetComputeRootConstantBufferView

Синхронизация SetComputeRootXxx требуется для поддержки дескрипторов D3D12DDI_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTION .
D3D12DDI_BARRIER_SYNC_RAYTRACING
Значение: 0x100
Синхронизация с выполнением луча.
D3D12DDI_BARRIER_SYNC_COPY
Значение: 0x200
Синхронизация с командами копирования.
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_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 выполняют очистку кэша. По сути, разделенные барьеры cross-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