Модификаторы для 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
Связанные темы