zink: flag the gfx pipeline dirty and unset pipeline shader module on shader change
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Fri, 14 May 2021 22:31:50 +0000 (18:31 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 18 Aug 2021 20:58:36 +0000 (20:58 +0000)
there's no need to leave this until the module updating when the info
is known much earlier

Reviewed-by: Hoe Hao Cheng <haochengho12907@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12428>

src/gallium/drivers/zink/zink_program.c

index bb205f7..c5163e8 100644 (file)
@@ -881,8 +881,12 @@ bind_stage(struct zink_context *ctx, enum pipe_shader_type stage,
       ctx->compute_stage = shader;
       if (shader)
          zink_select_launch_grid(ctx);
-   } else
+   } else {
       ctx->gfx_stages[stage] = shader;
+      ctx->gfx_pipeline_state.combined_dirty = true;
+      if (!shader)
+         ctx->gfx_pipeline_state.modules[stage] = VK_NULL_HANDLE;
+   }
    ctx->dirty_shader_stages |= 1 << stage;
    if (shader && shader->nir->info.num_inlinable_uniforms)
       ctx->shader_has_inlinable_uniforms_mask |= 1 << stage;