Zebediah Figura : vkd3d-shader: Introduce HLSL string buffer helpers.

Alexandre Julliard julliard at winehq.org
Mon May 31 15:58:27 CDT 2021


Module: vkd3d
Branch: master
Commit: 4fe1e86310eeabd2ed49f25bb4f076a509cc881e
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=4fe1e86310eeabd2ed49f25bb4f076a509cc881e

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Fri May 21 00:32:21 2021 -0500

vkd3d-shader: Introduce HLSL string buffer helpers.

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d-shader/hlsl.h         | 14 ++++++++++++++
 libs/vkd3d-shader/hlsl_codegen.c | 33 ++++++++++++---------------------
 2 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/libs/vkd3d-shader/hlsl.h b/libs/vkd3d-shader/hlsl.h
index 3e7d244..3e6d1c3 100644
--- a/libs/vkd3d-shader/hlsl.h
+++ b/libs/vkd3d-shader/hlsl.h
@@ -567,6 +567,20 @@ static inline bool hlsl_array_reserve(struct hlsl_ctx *ctx, void **elements,
     return ret;
 }
 
+static inline struct vkd3d_string_buffer *hlsl_get_string_buffer(struct hlsl_ctx *ctx)
+{
+    struct vkd3d_string_buffer *ret = vkd3d_string_buffer_get(&ctx->string_buffers);
+
+    if (!ret)
+        ctx->failed = true;
+    return ret;
+}
+
+static inline void hlsl_release_string_buffer(struct hlsl_ctx *ctx, struct vkd3d_string_buffer *buffer)
+{
+    vkd3d_string_buffer_release(&ctx->string_buffers, buffer);
+}
+
 const char *debug_hlsl_type(const struct hlsl_type *type) DECLSPEC_HIDDEN;
 const char *debug_hlsl_writemask(unsigned int writemask) DECLSPEC_HIDDEN;
 
diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c
index 1705529..84a47ed 100644
--- a/libs/vkd3d-shader/hlsl_codegen.c
+++ b/libs/vkd3d-shader/hlsl_codegen.c
@@ -42,14 +42,11 @@ static void prepend_uniform_copy(struct hlsl_ctx *ctx, struct list *instrs, stru
     uniform->is_uniform = 1;
     uniform->is_param = temp->is_param;
 
-    if (!(name = vkd3d_string_buffer_get(&ctx->string_buffers)))
-    {
-        ctx->failed = true;
+    if (!(name = hlsl_get_string_buffer(ctx)))
         return;
-    }
     vkd3d_string_buffer_printf(name, "<temp-%s>", temp->name);
     temp->name = hlsl_strdup(ctx, name->buffer);
-    vkd3d_string_buffer_release(&ctx->string_buffers, name);
+    hlsl_release_string_buffer(ctx, name);
 
     if (!(load = hlsl_new_var_load(ctx, uniform, temp->loc)))
         return;
@@ -70,25 +67,22 @@ static void prepend_input_copy(struct hlsl_ctx *ctx, struct list *instrs, struct
     struct hlsl_ir_load *load;
     struct hlsl_ir_var *input;
 
-    if (!(name = vkd3d_string_buffer_get(&ctx->string_buffers)))
-    {
-        ctx->failed = true;
+    if (!(name = hlsl_get_string_buffer(ctx)))
         return;
-    }
     vkd3d_string_buffer_printf(name, "<input-%s%u>", semantic->name, semantic->index);
     if (!(new_semantic.name = hlsl_strdup(ctx, semantic->name)))
     {
-        vkd3d_string_buffer_release(&ctx->string_buffers, name);
+        hlsl_release_string_buffer(ctx, name);
         return;
     }
     new_semantic.index = semantic->index;
     if (!(input = hlsl_new_var(ctx, hlsl_strdup(ctx, name->buffer), type, var->loc, &new_semantic, 0, NULL)))
     {
-        vkd3d_string_buffer_release(&ctx->string_buffers, name);
+        hlsl_release_string_buffer(ctx, name);
         vkd3d_free((void *)new_semantic.name);
         return;
     }
-    vkd3d_string_buffer_release(&ctx->string_buffers, name);
+    hlsl_release_string_buffer(ctx, name);
     input->is_input_semantic = 1;
     input->is_param = var->is_param;
     list_add_before(&var->scope_entry, &input->scope_entry);
@@ -144,25 +138,22 @@ static void append_output_copy(struct hlsl_ctx *ctx, struct list *instrs, struct
     struct hlsl_ir_var *output;
     struct hlsl_ir_load *load;
 
-    if (!(name = vkd3d_string_buffer_get(&ctx->string_buffers)))
-    {
-        ctx->failed = true;
+    if (!(name = hlsl_get_string_buffer(ctx)))
         return;
-    }
     vkd3d_string_buffer_printf(name, "<output-%s%u>", semantic->name, semantic->index);
     if (!(new_semantic.name = hlsl_strdup(ctx, semantic->name)))
     {
-        vkd3d_string_buffer_release(&ctx->string_buffers, name);
+        hlsl_release_string_buffer(ctx, name);
         return;
     }
     new_semantic.index = semantic->index;
     if (!(output = hlsl_new_var(ctx, hlsl_strdup(ctx, name->buffer), type, var->loc, &new_semantic, 0, NULL)))
     {
         vkd3d_free((void *)new_semantic.name);
-        vkd3d_string_buffer_release(&ctx->string_buffers, name);
+        hlsl_release_string_buffer(ctx, name);
         return;
     }
-    vkd3d_string_buffer_release(&ctx->string_buffers, name);
+    hlsl_release_string_buffer(ctx, name);
     output->is_output_semantic = 1;
     output->is_param = var->is_param;
     list_add_before(&var->scope_entry, &output->scope_entry);
@@ -1422,7 +1413,7 @@ static void write_sm1_uniforms(struct hlsl_ctx *ctx, struct bytecode_buffer *buf
             {
                 struct vkd3d_string_buffer *name;
 
-                if (!(name = vkd3d_string_buffer_get(&ctx->string_buffers)))
+                if (!(name = hlsl_get_string_buffer(ctx)))
                 {
                     buffer->status = VKD3D_ERROR_OUT_OF_MEMORY;
                     return;
@@ -1430,7 +1421,7 @@ static void write_sm1_uniforms(struct hlsl_ctx *ctx, struct bytecode_buffer *buf
                 vkd3d_string_buffer_printf(name, "$%s", var->name);
                 vkd3d_free((char *)var->name);
                 var->name = hlsl_strdup(ctx, name->buffer);
-                vkd3d_string_buffer_release(&ctx->string_buffers, name);
+                hlsl_release_string_buffer(ctx, name);
             }
         }
     }




More information about the wine-cvs mailing list