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