Files
vkd3d/tests/hlsl/array-dimension.shader_test
Anna (navi) Figueiredo Gomes 13ee6d74ad vkd3d-shader/hlsl: Store statically initialized constant scalars/vectors in ctx->static_initializers.
Constant numeric local variables can be used in places were literals are
expected if they're initialized with a static expression.

Storing such constant in ctx->static_initializers allows copy-prop to
handle such cases properly.
2025-11-24 17:09:15 +01:00

118 lines
2.2 KiB
Plaintext

% Test what kinds of expressions are valid array dimensions.
[pixel shader]
float4 main() : sv_target
{
const int dim = 4;
float a[2 * 2] = {0.1, 0.2, 0.3, 0.4};
#ifdef __hlsl_dx_compiler
/* float array dimensions are not valid. */
float b[4] = a;
#else
float b[4.1] = a;
#endif
float c[dim] = b;
float d[true] = {c[0]};
float e[65536];
return float4(d[0], c[0], c[1], c[3]);
}
[test]
draw quad
probe (0, 0) f32(0.1, 0.1, 0.2, 0.4)
[pixel shader fail]
float4 fun() { return 0; };
float a[CompileShader(ps_2_0, main())];
float4 main() : sv_target { return 0; }
[pixel shader]
float4 main() : sv_target
{
const uint cap = 4;
const float array[cap] = { 1.0, 2.0, 3.0, 4.0 };
return float4(array[0], array[1], array[2], array[3]);
}
[test]
draw quad
probe (0, 0) f32(1, 2, 3, 4)
[pixel shader fail]
float4 main() : sv_target
{
uint cap = 4;
const float array[cap] = { 1.0, 2.0, 3.0, 4.0 };
return float4(array[0], array[1], array[2], array[3]);
}
[pixel shader fail(sm>=6)]
float4 main() : sv_target
{
const uint4 cap = uint4(2, 4, 1, 0);
const float array[cap.y] = { 1.0, 2.0, 3.0, 4.0 };
return float4(array[0], array[1], array[2], array[3]);
}
[test]
draw quad
probe (0, 0) f32(1, 2, 3, 4)
[pixel shader fail(sm>=6)]
struct nya
{
float a, b;
};
float4 main() : sv_target
{
const nya cap = { 5, 4 };
const float array[cap.b] = { 1.0, 2.0, 3.0, 4.0 };
return float4(array[0], array[1], array[2], array[3]);
}
[test]
draw quad
probe (0, 0) f32(1, 2, 3, 4)
[pixel shader fail(sm>=6)]
float4 main() : sv_target
{
const float cap = 4;
const float array[cap] = { 1.0, 2.0, 3.0, 4.0 };
return float4(array[0], array[1], array[2], array[3]);
}
[test]
draw quad
probe (0, 0) f32(1, 2, 3, 4)
[pixel shader fail]
float foo() { return 4; }
float4 main() : sv_target
{
const float cap = foo();
const float array[cap] = { 1.0, 2.0, 3.0, 4.0 };
return float4(array[0], array[1], array[2], array[3]);
}
[pixel shader fail]
struct nya
{
float a, b;
};
float foo()
{
return 5;
}
float4 main() : sv_target
{
const nya cap = { foo(), 4 };
const float array[cap.b] = { 1.0, 2.0, 3.0, 4.0 };
return float4(array[0], array[1], array[2], array[3]);
}