[pixel shader] float fun(float a[2]) { return 10 * a[0] + a[1]; } float4 main() : sv_target { float f[2] = {0.02, 0.05}; return fun(f); } [test] draw quad probe (0, 0) rgba (0.25, 0.25, 0.25, 0.25) 1 [pixel shader fail] float fun(float a[2]) { return 0; } float4 main() : sv_target { int f[2] = {2, 5}; return fun(f); } [pixel shader fail] float fun(float a[1]) { return 0; } float4 main() : sv_target { float f = 4; return fun(f); } [pixel shader fail] float fun(int a[2]) { return 0; } float4 main() : sv_target { float f[2] = {1, 2}; return fun(f); } [pixel shader] float4 fun(float a[2][4]) { float4 res; res.x = 0.1 * a[0][0] + 0.01 * a[1][0]; res.y = 0.1 * a[0][1] + 0.01 * a[1][1]; res.z = 0.1 * a[0][2] + 0.01 * a[1][2]; res.w = 0.1 * a[0][3] + 0.01 * a[1][3]; return res; } float4 main() : sv_target { float f[2][4] = {1, 2, 3, 4, 5, 6, 7, 8}; return fun(f); } [test] draw quad probe (0, 0) rgba (0.15, 0.26, 0.37, 0.48) 1 [pixel shader fail] float fun(float a[2]) { return a[2]; // out of bounds. } float4 main() : sv_target { float f[2] = {1, 2}; return fun(f); } [pixel shader fail] float fun(float a[2]) { return 0; } float4 main() : sv_target { float f[3] = {1, 2, 3}; return fun(f); } % Implicit size arrays are not allowed. [pixel shader fail(sm<6)] float fun(float a[]) { return 0; } float4 main() : sv_target { float f[2] = {1, 2}; return fun(f); } [pixel shader fail] float4 fun(float a[4]) { return 0; } float4 main() : sv_target { float4 v = {1, 2, 3, 4}; return fun(v); } % Arrays with the same number of components are allowed. [pixel shader] float fun(float a[2][3]) { return 0.1*a[0][0] + 0.01*a[0][2] + 0.001*a[1][2]; } float4 main() : sv_target { float f[3][2] = {1, 2, 3, 4, 5, 6}; return fun(f); } [test] draw quad probe (0, 0) rgba (0.136, 0.136, 0.136, 0.136) 1 [pixel shader] float fun(float a[2][3]) { return 0.1*a[0][0] + 0.01*a[1][0] + 0.001*a[1][2]; } float4 main() : sv_target { float f[6] = {7, 8, 9, 0, 1, 2}; return fun(f); } [test] draw quad probe (0, 0) rgba (0.702, 0.702, 0.702, 0.702) 1