Module: Mesa Branch: main Commit: 10f6191fb5e910c3a705bf3dd850eb94b5461973 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=10f6191fb5e910c3a705bf3dd850eb94b5461973
Author: Danylo Piliaiev <[email protected]> Date: Wed Jun 15 17:35:39 2022 +0300 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 <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17053> --- 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 ecedd69a1c1..1c101891ffd 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, };
