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


Временный регистр (справочник по HLSL VS)

Временный регистр вершинного шейдера используется для хранения промежуточных результатов.

Перед использованием временного регистра необходимо инициализировать. Каждый временный регистр имеет доступ с одной записью и тройным доступом на чтение. Это означает, что одна инструкция шейдера может использовать до трех временных регистров в качестве входных данных.

Значения во временном регистре, оставшиеся от предыдущих вызовов вершинного шейдера, использовать нельзя.

Регистр состоит из свойств, определяющих поведение каждого регистра.

Свойство Описание
Имя r[n]. n — необязательный регистрационный номер. Значение по умолчанию равно 0, а — значение, используемое, если значение не указано.
Count Не более 12 регистров.
Разрешения ввода-вывода Read/write. Этот регистр можно считать или записать с помощью API или шейдера.
Порты чтения Число операций чтения регистра в одной инструкции равно 3. Временный регистр — это единственный регистр, который можно прочитать и записать несколько раз в одной инструкции.

 

Каждый временный регистр имеет доступ с одной записью и тройным доступом на чтение. Таким образом, инструкция может содержать до трех временных регистров в наборе операндов источника входных данных.

Во временном регистре не могут использоваться значения, оставшиеся от предыдущих вызовов вершинного шейдера. Вершинные шейдеры, которые считывают значение из временного регистра перед записью в него, не смогут вызвать API Direct3D для создания вершинного шейдера.

Пример

Ниже приведен пример использования временного регистра:

def c4, 0,0,0,1
...
// Decompress position
mov r0.x, v0.x
mov r0.y, c4.w       // 1
mov r0.z, v0.y
mov r0.w, c4.w       // 1

// Compute theta from distance and time
mov r4.xz, r0        // xz
Версии вершинного шейдера 1_1 2_0 2_sw 2_x 3_0 3_sw
Временная регистрация x x x x x x

 

Регистры вершинного шейдера