Module: vkd3d Branch: master Commit: 9d1f9746b78f8307718bc1ae7050f38542f73b62 URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=9d1f9746b78f8307718bc1ae...
Author: Zebediah Figura zfigura@codeweavers.com Date: Thu Sep 9 21:11:32 2021 -0500
tests: Test casts to float.
Signed-off-by: Zebediah Figura zfigura@codeweavers.com Signed-off-by: Matteo Bruni mbruni@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
Makefile.am | 2 ++ tests/cast-to-float.shader_test | 29 +++++++++++++++++++++++++++++ tests/shader_runner_d3d12.c | 29 ++++++++++++++++++++++++++++- 3 files changed, 59 insertions(+), 1 deletion(-)
diff --git a/Makefile.am b/Makefile.am index 05d9f00..d707a26 100644 --- a/Makefile.am +++ b/Makefile.am @@ -54,6 +54,7 @@ vkd3d_shader_runners = \ tests/shader_runner_d3d12
vkd3d_shader_tests = \ + tests/cast-to-float.shader_test \ tests/conditional.shader_test \ tests/hlsl-array-dimension.shader_test \ tests/hlsl-bool-cast.shader_test \ @@ -266,6 +267,7 @@ tests_vkd3d_api_LDADD = libvkd3d.la @VULKAN_LIBS@ tests_vkd3d_shader_api_LDADD = libvkd3d-shader.la SHADER_TEST_LOG_COMPILER = tests/shader_runner_d3d12 XFAIL_TESTS = \ + tests/cast-to-float.shader_test \ tests/conditional.shader_test \ tests/hlsl-array-dimension.shader_test \ tests/hlsl-bool-cast.shader_test \ diff --git a/tests/cast-to-float.shader_test b/tests/cast-to-float.shader_test new file mode 100644 index 0000000..75822e5 --- /dev/null +++ b/tests/cast-to-float.shader_test @@ -0,0 +1,29 @@ +[pixel shader] + +float4 main(uniform int i, uniform uint u, uniform bool b, uniform half h) : sv_target +{ + return float4(((float)i) + 1.5, ((float)u) - 2.5, ((float)b) / 2, h); +} + +[test] +uniform 0 int -1 +uniform 1 uint 3 +uniform 2 int -2 +uniform 3 float 0.5 +draw quad +probe all rgba (0.5, 0.5, 0.5, 0.5) + +[pixel shader] + +float4 main() : sv_target +{ + int i = -1; + uint u = 3; + bool b = true; + half h = 0.5; + return float4(((float)i) + 1.5, ((float)u) - 2.5, ((float)b) / 2, h); +} + +[test] +draw quad +probe all rgba (0.5, 0.5, 0.5, 0.5) diff --git a/tests/shader_runner_d3d12.c b/tests/shader_runner_d3d12.c index 2221c0f..d5c0380 100644 --- a/tests/shader_runner_d3d12.c +++ b/tests/shader_runner_d3d12.c @@ -242,11 +242,38 @@ static void parse_test_directive(struct shader_context *context, const char *lin } memcpy(context->uniforms + offset, &v, sizeof(v)); } + else if (match_string(line, "float", &line)) + { + float f; + + if (sscanf(line, "%f", &f) < 1) + goto err; + if (offset + 1 > context->uniform_count) + { + context->uniform_count = offset + 1; + context->uniforms = realloc(context->uniforms, context->uniform_count * sizeof(*context->uniforms)); + } + memcpy(context->uniforms + offset, &f, sizeof(f)); + } + else if (match_string(line, "int", &line)) + { + int i; + + if (sscanf(line, "%i", &i) < 1) + goto err; + if (offset + 1 > context->uniform_count) + { + context->uniform_count = offset + 1; + context->uniforms = realloc(context->uniforms, context->uniform_count * sizeof(*context->uniforms)); + } + memcpy(context->uniforms + offset, &i, sizeof(i)); + } else if (match_string(line, "uint", &line)) { unsigned int u;
- sscanf(line, "%u", &u); + if (sscanf(line, "%u", &u) < 1) + goto err; if (offset + 1 > context->uniform_count) { context->uniform_count = offset + 1;