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


m3x4 — ps

Умножает 3-компонентный вектор на матрицу 3x4.

Синтаксис

m3x4 dst, src0, src1

 

where

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

Комментарии

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

 

Маска xyzw (по умолчанию) требуется для регистра назначения. Модификаторы 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);
dest.w = (src0.x*src4.x) + (src0.y*src4.y) + (src0.z*src4.z);

Входной вектор находится в register src0. Входная матрица 3x4 находится в регистре src1, а следующие два более высоких регистра, как показано в расширении ниже.

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

m3x4   r0.xyzw, r1, c0   will be expanded to: 

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

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