m3x3 — ps

Умножает вектор из 3 компонентов на матрицу 3x3.

Синтаксис

m3x3 dst, src0, src1

 

where

  • dst — регистр назначения. Результатом является вектор из 3 компонентов.
  • src0 — это регистр источника, представляющий вектор из 3 компонентов.
  • src1 — это исходный регистр, представляющий матрицу 3x3, которая соответствует первому из трех последовательных регистров.

Комментарии

Версии шейдера пикселей 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
m3x3 x x x x x

 

Маска xyz является обязательной для регистра назначения. Модификаторы negate и swizzle разрешены для src0, но не для src1.

В следующем фрагменте кода показаны выполненные операции.

dest.x = (src0.x * src1.x) + (src0.y * src1.y) + (src0.z * src1.z);
dest.y = (src0.x * src2.x) + (src0.y * src2.y) + (src0.z * src2.z);
dest.z = (src0.x * src3.x) + (src0.y * src3.y) + (src0.z * src3.z);

Входной вектор находится в регистре src0. Входная матрица 3x3 находится в регистре src1, а следующие два более высоких регистра, как показано в расширении ниже. Создается трехмерный результат, в результате чего другой элемент целевого регистра (dest.w) не затрагивается.

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

m3x3 r0.xyz, r1, c0  which will be expanded to:

dp3   r0.x, r1, c0
dp3   r0.y, r1, c1
dp3   r0.z, r1, c2

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