Регистры 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, итерация обоих цветов вершин (диффузных и зеркальных) отключается. Независимо от режима тени, туман по-прежнему будет выполняться конвейером, если включен пиксельный туман. Имейте в виду, что туман применяется позже в конвейере, чем pixelshader.

    Обычно регистр 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

Только для чтения, чтение и запись

Типы регистров определяются в соответствии с возможностями только для чтения (RO) или чтения и записи (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 для инструкций по адресации текстуры, а регистры текстур не могут считываться с арифметических инструкций и не записываться в них. Кроме того, так как регистры текстур стали регистрами координат текстуры, доступ к ro ro не является регрессией предыдущих функциональных возможностей.

 

Диапазон

Диапазон — это максимальное и минимальное значение данных регистра. Диапазоны зависят от типа регистра. Диапазоны для некоторых регистров можно запрашивать из caps устройства с помощью GetDeviceCaps.

Имя Type Диапазон Версии
c# Постоянный регистр От -1 до +1 Все версии
R # Временный регистр - PixelShader1xMaxValue в + PixelShader1xMaxValue Все версии
T # Регистр текстуры - MaxTextureRepeat в + MaxTextureRepeat Все версии
V # Регистр цвета От 0 до 1 Все версии

 

Оборудование раннего пиксельного шейдера представляет данные в регистрах с использованием числа фиксированной точки. Это ограничивает точность до приблизительно восьми битов для дробной части числа. Помните об этом при проектировании шейдера.

Для пиксельного шейдера версии от 1_1 до 1_3 maxTextureRepeat должен иметь значение не менее одного. Для 1_4 значение MaxTextureRepeat должно быть не менее восьми.

Дополнительные сведения о PixelShader1xMaxValue см. в разделе D3DCAPS9 .

Регистры