регистрация ps_1_1__ps_1_2__ps_1_3__ps_1_4
Шейдеры пикселей зависят от регистров для получения данных вершин, вывода данных пикселя, хранения временных результатов во время вычислений и определения этапов выборки текстуры. Существует несколько типов регистров, каждый из которых имеет уникальные функциональные возможности. В этом разделе содержатся справочные сведения для входных и выходных регистров, реализованных версией шейдера пикселей 1_X.
Регистрирует данные хранения для использования шейдером пикселей. Регистры полностью описаны в следующих разделах.
- Типы регистров описывают четыре типа доступных регистров и их цели.
- Ознакомьтесь с сведениями об ограничениях ограничения на использование нескольких регистров в одной инструкции.
- Только чтение записи описывает, какие регистры можно использовать для чтения, записи или обоих.
- Диапазон сведений о диапазоне данных компонента.
Типы регистрации
Имя | Тип | Версия 1_1 | Версия 1_2 | Версия 1_3 | Версия 1_4 |
---|---|---|---|---|---|
c# | Константный регистр | 8 | 8 | 8 | 8 |
r# | Буферный регистр | 2 | 2 | 2 | 6 |
t# | Регистр текстуры | 4 | 4 | 4 | 6 |
v# | Цветной регистр | 2 | 2 | 2 | 2 на этапе 2 |
Регистры констант содержат постоянные данные. Данные можно загрузить в постоянный регистр с помощью SetPixelShaderConstantF или его можно определить с помощью def - ps. Регистры констант недоступны по инструкциям по адресу текстуры. Единственным исключением является texm3x3spec - ps инструкция, которая использует постоянный регистр для предоставления вектора луча глаз.
Временные регистры используются для хранения промежуточных результатов. R0 также служит выходными данными шейдера пикселей. Значение в r0 в конце шейдера — это цвет пикселя для шейдера.
Проверка шейдера завершится ошибкой CreatePixelShader на любом шейдере, который пытается прочитать из временного регистра, который не был написан предыдущей инструкцией. D3DXAssembleShader произойдет аналогично, если проверка включена (не используйте D3DXSHADER_SKIPVALIDATION).
Регистры текстур
Для шейдера пикселей версии 1_1–1_3 регистры текстур содержат данные текстуры или координаты текстур. Данные текстуры загружаются в регистр текстуры при выборке текстуры. Выборка текстур использует координаты текстуры для поиска или образца значения цвета с указанными координатами (u,v,w,q) при учете атрибутов состояния стадии текстуры. Данные координат текстуры интерполируются из данных координат вершины и связаны с определенным этапом текстуры. Существует связь между номером этапа текстуры и порядком объявления координат текстуры по умолчанию. По умолчанию первый набор координат текстур, определенных в формате вершины, связан с этапом 0 текстуры.
Для этих версий шейдера пикселей регистры текстур ведут себя так же, как временные регистры при использовании арифметических инструкций.
Для шейдера пикселей версии 1_4 регистры текстур (t#) содержат данные координат текстур только для чтения. Это означает, что набор координат текстуры и номер стадии текстуры не зависят друг от друга. Номер этапа текстуры (из которого выполняется выборка текстуры) определяется целевым номером регистра (r0 до r5). Для инструкции texld набор координат текстур определяется исходным регистром (t0 до t5), поэтому набор координат текстур можно сопоставить с любым этапом текстуры. Кроме того, исходный регистр (указание координат текстуры) для texld также может быть временным регистром (r#), в этом случае содержимое временного регистра используется в качестве координат текстуры.
Регистры цветов содержат значения цвета на пиксель. Значения получаются путем итерации диффузных и зеркальных цветов в данных вершин. Для шейдеров шейдеров пикселей версии 1_4 цветные регистры доступны только во время второго этапа.
Если для режима оттенка задано значение D3DSHADE_FLAT, то итерация обоих цветов вершин (диффузная и зримная) отключена. Независимо от режима оттенка, туман по-прежнему будет итерироваться конвейером, если пиксельный туман включен. Помните, что туман применяется позже в конвейере, чем пиксели.
Обычно для загрузки регистра v0 используются данные диффузного цвета вершины. Кроме того, для загрузки регистра версии 1 используются данные о цвете вершины.
Входные значения данных цвета зажаты (насыщенные) к диапазону от 0 до 1, так как это допустимый входной диапазон для цветовых регистров в шейдере пикселей.
Шейдеры пикселей имеют доступ только для чтения к цветным регистрам. Содержимое этих регистров — это итерированные значения, но итерация может выполняться с гораздо меньшей точностью, чем координаты текстуры.
Ограничение порта чтения
Ограничение порта чтения указывает количество разных регистров каждого типа регистра, который можно использовать в качестве исходного регистра в одной инструкции.
Имя | Тип | Версия 1_1 | Версия 1_2 | Версия 1_3 | Версия 1_4 |
---|---|---|---|---|---|
c# | Константный регистр | 2 | 2 | 2 | 2 |
r# | Буферный регистр | 2 | 2 | 2 | 3 |
t# | Регистр текстуры | 2 | 3 | 3 | 1 |
v# | Цветной регистр | 2 | 2 | 2 | 2 на этапе 2 |
Например, цветовые регистры для почти всех версий имеют ограничение порта чтения в два. Это означает, что одна инструкция может использовать не более двух разных цветовых регистров (v0 и v1 для экземпляра) в качестве исходных регистров. В этом примере показаны два регистра цвета, которые используются в одной инструкции:
mad r0, v1, c2, v0
Только для чтения, чтения и записи
Типы регистров определяются в соответствии с возможностями только для чтения или записи (RW) в следующей таблице. Регистры, доступные только для чтения, можно использовать только в качестве исходных регистров в инструкции; Они никогда не могут использоваться в качестве целевого регистра.
Имя | Тип | Версия 1_1 | Версия 1_2 | Версия 1_3 | Версия 1_4 |
---|---|---|---|---|---|
Имя | Тип | 1_1 | 1_2 | 1_3 | 1_4 |
c# | Константный регистр | RO | RO | RO | RO |
r# | Буферный регистр | RW | RW | RW | RW |
t# | Регистр текстуры | RW | RW | RW | См. следующее примечание |
v# | Цветной регистр | RO | RO | RO | RO |
Регистры, поддерживающие RW, можно использовать для хранения промежуточных результатов. Сюда входят временные регистры и регистры текстур для некоторых версий шейдера.
Заметка
- Для шейдера пикселей версии 1_4 регистры текстур являются ro для инструкций по адресации текстур, а регистры текстур не могут быть прочитаны ни с помощью арифметических инструкций. Кроме того, так как регистры текстур стали регистрами координат текстуры, доступ к ролям не является регрессией предыдущих функций.
Диапазон
Диапазон — это максимальное и минимальное значение регистра данных. Диапазоны зависят от типа регистра. Диапазоны для некоторых регистров можно запрашивать из крышки устройства с помощью GetDeviceCaps.
Имя | Тип | Диапазон | Версии |
---|---|---|---|
c# | Константный регистр | -1 до +1 | Все версии |
r# | Буферный регистр | — PixelShader1xMaxValue to + PixelShader1xMaxValue | Все версии |
t# | Регистр текстуры | — MaxTextureRepeat to + MaxTextureRepeat | Все версии |
v# | Цветной регистр | От 0 до 1 | Все версии |
Оборудование шейдера ранних пикселей представляет данные в регистрах с использованием фиксированного числа точек. Это ограничивает точность не более восьми битов для дробной части числа. Помните об этом при проектировании шейдера.
Для шейдера пикселей версии 1_1–1_3 MaxTextureRepeat должен быть минимальным. Для 1_4 MaxTextureRepeat должно быть не менее восьми.
Дополнительные сведения о PixelShader1xMaxValue см. в D3DCAPS9.
Связанные разделы