Mesa (main): zink: fix generated tcs deletion
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Jun 14 19:34:38 UTC 2022
Module: Mesa
Branch: main
Commit: 44cf6f7564d4bdcc15299007fc12b32e2e9ad1f2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=44cf6f7564d4bdcc15299007fc12b32e2e9ad1f2
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Wed Jun 8 15:48:17 2022 -0400
zink: fix generated tcs deletion
deleting the generated shader on the first loop iteration like this was
broken if the shader was used in multiple programs, so delete at the end
cc: mesa-stable
Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17010>
---
src/gallium/drivers/zink/zink_compiler.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c
index a02232add52..f3fac35f2f6 100644
--- a/src/gallium/drivers/zink/zink_compiler.c
+++ b/src/gallium/drivers/zink/zink_compiler.c
@@ -2896,15 +2896,19 @@ zink_shader_free(struct zink_context *ctx, struct zink_shader *shader)
_mesa_hash_table_remove_key(&ctx->program_cache[prog->stages_present >> 2], prog->shaders);
prog->base.removed = true;
}
- prog->shaders[pstage] = NULL;
- if (shader->nir->info.stage == MESA_SHADER_TESS_EVAL && shader->generated) {
- /* automatically destroy generated tcs shaders when tes is destroyed */
- zink_shader_free(ctx, shader->generated);
- shader->generated = NULL;
- }
+ if (shader->nir->info.stage != MESA_SHADER_TESS_CTRL || !shader->is_generated)
+ prog->shaders[pstage] = NULL;
+ /* only remove generated tcs during parent tes destruction */
+ if (shader->nir->info.stage == MESA_SHADER_TESS_EVAL && shader->generated)
+ prog->shaders[PIPE_SHADER_TESS_CTRL] = NULL;
zink_gfx_program_reference(ctx, &prog, NULL);
}
}
+ if (shader->nir->info.stage == MESA_SHADER_TESS_EVAL && shader->generated) {
+ /* automatically destroy generated tcs shaders when tes is destroyed */
+ zink_shader_free(ctx, shader->generated);
+ shader->generated = NULL;
+ }
_mesa_set_destroy(shader->programs, NULL);
ralloc_free(shader->nir);
ralloc_free(shader->spirv);
More information about the mesa-commit
mailing list