vkd3d/tests/object-references.shader_test
Francisco Casas 6989266e76 vkd3d-shader/hlsl: Check for non-static object references.
It is responsibility of the shader's programmer to ensure that
object references can be solved statically.

Resource arrays for ps_5_1 and vs_5_1 are an exception which is not
properly handled yet. They probably deserve a different object type.

Signed-off-by: Francisco Casas <fcasas@codeweavers.com>
2022-08-23 15:57:54 -05:00

121 lines
1.8 KiB
Plaintext

[require]
shader model >= 4.0
[texture 0]
size (2, 2)
0.1 0.2 0.3 0.4 0.5 0.7 0.6 0.8
0.6 0.5 0.2 0.1 0.8 0.0 0.7 1.0
[pixel shader]
Texture2D t;
struct foo {
int3 a;
Texture2D b;
};
float4 main(float4 pos : sv_position) : sv_target
{
struct foo q;
q.a = int3(pos.xy, 0);
q.b = t;
return q.b.Load(q.a);
}
[test]
draw quad
probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4)
probe (1, 0) rgba (0.5, 0.7, 0.6, 0.8)
probe (0, 1) rgba (0.6, 0.5, 0.2, 0.1)
probe (1, 1) rgba (0.8, 0.0, 0.7, 1.0)
[texture 0]
size (1, 1)
1.0 1.0 1.0 1.0
[texture 1]
size (1, 1)
2.0 2.0 2.0 1.0
[texture 2]
size (1, 1)
3.0 3.0 3.0 1.0
[pixel shader]
Texture2D tex[3];
struct foo {
float4 p;
Texture2D t;
};
float4 main() : sv_target
{
struct foo s[3];
s[0].t = tex[0];
s[1].t = tex[1];
s[2].t = tex[2];
return 100 * s[2].t.Load(0) + 10 * s[0].t.Load(0) + s[1].t.Load(0);
}
[test]
todo draw quad
todo probe all rgba (312, 312, 312, 111)
[pixel shader]
Texture2D tex1;
Texture2D tex2;
Texture2D tex3;
float4 main() : sv_target
{
Texture2D t[3][2];
t[0][0] = tex1; // Note: Only invalid in shader model 5.1, array ref. cannot be used as l-value.
t[0][1] = tex2;
t[1][0] = tex3;
t[1][1] = tex1;
t[2][0] = tex2;
t[2][1] = tex3;
return 1000 * t[2][0].Load(0) + 100 * t[1][1].Load(0) + 10 * t[2][1].Load(0) + t[0][1].Load(0);
}
[test]
draw quad
probe all rgba (2132, 2132, 2132, 1111)
[pixel shader fail]
Texture2D tex[3];
uniform int n;
struct foo {
float4 p;
Texture2D t;
};
float4 main() : sv_target
{
struct foo s[3];
s[0].t = tex[0];
s[1].t = tex[1];
s[2].t = tex[2];
return s[n].t.Load(0);
}
[pixel shader fail]
// Note: Only valid in shader model 5.1
Texture2D tex[3];
uniform int n;
float4 main() : sv_target
{
return tex[n].Load(0);
}