vkd3d/tests/return.shader_test
Zebediah Figura 6177cea31f vkd3d-shader/hlsl: Emit a hlsl_fixme() for unhandled instruction types when writing bytecode.
This was originally left alone in order to allow functions without early return
to succeed, since in that case we would already emit the correct bytecode
despite not handling the HLSL_IR_JUMP_RETURN instruction.

Now that we lower return statements, however, any unhandled instructions are
either definitely going to result in invalid bytecode, or rare enough that it's
not worth returning success anyway.
2023-02-13 22:16:52 +01:00

264 lines
4.1 KiB
Plaintext

% Test early return from the entry point.
[pixel shader]
float4 main() : sv_target
{
return float4(0.1, 0.2, 0.3, 0.4);
return float4(0.5, 0.6, 0.7, 0.8);
}
[test]
draw quad
probe all rgba (0.1, 0.2, 0.3, 0.4)
[pixel shader]
void main(out float4 ret : sv_target)
{
ret = float4(0.1, 0.2, 0.3, 0.4);
return;
ret = float4(0.5, 0.6, 0.7, 0.8);
}
[test]
draw quad
probe all rgba (0.1, 0.2, 0.3, 0.4)
[pixel shader]
uniform float f;
float4 main() : sv_target
{
if (f < 0.5)
return float4(0.1, 0.2, 0.3, 0.4);
return float4(0.5, 0.6, 0.7, 0.8);
}
[test]
uniform 0 float 0.2
draw quad
probe all rgba (0.1, 0.2, 0.3, 0.4)
uniform 0 float 0.8
draw quad
probe all rgba (0.5, 0.6, 0.7, 0.8)
[pixel shader]
uniform float f;
void main(out float4 ret : sv_target)
{
ret = float4(0.1, 0.2, 0.3, 0.4);
if (f < 0.5)
{
ret += 0.1;
}
else
{
return;
ret += 0.3;
}
ret += 0.1;
}
[test]
uniform 0 float 0.2
draw quad
probe all rgba (0.3, 0.4, 0.5, 0.6)
uniform 0 float 0.8
draw quad
probe all rgba (0.1, 0.2, 0.3, 0.4)
[pixel shader]
uniform float f;
void main(out float4 ret : sv_target)
{
ret = float4(0.1, 0.2, 0.3, 0.4);
if (f < 0.3)
{
return;
}
ret += 0.1;
if (f < 0.7)
{
return;
}
ret += 0.3;
}
[test]
uniform 0 float 0.1
draw quad
probe all rgba (0.1, 0.2, 0.3, 0.4) 1
uniform 0 float 0.5
draw quad
probe all rgba (0.2, 0.3, 0.4, 0.5) 1
uniform 0 float 0.9
draw quad
probe all rgba (0.5, 0.6, 0.7, 0.8) 1
[pixel shader]
uniform float f;
void main(out float4 ret : sv_target)
{
ret = float4(0.1, 0.2, 0.3, 0.4);
if (f < 0.7)
{
if (f < 0.3)
return;
ret += 0.1;
}
ret += 0.3;
}
[test]
uniform 0 float 0.1
draw quad
probe all rgba (0.1, 0.2, 0.3, 0.4) 1
uniform 0 float 0.5
draw quad
probe all rgba (0.5, 0.6, 0.7, 0.8) 1
uniform 0 float 0.9
draw quad
probe all rgba (0.4, 0.5, 0.6, 0.7) 1
[pixel shader todo]
void main(out float4 ret : sv_target)
{
ret = float4(0.1, 0.2, 0.3, 0.4);
for (;;)
{
ret *= 2;
return;
ret *= 3;
}
ret += 0.1;
}
[test]
todo draw quad
todo probe all rgba (0.2, 0.4, 0.6, 0.8)
[pixel shader todo]
uniform float f;
void main(out float4 ret : sv_target)
{
int i;
ret = 0.1;
for (i = 0; i < 4; ++i)
{
if (ret.x > f)
return;
ret *= 2;
}
ret = 0.9;
}
[test]
uniform 0 float 0.0
todo draw quad
todo probe all rgba (0.1, 0.1, 0.1, 0.1) 1
uniform 0 float 0.1
todo draw quad
todo probe all rgba (0.2, 0.2, 0.2, 0.2) 1
uniform 0 float 0.3
todo draw quad
todo probe all rgba (0.4, 0.4, 0.4, 0.4) 1
uniform 0 float 0.7
todo draw quad
todo probe all rgba (0.8, 0.8, 0.8, 0.8) 1
uniform 0 float 0.9
todo draw quad
todo probe all rgba (0.9, 0.9, 0.9, 0.9) 1
[pixel shader todo]
uniform float f;
void main(out float4 ret : sv_target)
{
if (f < 0.5)
{
ret = 0.1;
for (;;)
{
ret *= 2;
return;
}
ret *= 3;
return;
}
else
{
ret = 0.4;
}
ret = 0.5;
}
[test]
uniform 0 float 0.2
todo draw quad
todo probe all rgba (0.2, 0.2, 0.2, 0.2)
uniform 0 float 0.8
todo draw quad
todo probe all rgba (0.5, 0.5, 0.5, 0.5)
[pixel shader todo]
uniform float4 f[3];
void main(out float4 ret : sv_target)
{
int i, j;
ret = 0.1;
for (i = 0; i < 3; ++i)
{
for (j = 0; j < 3; ++j)
{
if (ret.x > f[j].x)
return;
}
ret *= 2;
}
ret = 0.9;
}
[test]
uniform 0 float4 0.3 0.0 0.0 0.0
uniform 4 float4 0.0 0.0 0.0 0.0
uniform 8 float4 0.1 0.0 0.0 0.0
todo draw quad
todo probe all rgba (0.1, 0.1, 0.1, 0.1) 1
uniform 4 float4 0.35 0.0 0.0 0.0
todo draw quad
todo probe all rgba (0.2, 0.2, 0.2, 0.2) 1
uniform 8 float4 0.5 0.0 0.0 0.0
todo draw quad
todo probe all rgba (0.4, 0.4, 0.4, 0.4) 1
uniform 0 float4 1.0 0.0 0.0 0.0
todo draw quad
todo probe all rgba (0.4, 0.4, 0.4, 0.4) 1
uniform 4 float4 2.0 0.0 0.0 0.0
todo draw quad
todo probe all rgba (0.9, 0.9, 0.9, 0.9) 1