Module: vkd3d Branch: master Commit: 4954c363477c1537cd6974ade72c5b5ac53cb715 URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/4954c363477c1537cd6974ade72c5b...
Author: Zebediah Figura zfigura@codeweavers.com Date: Sat Sep 11 16:07:31 2021 -0500
tests: Add more tests for early return from the entry point.
---
Makefile.am | 2 +- tests/hlsl-return-void.shader_test | 11 -- tests/return.shader_test | 263 +++++++++++++++++++++++++++++++++++++ 3 files changed, 264 insertions(+), 12 deletions(-)
diff --git a/Makefile.am b/Makefile.am index a8f91ca4..959da8f5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -102,7 +102,6 @@ vkd3d_shader_tests = \ tests/hlsl-numeric-types.shader_test \ tests/hlsl-numthreads.shader_test \ tests/hlsl-return-implicit-conversion.shader_test \ - tests/hlsl-return-void.shader_test \ tests/hlsl-shape.shader_test \ tests/hlsl-single-numeric-initializer.shader_test \ tests/hlsl-smoothstep.shader_test \ @@ -130,6 +129,7 @@ vkd3d_shader_tests = \ tests/preproc-invalid.shader_test \ tests/preproc-macro.shader_test \ tests/preproc-misc.shader_test \ + tests/return.shader_test \ tests/round.shader_test \ tests/sampler.shader_test \ tests/sampler-offset.shader_test \ diff --git a/tests/hlsl-return-void.shader_test b/tests/hlsl-return-void.shader_test deleted file mode 100644 index d7231d6c..00000000 --- a/tests/hlsl-return-void.shader_test +++ /dev/null @@ -1,11 +0,0 @@ -[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 -todo probe all rgba (0.1, 0.2, 0.3, 0.4) diff --git a/tests/return.shader_test b/tests/return.shader_test new file mode 100644 index 00000000..e913d15d --- /dev/null +++ b/tests/return.shader_test @@ -0,0 +1,263 @@ +% 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 +todo 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 +todo 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 +todo 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 +todo 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 +todo probe all rgba (0.1, 0.2, 0.3, 0.4) 1 +uniform 0 float 0.5 +draw quad +todo 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 +todo 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] + +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 +draw quad +todo probe all rgba (0.1, 0.1, 0.1, 0.1) 1 + +uniform 0 float 0.1 +draw quad +todo probe all rgba (0.2, 0.2, 0.2, 0.2) 1 + +uniform 0 float 0.3 +draw quad +todo probe all rgba (0.4, 0.4, 0.4, 0.4) 1 + +uniform 0 float 0.7 +draw quad +todo probe all rgba (0.8, 0.8, 0.8, 0.8) 1 + +uniform 0 float 0.9 +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