From f2591d09d77b70d939618c110a2e893453cb787f Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 1 Sep 2022 13:07:39 -0400 Subject: [PATCH] zink: wrap zink_shader_key_base access for nonseamless cubemap use Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_context.c | 17 ++++++++--------- src/gallium/drivers/zink/zink_program.h | 13 +++++++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 86e7597..b89db31 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -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 diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h index fc691ee..b5be2dc 100644 --- a/src/gallium/drivers/zink/zink_program.h +++ b/src/gallium/drivers/zink/zink_program.h @@ -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 -- 2.7.4