Перечисление D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_TYPE (d3d12umddi.h)

Объявляет тип доступа к ресурсу для вызова PFND3D12DDI_BEGIN_RENDER_PASS.

Синтаксис

typedef enum D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_TYPE {
  D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_DISCARD,
  D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_PRESERVE,
  D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_CLEAR,
  D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_NO_ACCESS,
  D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_RESUME_WRITING,
  D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_RESUME_LOCAL_READ
} ;

Константы

 
D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_DISCARD
Указывает, что приложение не зависит от предыдущего содержимого ресурса.

Данная реализация может возвращать ранее записанное содержимое или неинициализированные данные. Однако при чтении из ресурса не должно возникать зависание GPU, "чтение" может возвращать только неопределенные данные в худшем случае.
Чтение определяется как традиционное:

* UAV (представление неупорядоченного доступа)
* SRV (представление ресурсов шейдера)
* CBV (представление буфера констант)
* VBV (представление буфера вершин)
* IBV (представление буфера индекса)
* Привязка и чтение IndirectArg
* чтение, вызванное смешанное/глубинное тестирование
D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_PRESERVE
Указывает, что приложение зависит от предыдущего содержимого ресурса, и содержимое должно быть загружено из main памяти.
D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_CLEAR
Указывает, что приложение имеет зависимость от ресурса, очищаемого до определенного (предоставленного приложением) цвета.

ПРИМЕЧАНИЕ

Это ясно определяет, взаимодействовал ли ресурс с чем-либо за пределами отрисовки pass.

API позволит приложению указать четкие значения в вызове PFND3D12DDI_BEGIN_RENDER_PASS через структуру D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS .

D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_NO_ACCESS
Указывает, что ресурс не будет считываться или записываться в во время отрисовки. Это значение также указывает, не был ли доступ к плоскости глубины или трафарета для dsV (представление источника данных).

ВАЖНО

Это поле должно быть связано с флагом D3D12DDI_RENDER_PASS_ENDING_ACCESS_NO_ACCESS в D3D12DDI_RENDER_PASS_ENDING_ACCESS_TYPE.

D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_RESUME_WRITING
Указывает, что приложение возобновляет запись в следующих условиях:

* Возобновляет запись на поверхность, которая была ранее записана в предыдущем проходе отрисовки
* Имеет флаг D3D12DDI_RENDER_PASS_ENDING_ACCESS_SUSPEND_WRITING в перечислении D3D12DDI_RENDER_PASS_ENDING_ACCESS_TYPE
* Между двумя проходами отрисовки не произошло никаких промежуточных работ GPU.

Запись в возобновляемом проходе отрисовки происходит сразу после записи в приостановленном проходе отрисовки.
Этот флаг предназначен для разрешения операций записи в один и тот же целевой объект отрисовки, чтобы охватывать несколько списков команд без очистки кэшей на микросхеме.
Запись может возобновиться с прохода отрисовки в отдельном списке команд, при условии, что Списки приостановки или возобновления команды выполняются (назад к спине) в той же группе ExecuteCommandLists.
D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_RESUME_LOCAL_READ
Указывает, что приложение хочет считывать данные из ресурса, который был ранее записан в GPU (т. е. по-прежнему находится в кэше плиток), и будет считываться из локального пикселя (т. е. операции чтения всегда будут выполняться в точном выходном пикселе или смежных пикселях).

Это значение перечисления в сочетании со значением D3D12DDI_RENDER_PASS_ENDING_ACCESS_SUSPEND_LOCAL_READ в перечислении D3D12DDI_RENDER_PASS_ENDING_ACCESS_TYPE позволяет по возможности считывать ресурсы без сброса между двумя последующими операциями Render Pass.

В частности, приложение гарантирует:

* Ресурс ранее был записан в в отрисовке, который имел характеристики записи D3D12DDI_RENDER_PASS_ENDING_ACCESS_SUSPEND_LOCAL_READ.
* Между предыдущим D3D12DDI_RENDER_PASS_ENDING_ACCESS_SUSPEND_LOCAL_READ отрисовки и текущим проходом отрисовки не выполнялись операции GPU.
* D3D12DDI_RENDER_PASS_BEGINNING_ACCESS_RESUME_LOCAL_READ может быть в цепочке из одного списка команд или между Списки command в одном вызове ExecuteCommandLists, но не между отдельными вызовами ExecuteCommandLists.
* Ресурс для чтения соответствует размеру и формату нового привязанного целевого объекта отрисовки.
* Все операции чтения и записи имеют значение "1 к 1" (а также необязательные пиксели чтения, заданные приложением). Операции чтения из исходной текстуры будут записаны в то же расположение на целевой текстуре, а целевая текстура отрисовки имеет тот же размер, что и исходная текстура.

Размер ядра операции чтения (необходимое количество окружающих пикселей) указывается в PFND3D12DDI_BEGIN_RENDER_PASS время с помощью полей AdditionalWidth/AdditionalHeight на D3D12_RENDER_PASS_BEGINNING_ACCESS_RESUME_LOCAL_READ_PARAMETERS. Параметры AdditionalWidth/AdditionalHeight должны совпадать с параметрами предыдущего D3D12DDI_RENDER_PASS_ENDING_ACCESS_SUSPEND_LOCAL_READ_PARAMETERS.

Требования

Требование Значение
Минимальная версия клиента Windows 10, версия 1809
Верхняя часть d3d12umddi.h