[PATCH vkd3d v2 5/7] tests: Return a failure code if unable to parse a shader_test file.

Zebediah Figura zfigura at codeweavers.com
Tue Nov 2 16:31:28 CDT 2021


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 include/private/vkd3d_common.h |  2 +
 tests/shader_runner_d3d12.c    | 70 +++++++++++++++-------------------
 2 files changed, 33 insertions(+), 39 deletions(-)

diff --git a/include/private/vkd3d_common.h b/include/private/vkd3d_common.h
index 18cc3cab2..482cabf96 100644
--- a/include/private/vkd3d_common.h
+++ b/include/private/vkd3d_common.h
@@ -48,6 +48,7 @@ static inline size_t align(size_t addr, size_t alignment)
 }
 
 #ifdef __GNUC__
+# define VKD3D_NORETURN __attribute__((noreturn))
 # if defined(__MINGW32__) && (defined(_UCRT) || __USE_MINGW_ANSI_STDIO)
 #  define VKD3D_PRINTF_FUNC(fmt, args) __attribute__((format(gnu_printf, fmt, args)))
 # else
@@ -55,6 +56,7 @@ static inline size_t align(size_t addr, size_t alignment)
 # endif
 # define VKD3D_UNUSED __attribute__((unused))
 #else
+# define VKD3D_NORETURN
 # define VKD3D_PRINTF_FUNC(fmt, args)
 # define VKD3D_UNUSED
 #endif  /* __GNUC__ */
diff --git a/tests/shader_runner_d3d12.c b/tests/shader_runner_d3d12.c
index d52382978..169271242 100644
--- a/tests/shader_runner_d3d12.c
+++ b/tests/shader_runner_d3d12.c
@@ -45,6 +45,16 @@
 #include "d3d12_crosstest.h"
 #include <errno.h>
 
+static void VKD3D_NORETURN VKD3D_PRINTF_FUNC(1, 2) fatal_error(const char *format, ...)
+{
+    va_list args;
+
+    va_start(args, format);
+    vfprintf(stderr, format, args);
+    va_end(args);
+    exit(1);
+}
+
 static bool vkd3d_array_reserve(void **elements, size_t *capacity, size_t element_count, size_t element_size)
 {
     size_t new_capacity, max_capacity;
@@ -201,10 +211,7 @@ static void parse_texture_format(struct texture *texture, const char *line)
         }
     }
 
-    fprintf(stderr, "Unknown format '%s'.\n", line);
-    texture->format = DXGI_FORMAT_R32G32B32A32_FLOAT;
-    texture->data_type = TEXTURE_DATA_FLOAT;
-    texture->texel_size = 16;
+    fatal_error("Unknown format '%s'.\n", line);
 }
 
 static D3D12_TEXTURE_ADDRESS_MODE parse_sampler_address_mode(const char *line, const char **rest)
@@ -219,14 +226,12 @@ static D3D12_TEXTURE_ADDRESS_MODE parse_sampler_address_mode(const char *line, c
         return D3D12_TEXTURE_ADDRESS_MODE_MIRROR;
     if (match_string(line, "wrap", rest))
         return D3D12_TEXTURE_ADDRESS_MODE_WRAP;
-    fprintf(stderr, "Malformed address mode '%s'.\n", line);
-    return D3D12_TEXTURE_ADDRESS_MODE_WRAP;
+
+    fatal_error("Unknown sampler address mode '%s'.\n", line);
 }
 
 static void parse_sampler_directive(struct sampler *sampler, const char *line)
 {
-    const char *const orig_line = line;
-
     if (match_string(line, "address", &line))
     {
         sampler->u_address = parse_sampler_address_mode(line, &line);
@@ -256,23 +261,22 @@ static void parse_sampler_directive(struct sampler *sampler, const char *line)
         for (i = 0; i < ARRAY_SIZE(filters); ++i)
         {
             if (match_string(line, filters[i].string, &line))
+            {
                 sampler->filter = filters[i].filter;
+                return;
+            }
         }
+
+        fatal_error("Unknown sampler filter '%s'.\n", line);
     }
     else
     {
-        goto err;
+        fatal_error("Unknown sampler directive '%s'.\n", line);
     }
-
-    return;
-
-err:
-    fprintf(stderr, "Ignoring malformed line '%s'.\n", orig_line);
 }
 
 static void parse_texture_directive(struct texture *texture, const char *line)
 {
-    const char *const orig_line = line;
     int ret;
 
     if (match_string(line, "format", &line))
@@ -283,7 +287,7 @@ static void parse_texture_directive(struct texture *texture, const char *line)
     {
         ret = sscanf(line, "( %u , %u )", &texture->width, &texture->height);
         if (ret < 2)
-            goto err;
+            fatal_error("Malformed texture size '%s'.\n", line);
     }
     else
     {
@@ -323,17 +327,10 @@ static void parse_texture_directive(struct texture *texture, const char *line)
             line = rest;
         }
     }
-
-    return;
-
-err:
-    fprintf(stderr, "Ignoring malformed line '%s'.\n", orig_line);
 }
 
 static void parse_test_directive(struct shader_context *context, const char *line)
 {
-    const char *const orig_line = line;
-
     if (match_string(line, "draw quad", &line))
     {
         D3D12_SHADER_BYTECODE ps
@@ -454,7 +451,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
 
         ret = sscanf(line, "( %f , %f , %f , %f ) %u", &v.x, &v.y, &v.z, &v.w, &ulps);
         if (ret < 4)
-            goto err;
+            fatal_error("Malformed probe arguments '%s'.\n", line);
         if (ret < 5)
             ulps = 0;
         check_sub_resource_vec4(context->c.render_target, 0, context->c.queue, context->c.list, &v, ulps);
@@ -471,7 +468,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
         ret = sscanf(line, "( %u , %u , %u , %u ) ( %f , %f , %f , %f ) %u",
                      &x, &y, &w, &h, &v.x, &v.y, &v.z, &v.w, &ulps);
         if (ret < 8)
-            goto err;
+            fatal_error("Malformed probe arguments '%s'.\n", line);
         if (ret < 9)
             ulps = 0;
 
@@ -494,7 +491,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
 
         ret = sscanf(line, "( %u , %u ) ( %f , %f , %f , %f ) %u", &x, &y, &v.x, &v.y, &v.z, &v.w, &ulps);
         if (ret < 6)
-            goto err;
+            fatal_error("Malformed probe arguments '%s'.\n", line);
         if (ret < 7)
             ulps = 0;
 
@@ -512,7 +509,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
         unsigned int offset;
 
         if (!sscanf(line, "%u", &offset))
-            goto err;
+            fatal_error("Unknown uniform type '%s'.\n", line);
         line = strchr(line, ' ') + 1;
 
         if (match_string(line, "float4", &line))
@@ -520,7 +517,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
             struct vec4 v;
 
             if (sscanf(line, "%f %f %f %f", &v.x, &v.y, &v.z, &v.w) < 4)
-                goto err;
+                fatal_error("Malformed float4 constant '%s'.\n", line);
             if (offset + 4 > context->uniform_count)
             {
                 context->uniform_count = offset + 4;
@@ -533,7 +530,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
             float f;
 
             if (sscanf(line, "%f", &f) < 1)
-                goto err;
+                fatal_error("Malformed float constant '%s'.\n", line);
             if (offset + 1 > context->uniform_count)
             {
                 context->uniform_count = offset + 1;
@@ -546,7 +543,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
             int i;
 
             if (sscanf(line, "%i", &i) < 1)
-                goto err;
+                fatal_error("Malformed int constant '%s'.\n", line);
             if (offset + 1 > context->uniform_count)
             {
                 context->uniform_count = offset + 1;
@@ -559,7 +556,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
             unsigned int u;
 
             if (sscanf(line, "%u", &u) < 1)
-                goto err;
+                fatal_error("Malformed uint constant '%s'.\n", line);
             if (offset + 1 > context->uniform_count)
             {
                 context->uniform_count = offset + 1;
@@ -570,13 +567,8 @@ static void parse_test_directive(struct shader_context *context, const char *lin
     }
     else
     {
-        goto err;
+        fatal_error("Unknown test directive '%s'.\n", line);
     }
-
-    return;
-
-err:
-    fprintf(stderr, "Ignoring malformed line '%s'.\n", orig_line);
 }
 
 static struct sampler *get_sampler(struct shader_context *context, unsigned int slot)
@@ -651,7 +643,7 @@ START_TEST(shader_runner_d3d12)
 
     if (!(f = fopen(filename, "r")))
     {
-        fprintf(stderr, "Unable to open '%s' for reading: %s\n", argv[1], strerror(errno));
+        fatal_error("Unable to open '%s' for reading: %s\n", argv[1], strerror(errno));
         return;
     }
 
@@ -835,7 +827,7 @@ START_TEST(shader_runner_d3d12)
             switch (state)
             {
                 case STATE_NONE:
-                    fprintf(stderr, "Ignoring line '%s' in %s.\n", line, argv[1]);
+                    fatal_error("Malformed line '%s'.\n", line);
                     break;
 
                 case STATE_PREPROC:
-- 
2.33.1




More information about the wine-devel mailing list