zink: wrap zink_shader_key_base access for nonseamless cubemap use
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Thu, 1 Sep 2022 17:07:39 +0000 (13:07 -0400)
committerMarge Bot <emma+marge@anholt.net>
Mon, 26 Sep 2022 17:12:31 +0000 (17:12 +0000)
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18786>

src/gallium/drivers/zink/zink_context.c
src/gallium/drivers/zink/zink_program.h

index 86e7597..b89db31 100644 (file)
@@ -678,16 +678,15 @@ update_descriptor_state_image(struct zink_context *ctx, gl_shader_stage shader,
 static void
 update_nonseamless_shader_key(struct zink_context *ctx, gl_shader_stage pstage)
 {
-   uint32_t *mask;
-   if (pstage == MESA_SHADER_COMPUTE)
-      mask = &ctx->compute_pipeline_state.key.base.nonseamless_cube_mask;
-   else
-      mask = &ctx->gfx_pipeline_state.shader_keys.key[pstage].base.nonseamless_cube_mask;
-
    const uint32_t new_mask = ctx->di.emulate_nonseamless[pstage] & ctx->di.cubes[pstage];
-   if (new_mask != *mask)
-      ctx->dirty_shader_stages |= BITFIELD_BIT(pstage);
-   *mask = new_mask;
+   if (pstage == MESA_SHADER_COMPUTE) {
+      if (ctx->compute_pipeline_state.key.base.nonseamless_cube_mask != new_mask)
+         ctx->dirty_shader_stages |= BITFIELD_BIT(pstage);
+      ctx->compute_pipeline_state.key.base.nonseamless_cube_mask = new_mask;
+   } else {
+      if (zink_get_shader_key_base(ctx, pstage)->nonseamless_cube_mask != new_mask)
+         zink_set_shader_key_base(ctx, pstage)->nonseamless_cube_mask = new_mask;
+   }
 }
 
 static void
index fc691ee..b5be2dc 100644 (file)
@@ -292,6 +292,19 @@ zink_set_fs_point_coord_key(struct zink_context *ctx)
    }
 }
 
+static inline const struct zink_shader_key_base *
+zink_get_shader_key_base(struct zink_context *ctx, gl_shader_stage pstage)
+{
+   return &ctx->gfx_pipeline_state.shader_keys.key[pstage].base;
+}
+
+static inline struct zink_shader_key_base *
+zink_set_shader_key_base(struct zink_context *ctx, gl_shader_stage pstage)
+{
+   ctx->dirty_shader_stages |= BITFIELD_BIT(pstage);
+   return &ctx->gfx_pipeline_state.shader_keys.key[pstage].base;
+}
+
 bool
 zink_set_rasterizer_discard(struct zink_context *ctx, bool disable);
 void