[PATCH vkd3d 1/7] tests: Test casts to float.

Zebediah Figura zfigura at codeweavers.com
Wed Sep 8 23:01:35 CDT 2021


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 Makefile.am                     |  2 ++
 tests/cast-to-float.shader_test | 29 +++++++++++++++++++++++++++++
 tests/shader_runner_d3d12.c     | 33 ++++++++++++++++++++++++++++++---
 3 files changed, 61 insertions(+), 3 deletions(-)
 create mode 100644 tests/cast-to-float.shader_test

diff --git a/Makefile.am b/Makefile.am
index 05d9f00c6..d707a26b3 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 000000000..75822e527
--- /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 2221c0f87..86151e424 100644
--- a/tests/shader_runner_d3d12.c
+++ b/tests/shader_runner_d3d12.c
@@ -109,7 +109,7 @@ enum parse_state
     STATE_TEST,
 };
 
-static bool match_string(const char *line, const char *token, const char **const rest)
+static bool match_string(char *line, const char *token, char **const rest)
 {
     size_t len = strlen(token);
 
@@ -124,7 +124,7 @@ static bool match_string(const char *line, const char *token, const char **const
     return true;
 }
 
-static void parse_test_directive(struct shader_context *context, const char *line)
+static void parse_test_directive(struct shader_context *context, char *line)
 {
     const char *const orig_line = line;
 
@@ -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 (!(f = strtof(line, &line)) && !line)
+                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 (!(i = strtol(line, &line, 0)))
+                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 (!(u = strtoul(line, &line, 0)))
+                goto err;
             if (offset + 1 > context->uniform_count)
             {
                 context->uniform_count = offset + 1;
-- 
2.33.0




More information about the wine-devel mailing list