Регистры ps_3_0

Пиксельные шейдеры зависят от регистров для получения данных вершин, вывода пиксельных данных, хранения временных результатов во время вычислений и определения этапов выборки текстуры. Существует несколько типов регистров, каждый из которых обладает уникальной функциональностью. В этом разделе содержатся справочные сведения о входных и выходных регистрах, реализованных пиксельным шейдером версии 3_0.

Новые регистры

Входной регистр

Входные регистры (v#) теперь являются полностью плавающей запятой, и в него консолидирован регистр координат текстуры(t#). Dcl_semantics (sm3 - ps asm) в верхней части шейдера используется для описания того, что содержится в определенной Input_Register. Для этой модели представлена семантика для типов пикселей (аналогичная стороне вершины). При определении входных регистров как цветов (например, координаты текстуры) не выполняются. Оценка регистров, определенных как цвет, отличается от координат текстуры при множественной дискретизации.

Регистр лиц

Регистр лиц (vFace) является новым для этой модели. Это скалярный регистр с плавающей запятой, который в конечном итоге будет содержать примитивную область. Однако в ps_3_0 действителен только знак этого регистра. Таким образом, если значение меньше нуля (бит знака является отрицательным), примитивом является обратная грань (область отрицательная, против часовой стрелки). Поэтому в ps_3_0 имеет смысл сравнить этот регистр только с 0 (> 0 или < 0). Внутри пиксельного шейдера приложение может принять решение о том, какой метод освещения использовать. Таким образом можно добиться двустороннего освещения. Для этого регистра требуется объявление, поэтому необъявленное использование помечается как ошибка. Для строк и точечных примитивов этот регистр не определен. Регистр лиц можно использовать только в качестве условия со следующими инструкциями: setp_comp - ps, if_comp - ps или break_comp - ps.

Регистр счетчика цикла

Регистр счетчика цикла (aL) является новым для этой модели. Он автоматически увеличивается при каждом выполнении цикла — ps/endloop — блока ps . При необходимости его можно использовать в блоке для относительной адресации. Недопустимо использовать регистр счетчика цикла вне цикла.

Регистр позиции

Регистр позиции (vPos) является новым для этой модели. Он содержит текущие пиксели (x, y) в соответствующих каналах. Каналы (z, w) не определены. Для этого регистра требуется объявление, поэтому необъявленное использование помечается как ошибка. При объявлении этот регистр должен иметь ровно одну из следующих масок: .x, .y, .xy.

Типы входных регистров

Регистрация Имя Count Чтение-запись # Порты чтения # Reads/inst Измерение RelAddr Умолчания; Требуется DCL
V # Входной регистр 10 R 1 Неограниченно 4 Аль Нет Да
R # Временная регистрация 32 Чтение-запись 3 Неограниченно 4 нет Нет Нет
c# Постоянный регистр с плавающей запятой 224 R 1 Неограниченно 4 нет 0000 Нет
Я # Константный целочисленный регистр 16 R 1 1 4 нет 0000 Нет
B # Константный логический регистр 16 R 1 1 1 Нет FALSE Нет
p0 Регистр предиката 1 R 1 1 1 Нет Нет Нет
s # Sampler (Direct3D 9 asm-ps) 16 R 1 1 4 нет См. примечание 1 Да
VFace Face_Register 1 R 1 Неограниченно 1 Нет None Да
vPos Position_Register 1 R 1 Неограниченно 4 нет None Да
Аль Loop_Counter_Register 1 R 1 Неограниченно 1 Недоступно Нет Нет

 

Примечания.

  • Значения по умолчанию для подстановок выборки существуют, но значения зависят от формата текстуры.

Число портов чтения — это количество различных регистров (для каждого типа регистра), которые можно считывать в одной инструкции.

Типы выходных регистров

Регистрация Имя Count Чтение-запись Измерение RelAddr Умолчания; Требуется DCL
Oc # Выходной цветовой регистр См. статью Текстуры с несколькими элементами (Direct3D 9) W 4 нет Нет Нет
oDepth Регистр глубины вывода 1 W 1 Нет Нет Нет

 

Регистры