[PATCH vkd3d 4/5] tests: Add a helper to set uniforms.

Zebediah Figura zfigura at codeweavers.com
Tue Jan 11 12:16:51 CST 2022


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 tests/shader_runner.c | 42 +++++++++++++++---------------------------
 1 file changed, 15 insertions(+), 27 deletions(-)

diff --git a/tests/shader_runner.c b/tests/shader_runner.c
index f6fd028f8..d29bdb929 100644
--- a/tests/shader_runner.c
+++ b/tests/shader_runner.c
@@ -74,13 +74,13 @@ struct shader_context
     char *ps_source;
 
     uint32_t *uniforms;
-    size_t uniform_count;
+    size_t uniform_count, uniform_capacity;
 
     struct texture *textures;
-    size_t texture_count;
+    size_t texture_count, texture_capacity;
 
     struct sampler *samplers;
-    size_t sampler_count;
+    size_t sampler_count, sampler_capacity;
 };
 
 static void free_texture(struct texture *texture)
@@ -263,6 +263,14 @@ static void parse_texture_directive(struct texture *texture, const char *line)
     }
 }
 
+static void set_uniforms(struct shader_context *context, size_t offset, size_t count, const void *uniforms)
+{
+    context->uniform_count = max(context->uniform_count, offset + count);
+    vkd3d_array_reserve((void **)&context->uniforms, &context->uniform_capacity,
+            context->uniform_count, sizeof(*context->uniforms));
+    memcpy(context->uniforms + offset, uniforms, count * sizeof(*context->uniforms));
+}
+
 static void parse_test_directive(struct shader_context *context, const char *line)
 {
     if (match_string(line, "draw quad", &line))
@@ -351,12 +359,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
 
             if (sscanf(line, "%f %f %f %f", &v.x, &v.y, &v.z, &v.w) < 4)
                 fatal_error("Malformed float4 constant '%s'.\n", line);
-            if (offset + 4 > context->uniform_count)
-            {
-                context->uniform_count = offset + 4;
-                context->uniforms = realloc(context->uniforms, context->uniform_count * sizeof(*context->uniforms));
-            }
-            memcpy(context->uniforms + offset, &v, sizeof(v));
+            set_uniforms(context, offset, 4, &v);
         }
         else if (match_string(line, "float", &line))
         {
@@ -364,12 +367,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
 
             if (sscanf(line, "%f", &f) < 1)
                 fatal_error("Malformed float constant '%s'.\n", line);
-            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));
+            set_uniforms(context, offset, 1, &f);
         }
         else if (match_string(line, "int", &line))
         {
@@ -377,12 +375,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
 
             if (sscanf(line, "%i", &i) < 1)
                 fatal_error("Malformed int constant '%s'.\n", line);
-            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));
+            set_uniforms(context, offset, 1, &i);
         }
         else if (match_string(line, "uint", &line))
         {
@@ -390,12 +383,7 @@ static void parse_test_directive(struct shader_context *context, const char *lin
 
             if (sscanf(line, "%u", &u) < 1)
                 fatal_error("Malformed uint constant '%s'.\n", line);
-            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, &u, sizeof(u));
+            set_uniforms(context, offset, 1, &u);
         }
     }
     else
-- 
2.34.1




More information about the wine-devel mailing list