Перечисление 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
Это значение является общим область для всех этапов конвейера Рисования. Выполните синхронизацию со следующими рабочими нагрузками 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) во время Draw* и 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
Синхронизация с выполнением video Encode.
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