Search code examples
directxhlsl

Mul function in HLSL: Which one should be the first parameter? the Vector or the Matrix?


I am learning HLSL shading, and in my vertex shader, I have code like this:

VS_OUTPUT vs_main(    
    float4 inPos: POSITION, 
    float2 Txr1: TEXCOORD0 )
{
    VS_OUTPUT Output;

   Output.Position = mul( inPos, matViewProjection);
   Output.Tex1 = Txr1;

   return( Output );

}

It works fine. But when I was typing codes from the book, the code was like this:

VS_OUTPUT vs_main(    
    float4 inPos: POSITION, 
    float2 Txr1: TEXCOORD0 )
{
    VS_OUTPUT Output;

   Output.Position = mul( matViewProjection, inPos );
   Output.Tex1 = Txr1;

   return( Output );

}

At first I thought maybe the order does not matter. However, when I exchanged the parameters in the mul function in my code, it does not work. I don't know why.

BTW, I am using RenderMonkey.


Solution

  • Not sure if this is caused by matrix order (row major or column major), take a look at Type modifier and mul function

    Updated:

    I have test this in my project, use the keyword row_major make the second case work.

    row_major matrix matViewProjection
    mul(matViewProjection, inPos);