From 10f6191fb5e910c3a705bf3dd850eb94b5461973 Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Wed, 15 Jun 2022 17:35:39 +0300 Subject: [PATCH] turnip: copy disasm strings for pipeline executables A single compiled_shaders instance could be reused by several pipelines, but strings from disasm info could be stolen only once. So now we have to copy them. Fixes crashes when using RenderDoc. Fixes: 05329d7f9acabbc9306c9538a30b502d4c580d38 ("tu: Implement pipeline caching with shared Vulkan cache") Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/vulkan/tu_pipeline.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index ecedd69..1c10189 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -2470,14 +2470,11 @@ static void tu_append_executable(struct tu_pipeline *pipeline, struct ir3_shader_variant *variant, char *nir_from_spirv) { - ralloc_steal(pipeline->executables_mem_ctx, variant->disasm_info.nir); - ralloc_steal(pipeline->executables_mem_ctx, variant->disasm_info.disasm); - struct tu_pipeline_executable exe = { .stage = variant->type, .nir_from_spirv = nir_from_spirv, - .nir_final = variant->disasm_info.nir, - .disasm = variant->disasm_info.disasm, + .nir_final = ralloc_strdup(pipeline->executables_mem_ctx, variant->disasm_info.nir), + .disasm = ralloc_strdup(pipeline->executables_mem_ctx, variant->disasm_info.disasm), .stats = variant->info, .is_binning = variant->binning_pass, }; -- 2.7.4