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