From 7d805b42da8568fa7a78e1a384d5c374e00243dc Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Thu, 19 Oct 2023 16:48:26 +0300 Subject: [PATCH] nir/clone: fix missing printf_info clone Signed-off-by: Lionel Landwerlin Cc: mesa-stable Reviewed-by: Karol Herbst Part-of: (cherry picked from commit 81b3dea9937baefd19d1791e1a592eec443f9085) --- .pick_status.json | 2 +- src/compiler/nir/nir_clone.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index cdac2d5..5e9ca44 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1044,7 +1044,7 @@ "description": "nir/clone: fix missing printf_info clone", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/compiler/nir/nir_clone.c b/src/compiler/nir/nir_clone.c index 0257120..c8373bc 100644 --- a/src/compiler/nir/nir_clone.c +++ b/src/compiler/nir/nir_clone.c @@ -687,6 +687,32 @@ clone_function(clone_state *state, const nir_function *fxn, nir_shader *ns) return nfxn; } +static u_printf_info * +clone_printf_info(void *mem_ctx, const nir_shader *s) +{ + u_printf_info *infos = ralloc_array(mem_ctx, u_printf_info, s->printf_info_count); + + for (unsigned i = 0; i < s->printf_info_count; i++) { + const u_printf_info *src_info = &s->printf_info[i]; + + infos[i].num_args = src_info->num_args; + infos[i].arg_sizes = ralloc_size(mem_ctx, + sizeof(infos[i].arg_sizes[0]) * + src_info->num_args); + memcpy(infos[i].arg_sizes, src_info->arg_sizes, + sizeof(infos[i].arg_sizes[0]) * src_info->num_args); + + + infos[i].string_size = src_info->string_size; + infos[i].strings = ralloc_size(mem_ctx, + src_info->string_size); + memcpy(infos[i].strings, src_info->strings, + src_info->string_size); + } + + return infos; +} + nir_shader * nir_shader_clone(void *mem_ctx, const nir_shader *s) { @@ -734,6 +760,11 @@ nir_shader_clone(void *mem_ctx, const nir_shader *s) memcpy(ns->xfb_info, s->xfb_info, size); } + if (s->printf_info_count > 0) { + ns->printf_info = clone_printf_info(ns, s); + ns->printf_info_count = s->printf_info_count; + } + free_clone_state(&state); return ns; -- 2.7.4