diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 58312861c27..cd7f017bfec 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -4497,6 +4497,21 @@ radv_create_shaders(struct radv_pipeline *pipeline, struct radv_pipeline_layout } } + if (keep_executable_info) { + for (int i = 0; i < MESA_VULKAN_SHADER_STAGES; ++i) { + struct radv_shader *shader = pipeline->shaders[i]; + if (!shader) + continue; + + if (!modules[i] || modules[i]->nir) + continue; + + shader->spirv = malloc(modules[i]->size); + memcpy(shader->spirv, modules[i]->data, modules[i]->size); + shader->spirv_size = modules[i]->size; + } + } + /* Upload shader binaries. */ radv_upload_shaders(device, pipeline, binaries, gs_copy_binary); diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 542f7321304..17b410c45b8 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -2000,17 +2000,6 @@ shader_compile(struct radv_device *device, struct vk_shader_module *module, if (keep_shader_info) { shader->nir_string = radv_dump_nir_shaders(shaders, shader_count); - if (!gs_copy_shader && !trap_handler_shader && !module->nir) { - shader->spirv = malloc(module->size); - if (!shader->spirv) { - free(shader); - free(binary); - return NULL; - } - - memcpy(shader->spirv, module->data, module->size); - shader->spirv_size = module->size; - } } /* Copy the shader binary configuration to store it in the cache. */