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


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

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

Синтаксис

oC#

 

Где:

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

 

Замечания

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

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

  • oCn можно записать только с помощью инструкции mov - ps.
  • oC0 должен быть всегда записан в шейдере.
  • Исходный swizzle (кроме Xyzw = swizzle по умолчанию) или модификатор источника не допускается при записи в любой oCn.
  • При записи в любой объект 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# можно записывать любое количество раз. Выходные данные шейдера пикселей поступают из содержимого выходных регистров в конце выполнения шейдера. Если запись в выходной регистр не происходит, возможно, из-за управления потоком или если шейдер просто не написал его, соответствующий отрисовщик также не обновляется. Если подмножество каналов в выходном регистре записывается, то неопределенные значения записываются в оставшиеся каналы.
  • Для ps_3_0 регистры oC# можно записывать с помощью любых записных масок.
  • Для ps_2_x и ps_3_0 нельзя записывать в регистры oC# и oD# в динамическом элементе управления потоками или предикатации (запись в oC# внутри статического элемента управления потоком хорошо).
  • Вы не можете выполнять никаких вычислений градиента (или операций, которые неявно вызывают вычисления градиента, такие как texld - ps_2_0 и вверх, texldb - ps, texldp - ps) внутри операторов управления потоками, условия ветвления которых зависят от каждой примитивной основы (т. е. инструкции динамического управления потоком). Предикация инструкций не считается динамическим элементом управления потоком.

регистры

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