Перечисление 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 |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по