radeonsi: don't index si_context::shaders with enum gl_shader_stage
authorMarek Olšák <marek.olsak@amd.com>
Fri, 26 Feb 2021 23:01:19 +0000 (18:01 -0500)
committerMarge Bot <eric+marge@anholt.net>
Tue, 2 Mar 2021 01:14:44 +0000 (01:14 +0000)
Fixes: a8373b3d387 "radeonsi: store si_context::xxx_shader members in union"

Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9313>

src/gallium/drivers/radeonsi/si_pipe.h
src/gallium/drivers/radeonsi/si_state_shaders.c

index 3cfa56c..2393987 100644 (file)
@@ -1051,6 +1051,7 @@ struct si_context {
          struct si_shader_ctx_state tcs;
          struct si_shader_ctx_state tes;
       } shader;
+      /* indexed access using pipe_shader_type (not by MESA_SHADER_*) */
       struct si_shader_ctx_state shaders[SI_NUM_GRAPHICS_SHADERS];
    };
    struct si_shader_ctx_state cs_prim_discard_state;
index 2a252c6..c4b1cba 100644 (file)
@@ -3279,12 +3279,13 @@ static void si_destroy_shader_selector(struct pipe_context *ctx, void *cso)
    struct si_context *sctx = (struct si_context *)ctx;
    struct si_shader_selector *sel = (struct si_shader_selector *)cso;
    struct si_shader *p = sel->first_variant, *c;
+   enum pipe_shader_type type = pipe_shader_type_from_mesa(sel->info.stage);
 
    util_queue_drop_job(&sctx->screen->shader_compiler_queue, &sel->ready);
 
-   if (sctx->shaders[sel->info.stage].cso == sel) {
-      sctx->shaders[sel->info.stage].cso = NULL;
-      sctx->shaders[sel->info.stage].current = NULL;
+   if (sctx->shaders[type].cso == sel) {
+      sctx->shaders[type].cso = NULL;
+      sctx->shaders[type].current = NULL;
    }
 
    while (p) {