zink: split out generic shader destruction for reuse

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22577>
This commit is contained in:
Mike Blumenkrantz
2023-03-29 08:52:26 -04:00
committed by Marge Bot
parent 9f6eec03e0
commit b2ecafd1ac
2 changed files with 20 additions and 12 deletions

View File

@@ -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);
}

View File

@@ -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);