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


Модификаторы для ps_1_X

Модификаторы инструкций влияют на результат инструкции перед записью в регистр назначения. Например, используйте их для умножения или деления результата на коэффициент 2 или для закрепления результата от нуля до единицы. Модификаторы инструкций применяются после выполнения инструкций, но перед записью результата в регистр назначения.

Ниже приведен список модификаторов.

Модификатор Описание Синтаксис Версия 1_1 Версия 1_2 Версия 1_3 Версия 1_4
_x2 Умножение на 2 instruction_x2 X X X X
_x4 Умножение на 4 instruction_x4 X X X X
_x8 Умножение на 8 instruction_x8 X
_d2 Деление на 2 instruction_d2 X X X X
_d4 Деление на 4 instruction_d4 X
_d8 Деление на 8 instruction_d8 X
_Сидел Насыщенное (зажим от 0 и 1) instruction_sat X X X X

 

  • Модификатор умножения умножает данные регистра на два числа после их считывания. Это то же самое, что и сдвиг влево.
  • Модификатор деления делит данные регистра на два после их считывания. Это то же самое, что и сдвиг вправо.
  • Модификатор насыщенности зажимает диапазон значений регистра от нуля до единицы.

Модификаторы инструкций можно использовать в арифметических инструкциях. Они не могут использоваться в инструкциях по адресу текстуры.

Модификатор умножения

В этом примере загружается целевой регистр (dest) с суммой двух цветов в исходных операндах (src0 и src1) и умножается результат на два.

add_x2 dest, src0, src1

В этом примере объединяются два модификатора инструкций. Сначала добавляются два цвета в исходных операндах (src0 и src1). Затем результат умножается на два и зажимается в диапазоне от 0,0 до 1,0 для каждого компонента. Результат сохраняется в регистре назначения.

add_x2_sat dest, src0, src1

Модификатор деления

В этом примере загружается регистр назначения (dest) с суммой двух цветов в исходных операндах (src0 и src1) и результат делится на два.

add_d2 dest, src0, src1

Модификатор насыщенности

Для арифметических инструкций модификатор насыщенности зажимает результат этой инструкции в диапазоне от 0,0 до 1,0 для каждого компонента. В следующем примере показано, как использовать этот модификатор инструкций.

dp3_sat r0, t0_bx2, v0_bx2    ; t0 is bump, v0 is light direction

Эта операция выполняется после любого модификатора инструкций умножения или деления. _sat чаще всего используется для закрепления точечных результатов продукта. Однако она также обеспечивает согласованную эмуляцию многопроходных методов, где буфер кадра всегда находится в диапазоне от 0 до 1, а также многотекстовый синтаксис DirectX 6 и 7.0, в котором насыщенность определяется на каждом этапе.

В этом примере загружается целевой регистр (dest) с суммой двух цветов в исходных операндах (src0 и src1) и фиксируется результат в диапазоне от 0,0 до 1,0 для каждого компонента.

add_sat dest, src0, src1

В этом примере объединяются два модификатора инструкций. Сначала добавляются два цвета в исходных операндах (src0 и src1). Результат умножается на два и зажимается от 0,0 до 1,0 для каждого компонента. Результат сохраняется в регистре назначения.

add_x2_sat dest, src0, src1

Инструкции по шейдеру пикселей