Can anyone explain the below behavior?
having:
D3D11_INPUT_ELEMENT_DESC _desc[] = {
{"VERT_COORD", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"WVP", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1},
{"WVP", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1},
{"WVP", 2, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1},
{"WVP", 3, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1},
};
when I:
// (vertex shader)
float4 main(float4 _vert : VERT_COORD, float4x4 _wvp : WVP) : SV_Position {...}
"_wvp" matrix is transposed (I do it on the CPU side). But if I:
// (vertex shader)
float4 main(float4 _vert : VERT_COORD, float4 _wvp0 : WVP0, float4 _wvp1 : WVP1, float4 _wvp2 : WVP2, float4 _wvp3 : WVP3) : SV_Position {
float4x4 _wvp = float4x4(_wvp0, _wvp1, _wvp2, _wvp3);
// or
float4x4 _wvp = float4x4(
_wvp0.x, _wvp0.y, _wvp0.z, _wvp0.w,
_wvp1.x, _wvp1.y, _wvp1.z, _wvp1.w,
_wvp2.x, _wvp2.y, _wvp2.z, _wvp2.w,
_wvp3.x, _wvp3.y, _wvp3.z, _wvp3.w
);
...
}
"_wvp" is now not transposed.