diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 8fde6d8b754..c009078c96c 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -4967,6 +4967,23 @@ zink_shader_finalize(struct pipe_screen *pscreen, void *nirptr) return NULL; } +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) { @@ -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 dab0d8f223f..3d9b7ae1ccb 100644 --- a/src/gallium/drivers/zink/zink_compiler.h +++ b/src/gallium/drivers/zink/zink_compiler.h @@ -79,6 +79,8 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir, 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);