From b2ecafd1ac9534cd4ba11df31d4b5288e90600e4 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 29 Mar 2023 08:52:26 -0400 Subject: [PATCH] zink: split out generic shader destruction for reuse Part-of: --- src/gallium/drivers/zink/zink_compiler.c | 30 ++++++++++++++++++------------ src/gallium/drivers/zink/zink_compiler.h | 2 ++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 8fde6d8..c009078 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -4968,6 +4968,23 @@ zink_shader_finalize(struct pipe_screen *pscreen, void *nirptr) } void +zink_shader_free(struct zink_screen *screen, struct zink_shader *shader) +{ + _mesa_set_destroy(shader->programs, NULL); + util_queue_fence_wait(&shader->precompile.fence); + util_queue_fence_destroy(&shader->precompile.fence); + zink_descriptor_shader_deinit(screen, shader); + if (shader->precompile.mod) + VKSCR(DestroyShaderModule)(screen->dev, shader->precompile.mod, NULL); + if (shader->precompile.gpl) + VKSCR(DestroyPipeline)(screen->dev, shader->precompile.gpl, NULL); + blob_finish(&shader->blob); + ralloc_free(shader->spirv); + free(shader->precompile.bindings); + ralloc_free(shader); +} + +void zink_gfx_shader_free(struct zink_screen *screen, struct zink_shader *shader) { assert(shader->info.stage != MESA_SHADER_COMPUTE); @@ -5047,18 +5064,7 @@ zink_gfx_shader_free(struct zink_screen *screen, struct zink_shader *shader) } } } - _mesa_set_destroy(shader->programs, NULL); - util_queue_fence_wait(&shader->precompile.fence); - util_queue_fence_destroy(&shader->precompile.fence); - zink_descriptor_shader_deinit(screen, shader); - if (shader->precompile.mod) - VKSCR(DestroyShaderModule)(screen->dev, shader->precompile.mod, NULL); - if (shader->precompile.gpl) - VKSCR(DestroyPipeline)(screen->dev, shader->precompile.gpl, NULL); - blob_finish(&shader->blob); - ralloc_free(shader->spirv); - free(shader->precompile.bindings); - ralloc_free(shader); + zink_shader_free(screen, shader); } diff --git a/src/gallium/drivers/zink/zink_compiler.h b/src/gallium/drivers/zink/zink_compiler.h index dab0d8f..3d9b7ae 100644 --- a/src/gallium/drivers/zink/zink_compiler.h +++ b/src/gallium/drivers/zink/zink_compiler.h @@ -80,6 +80,8 @@ char * zink_shader_finalize(struct pipe_screen *pscreen, void *nirptr); void +zink_shader_free(struct zink_screen *screen, struct zink_shader *shader); +void zink_gfx_shader_free(struct zink_screen *screen, struct zink_shader *shader); VkShaderModule -- 2.7.4