Регистр глубины вывода
Регистр глубины вывода шейдера пикселей (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) внутри инструкций управления потоком, условия ветвления которых различаются в зависимости от примитивов (т. е. динамические инструкции управления потоком). Предикация инструкций не считается динамическим управлением потоком.
Связанные темы