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


Регистр глубины вывода

Регистр глубины вывода шейдера пикселей (oDepth) — это скалярный регистр только для записи с диапазоном [0..1], который возвращает новое значение глубины для проверки глубины в буфере трафарета глубины.

Синтаксис

oDepth

 

Где:

Имя Описание
oDepth Новое значение глубины для проверки глубины в буфере трафарета глубины

 

Важно помнить, что запись в oDepth приводит к потере любых аппаратных алгоритмов оптимизации буфера глубины (т. е. иерархических Z), которые ускоряют производительность теста глубины.

При записи в oDepth требуется репликация исходного swizzle (.x | .y | .z | .w). Явные маски записи не допускаются.

Запись в регистр oDepth заменяет интерполированное значение глубины (и игнорирует любые отрисовки смещением глубины или наклона). Если буфер глубины не создан или не подключен к устройству, запись в oDepth игнорируется.

При использовании множественной дискретизации и записи в oDepth, так как шейдер пикселей выполняется только один раз для каждого пикселя, значение глубины будет реплицировано для всех охваченных вложенной выборки расположений. Проверка глубины по-прежнему выполняется для каждой выборки, но у вас нет значения глубины для каждой выборки в сравнении из пиксельного шейдера, как если бы вы не написали oDepth.

Если в качестве буфера глубины приложение имеет набор w-buffer, ему необходимо учитывать это при записи в oDepth. Потенциально ему необходимо отправить информацию о диапазоне w в шейдер пикселей и вычислить w-диапазон для масштабирования w-значений, записанных до oDepth.

Ограничения ps_2_0 и ps_2_x

  • oDepth можно написать только с помощью инструкции mov - ps и может быть выполнено только один раз.
  • При записи в oDepth модификатор источника не допускается.
  • При записи в oDepth модификатор инструкций не допускается.
  • Отсутствует запись в oDepth из конструкции управления потоком или при использовании предикаций.

Ограничения ps_3_0

  • Для ps_3_0 регистры выходных данных oC# и oD# можно записать любое количество раз. Выходные данные пиксельного шейдера поступают из содержимого выходных регистров в конце выполнения шейдера. Если запись в выходной регистр не выполняется, возможно, из-за управления потоком или если шейдер просто не записывал ее, соответствующий целевой объект отрисовки также не обновляется. Если записывается подмножество каналов в выходном регистре, в остальные каналы записываются неопределенные значения.
  • Вы можете записывать данные в oDepth в элементе управления потоком или предикате, если все возможные пути в конечном итоге записываются в регистр.
  • Вы не можете выполнять вычисления градиента (или операции, которые неявно вызывают вычисления градиента, такие как texld - ps_2_0 и выше, texldb - ps, texldp - ps) внутри инструкций управления потоком, условия ветвления которых различаются в зависимости от примитивов (т. е. динамические инструкции управления потоком). Предикация инструкций не считается динамическим управлением потоком.

Регистры