[pixel shader] struct apple { float3 aa; int bb; }; float4 main() : sv_target { float f[4] = {1, 2, 3, 4}; struct apple a; a = (struct apple) f; return a.aa.xyzx; } [test] draw quad probe (0, 0) rgba (1.0, 2.0, 3.0, 1.0) [pixel shader] struct apple { float3 aa; int bb; float cc; }; float4 main() : sv_target { struct apple a = {5, 6, 7, 8.8, 9.0}; float f[4]; f = (float[4]) a; return float4(f); } [test] draw quad probe (0, 0) rgba (5.0, 6.0, 7.0, 8.0) [pixel shader] float4 main() : sv_target { float f[6] = {1, 2, 3, 4, 5, 6}; int i[4]; i = (int[4]) f; return float4(i[0], i[1], i[2], i[3]); } [test] draw quad probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0) [pixel shader] Texture2D tex; struct apple { int2 aa; Texture2D bb; float cc; }; struct banana { float aa[2]; Texture2D bb; int cc; }; float4 main() : sv_target { struct apple a = {1, 2, tex, 7.2}; struct banana b; b = (struct banana) a; return b.cc; } [test] draw quad probe (0, 0) rgba (7.0, 7.0, 7.0, 7.0) [pixel shader] Texture2D tex; struct apple { int2 aa; Texture2D bb; float cc; float4 dd; Texture2D ee; }; struct banana { float aa[2]; Texture2D bb; int cc; }; float4 main() : sv_target { struct apple a = {1, 2, tex, 3, 4, 5, 6, 7, tex}; struct banana b; b = (struct banana) a; return b.cc; } [test] draw quad probe (0, 0) rgba (3.0, 3.0, 3.0, 3.0) [pixel shader fail] struct apple { int2 aa; float bb; }; struct banana { int2 aa; float bb; float cc; }; float4 main() : sv_target { struct apple a = {1, 2, 3}; struct banana b; b = (struct banana) a; return b.bb; } [pixel shader] float4 main() : sv_target { float4 v = float4(10.1, 20.2, 30.3, 40.4); int i[3]; i = (int[3]) v; return float4(i[0], i[1], i[2], i[2]); } [test] draw quad probe (0, 0) rgba (10.0, 20.0, 30.0, 30.0) [pixel shader] struct apple { int aa; float bb[2]; }; float4 main() : sv_target { float4 f = {10.4, 11.4, 12.4, 13.4}; struct apple a; a = (struct apple) f; return float4(a.aa, a.aa, a.bb[0], a.bb[1]); } [test] draw quad probe (0, 0) rgba (10.0, 10.0, 11.4, 12.4) [pixel shader] float4 main() : sv_target { float f[5] = {11, 12, 13, 14, 15}; int4 i; i = (int4) f; return i; } [test] draw quad probe (0, 0) rgba (11.0, 12.0, 13.0, 14.0) [pixel shader] struct apple { int2 aa; float bb[2]; float cc; }; float4 main() : sv_target { struct apple a = {21, 22, 23.4, 24.4, 25.0}; int4 i; i = (int4) a; return i; } [test] draw quad probe (0, 0) rgba (21.0, 22.0, 23.0, 24.0) [pixel shader] float4 main() : sv_target { float4 f = {31.4, 32.4, 33.4, 34.4}; int3 i; i = (int3) f; return float4(i.x, i.y, i.z, i.z); } [test] draw quad probe (0, 0) rgba (31.0, 32.0, 33.0, 33.0) [pixel shader] struct apple { int2 aa; float2 bb; }; float4 main() : sv_target { struct apple a = {41, 42, 43, 44}; float2x2 mat; mat = (float2x2) a; return float4(mat); } [test] draw quad probe (0, 0) rgba (41.0, 42.0, 43.0, 44.0) [pixel shader fail(sm<6)] struct apple { float2 aa; float3 bb; }; float4 main() : sv_target { struct apple a = {1, 2, 3, 4, 5}; float2x2 mat; mat = (float2x2) a; return float4(mat); } [pixel shader] struct apple { float3 aa; int bb; }; float4 main() : sv_target { float2x2 mat = {55, 56, 57, 58}; struct apple a; a = (struct apple) mat; return float4(a.aa, a.bb); } [test] draw quad probe (0, 0) rgba (55.0, 56.0, 57.0, 58.0) [pixel shader fail(sm<6)] struct apple { float2 aa; float2 bb; }; float4 main() : sv_target { float3x2 mat = {1, 2, 3, 4, 5, 6}; struct apple a; a = (struct apple) mat; return float4(a.aa, a.bb); } [pixel shader] float4 main() : sv_target { float arr[4] = {61, 62, 63, 64}; int2x2 mat; mat = (int2x2) arr; return float4(mat); } [test] draw quad probe (0, 0) rgba (61.0, 62.0, 63.0, 64.0) [pixel shader fail(sm<6)] float4 main() : sv_target { float arr[5] = {1, 2, 3, 4, 5}; float2x2 mat; mat = (float2x2) arr; return float4(mat); } [pixel shader] float4 main() : sv_target { float2x2 mat = {71, 72, 73, 74}; int arr[4]; arr = (int[4]) mat; return float4(arr); } [test] draw quad probe (0, 0) rgba (71.0, 72.0, 73.0, 74.0) [pixel shader fail(sm<6)] float4 main() : sv_target { float2x2 mat = {1, 2, 3, 4}; int arr[3]; arr = (int[3]) mat; return 0; } [pixel shader fail] float4 main() : sv_target { float2x2 mat = {1, 2, 3, 4}; float3 vec; vec = (float3) mat; return 0; } [pixel shader fail(sm<6)] float4 main() : sv_target { float arr[5] = {1, 2, 3, 4, 5}; float4x1 mat; mat = (float4x1) arr; return 0; } [pixel shader] float4 main() : sv_target { float arr[5] = {81, 82, 83, 84, 85}; int1x4 mat; mat = (int1x4) arr; return float4(mat); } [test] draw quad probe (0, 0) rgba (81.0, 82.0, 83.0, 84.0) [pixel shader] float4 main() : sv_target { float4x1 mat = {91, 92, 93, 94}; int arr[3]; arr = (int[3]) mat; return float4(arr, 0); } [test] draw quad probe (0, 0) rgba (91.0, 92.0, 93.0, 0.0) [pixel shader] float4 main() : sv_target { float1x4 mat = {11, 12, 13, 14}; int arr[3]; arr = (int[3]) mat; return float4(arr, 0); } [test] draw quad probe (0, 0) rgba (11.0, 12.0, 13.0, 0.0) [pixel shader fail(sm<6)] struct apple { float3 aa; float2 bb; }; float4 main() : sv_target { struct apple a = {1, 2, 3, 4, 5}; float4x1 mat; mat = (float4x1) a; return 0; } [pixel shader] struct apple { float3 aa; float2 bb; }; float4 main() : sv_target { struct apple a = {21, 22, 23, 24, 25}; float1x4 mat; mat = (float1x4) a; return float4(mat); } [test] draw quad probe (0, 0) rgba (21.0, 22.0, 23.0, 24.0) [pixel shader] struct apple { int aa; float2 bb; }; float4 main() : sv_target { float4x1 mat = {31, 32, 33, 34}; struct apple a; a = (struct apple) mat; return float4(a.aa, a.bb, 0); } [test] draw quad probe (0, 0) rgba (31.0, 32.0, 33.0, 0.0) [pixel shader] struct apple { int aa; float2 bb; }; float4 main() : sv_target { float1x4 mat = {41, 42, 43, 44}; struct apple a; a = (struct apple) mat; return float4(a.aa, a.bb, 0); } [test] draw quad probe (0, 0) rgba (41.0, 42.0, 43.0, 0.0) [pixel shader] float4 main() : sv_target { float4 vec = {51, 52, 53, 54}; int1x3 mat; mat = (int1x3) vec; return float4(mat, 0); } [test] draw quad probe (0, 0) rgba (51.0, 52.0, 53.0, 0.0) [pixel shader fail(sm<6)] float4 main() : sv_target { float4 vec = {1, 2, 3, 4}; float3x1 mat; mat = (float3x1) vec; return 0; } [pixel shader] float4 main() : sv_target { float1x4 mat = {61, 62, 63, 64}; int3 vec; vec = (int1x3) mat; return float4(vec, 0); } [test] draw quad probe (0, 0) rgba (61.0, 62.0, 63.0, 0.0) [pixel shader] float4 main() : sv_target { float4x1 mat = {71, 72, 73, 74}; int3 vec; vec = (int3) mat; return float4(vec, 0); } [test] draw quad probe (0, 0) rgba (71.0, 72.0, 73.0, 0.0)