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


Регистр цвета выходных данных

Выходные регистры цвета шейдера пикселей (oC#) — это регистры только для записи, которые выводят результаты в несколько целевых объектов отрисовки.

Синтаксис

Oc #

 

Где:

Имя Описание
oC0 отрисовка целевого объекта #0
oC1 Отрисовка целевого объекта No 1
oC2 Отрисовка целевого объекта No 2
oC3 Отрисовка целевого объекта No 3

 

Комментарии

  • Если oCn записывается, но отсутствует соответствующий целевой объект отрисовки, эта запись в oCn игнорируется.
  • Состояния отрисовки D3DRS_COLORWRITEENABLE, D3DRS_COLORWRITEENABLE1, D3DRS_COLORWRITEENABLE2 и D3DRS_COLORWRITEENABLE3 определить, какие компоненты oCn в конечном итоге записываются в целевой объект отрисовки (после смешения, если применимо). Если шейдер записывает некоторые, но не все компоненты, определенные состояниями отрисовки D3DRS_COLORWRITEENABLE* для заданного регистра oCn, то неписанные каналы создают неопределенные значения в соответствующем целевом объекте отрисовки. Если ни один из компонентов oCn не записан, соответствующий целевой объект отрисовки не должен обновляться вообще (как указано выше), поэтому состояния отрисовки D3DRS_COLORWRITEENABLE* не применяются.

Ограничения модели шейдера 2

  • oCn можно написать только с помощью инструкции mov - ps .
  • oC0 всегда должен быть записан в шейдере.
  • При записи в любой объект oCn не допускается исходный swizzle (за исключением .xyzw = swizzle по умолчанию) или модификатор источника.
  • При записи в любой oCn не допускается маска записи назначения (за исключением .xyzw = маска по умолчанию) или модификатор инструкций.
  • Если записывается oCn, необходимо также записать oC0 - oCn-1. Например, для записи в oC2 необходимо также выполнить запись в oC0 и oC1.
  • Допускается не более одной записи в любой oC# для каждого шейдера.
  • Для ps_2_x и ps_3_0 нельзя записывать в регистры oC# и oD# в динамическом элементе управления потоком или предикате (записи в oC# внутри статического элемента управления потоком — это нормально).

Ограничения модели 3 шейдера

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

Регистры

Несколько целевых объектов отрисовки (Direct3D 9)