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