zink: unset generated tcs pointer from tes on deletion

otherwise this will free the generated tcs multiple times if the tes
is used by multiple programs

cc: mesa-stable

Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17010>
(cherry picked from commit cf34d3fe05)
This commit is contained in:
Mike Blumenkrantz 2022-06-07 14:26:02 -04:00 committed by Dylan Baker
parent 96574ecba3
commit d8fa501ca4
2 changed files with 4 additions and 2 deletions

View file

@ -1192,7 +1192,7 @@
"description": "zink: unset generated tcs pointer from tes on deletion",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null
},

View file

@ -2239,9 +2239,11 @@ zink_shader_free(struct zink_context *ctx, struct zink_shader *shader)
prog->base.removed = true;
}
prog->shaders[pstage] = NULL;
if (shader->nir->info.stage == MESA_SHADER_TESS_EVAL && shader->generated)
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;
}
zink_gfx_program_reference(ctx, &prog, NULL);
}
}