[pixel shader] uniform float4x4 m; float4 main() : SV_TARGET { return float4(m[0][0], m[1][0], m[1][2], m[2][3]); } [test] uniform 0 float4 1.0 2.0 3.0 4.0 uniform 4 float4 5.0 6.0 7.0 8.0 uniform 8 float4 9.0 10.0 11.0 12.0 uniform 12 float4 13.0 14.0 15.0 16.0 todo(glsl) draw quad probe (0, 0) rgba (1.0, 2.0, 10.0, 15.0) [pixel shader] uniform column_major float4x4 m; float4 main() : SV_TARGET { return float4(m[0][0], m[1][0], m[1][2], m[2][3]); } [test] uniform 0 float4 1.0 2.0 3.0 4.0 uniform 4 float4 5.0 6.0 7.0 8.0 uniform 8 float4 9.0 10.0 11.0 12.0 uniform 12 float4 13.0 14.0 15.0 16.0 todo(glsl) draw quad probe (0, 0) rgba (1.0, 2.0, 10.0, 15.0) [pixel shader] uniform row_major float4x4 m; float4 main() : SV_TARGET { return float4(m[0][0], m[1][0], m[1][2], m[2][3]); } [test] uniform 0 float4 1.0 2.0 3.0 4.0 uniform 4 float4 5.0 6.0 7.0 8.0 uniform 8 float4 9.0 10.0 11.0 12.0 uniform 12 float4 13.0 14.0 15.0 16.0 todo(glsl) draw quad probe (0, 0) rgba (1.0, 5.0, 7.0, 12.0) [pixel shader] uniform float3x2 m; float4 main() : SV_TARGET { float3x2 m2 = m; return float4(m2[0][0], m2[2][0], m2[1][1], m2[2][1]); } [test] uniform 0 float4 1.0 2.0 3.0 0.0 uniform 4 float4 5.0 6.0 7.0 0.0 todo(glsl) draw quad probe (0, 0) rgba (1.0, 3.0, 6.0, 7.0) [pixel shader] float4 main() : SV_TARGET { float2x2 a = float2x2(11.0, 12.0, 13.0, 14.0); float4x4 m = float4x4(1.0, 2.0, 3.0, 4.0, float3(5.0, 6.0, 7.0), 8.0, 9.0, 10.0, a, 15.0, 16.0); return float4(m[0][0], m[1][0], m[1][2], m[2][3]); } [test] todo(glsl) draw quad probe (0, 0) rgba (1.0, 5.0, 7.0, 12.0) [pixel shader] float4 main() : SV_TARGET { float3x2 m = {1, 2, 3, 4, 5, 6}; m[1] = float2(30, 40); return float4(m[1], m[2]); } [test] todo(glsl) draw quad probe (0, 0) rgba (30.0, 40.0, 5.0, 6.0) [pixel shader] float4 main() : SV_TARGET { row_major float3x2 m = {1, 2, 3, 4, 5, 6}; m[2] = float2(50, 60); return float4(m[1], m[2]); } [test] todo(glsl) draw quad probe (0, 0) rgba (3.0, 4.0, 50.0, 60.0) [pixel shader todo(sm<4)] uniform float i; float4 main() : sv_target { float4x4 mat = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; return mat[i]; } [test] uniform 0 float 2 todo(sm<4 | glsl) draw quad probe (0, 0) rgba (8, 9, 10, 11) [pixel shader todo(sm<4)] uniform float i; float4 main() : sv_target { row_major float4x4 mat = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; return mat[i]; } [test] uniform 0 float 3 todo(sm<4 | glsl) draw quad probe (0, 0) rgba (12, 13, 14, 15)