Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ValveSoftware/vkd3d.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZebediah Figura <zfigura@codeweavers.com>2021-09-12 00:53:18 +0300
committerGiovanni Mascellani <gmascellani@codeweavers.com>2022-07-26 15:48:51 +0300
commitd654c0eb1c5d090d8570efd4b22f5a9fd7712437 (patch)
tree937d25208db2562e618d77d1e607c427f35d064b
parent4512c6a4307b638e9b41b1312e8ffb4bd13c2b5b (diff)
vkd3d-shader/hlsl: Keep the first hlsl_ir_function_decl pointer, instead of the one that has a body.
HLSL_IR_CALL instructions will refer to it.
-rw-r--r--libs/vkd3d-shader/hlsl.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c
index 6831cf5a..d78bcaa2 100644
--- a/libs/vkd3d-shader/hlsl.c
+++ b/libs/vkd3d-shader/hlsl.c
@@ -1878,7 +1878,6 @@ void hlsl_add_function(struct hlsl_ctx *ctx, char *name, struct hlsl_ir_function
{
struct hlsl_ir_function_decl *old_decl =
RB_ENTRY_VALUE(old_entry, struct hlsl_ir_function_decl, entry);
- unsigned int i;
if (!decl->has_body)
{
@@ -1887,19 +1886,24 @@ void hlsl_add_function(struct hlsl_ctx *ctx, char *name, struct hlsl_ir_function
return;
}
- for (i = 0; i < decl->attr_count; ++i)
- hlsl_free_attribute((void *)decl->attrs[i]);
- vkd3d_free((void *)decl->attrs);
- decl->attr_count = old_decl->attr_count;
- decl->attrs = old_decl->attrs;
- old_decl->attr_count = 0;
- old_decl->attrs = NULL;
+ assert(!old_decl->has_body);
+ list_move_tail(&old_decl->body.instrs, &decl->body.instrs);
+ old_decl->has_body = true;
+
+ old_decl->return_var = decl->return_var;
+ decl->return_var = NULL;
+
+ vkd3d_free(old_decl->parameters);
+ old_decl->parameters = decl->parameters;
+ decl->parameters = NULL;
- rb_remove(&func->overloads, old_entry);
- free_function_decl(old_decl);
+ free_function_decl(decl);
+ }
+ else
+ {
+ rb_put(&func->overloads, decl->parameters, &decl->entry);
+ vkd3d_free(name);
}
- rb_put(&func->overloads, decl->parameters, &decl->entry);
- vkd3d_free(name);
return;
}
func = hlsl_alloc(ctx, sizeof(*func));