From 454d8a39e0b9155d4a6e84f98d320faf47eb39ef Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 15 Sep 2025 14:07:13 -0400 Subject: [PATCH] zink: split out descriptor invalidation to be more explicit this makes it more extensible no functional changes Part-of: --- src/gallium/drivers/zink/zink_descriptors.c | 35 +++++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c index f5d67eadbb4..4662c91d879 100644 --- a/src/gallium/drivers/zink/zink_descriptors.c +++ b/src/gallium/drivers/zink/zink_descriptors.c @@ -1479,20 +1479,43 @@ zink_descriptors_update(struct zink_context *ctx, enum zink_pipeline_idx pidx) void zink_context_invalidate_descriptor_state(struct zink_context *ctx, mesa_shader_stage shader, enum zink_descriptor_type type, unsigned start, unsigned count) { - if (type == ZINK_DESCRIPTOR_TYPE_UBO && !start) - ctx->dd.push_state_changed[shader == MESA_SHADER_COMPUTE] = true; - else - ctx->dd.state_changed[shader == MESA_SHADER_COMPUTE] |= BITFIELD_BIT(type); + if (type == ZINK_DESCRIPTOR_TYPE_UBO && !start) { + if (shader == MESA_SHADER_COMPUTE) + ctx->dd.push_state_changed[shader == MESA_SHADER_COMPUTE] = true; + else if (shader < MESA_SHADER_FRAGMENT) + ctx->dd.push_state_changed[shader == MESA_SHADER_COMPUTE] = true; + else + ctx->dd.push_state_changed[shader == MESA_SHADER_COMPUTE] = true; + } else { + if (shader == MESA_SHADER_COMPUTE) + ctx->dd.state_changed[shader == MESA_SHADER_COMPUTE] |= BITFIELD_BIT(type); + else if (shader < MESA_SHADER_FRAGMENT) + ctx->dd.state_changed[shader == MESA_SHADER_COMPUTE] |= BITFIELD_BIT(type); + else { + ctx->dd.state_changed[shader == MESA_SHADER_COMPUTE] |= BITFIELD_BIT(type); + } + } } void zink_context_invalidate_descriptor_state_compact(struct zink_context *ctx, mesa_shader_stage shader, enum zink_descriptor_type type, unsigned start, unsigned count) { if (type == ZINK_DESCRIPTOR_TYPE_UBO && !start) - ctx->dd.push_state_changed[shader == MESA_SHADER_COMPUTE] = true; + if (shader == MESA_SHADER_COMPUTE) + ctx->dd.push_state_changed[shader == MESA_SHADER_COMPUTE] = true; + else if (shader < MESA_SHADER_FRAGMENT) + ctx->dd.push_state_changed[shader == MESA_SHADER_COMPUTE] = true; + else + ctx->dd.push_state_changed[shader == MESA_SHADER_COMPUTE] = true; else { if (type > ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW) type -= ZINK_DESCRIPTOR_COMPACT; - ctx->dd.state_changed[shader == MESA_SHADER_COMPUTE] |= BITFIELD_BIT(type); + if (shader == MESA_SHADER_COMPUTE) + ctx->dd.state_changed[shader == MESA_SHADER_COMPUTE] |= BITFIELD_BIT(type); + else if (shader < MESA_SHADER_FRAGMENT) + ctx->dd.state_changed[shader == MESA_SHADER_COMPUTE] |= BITFIELD_BIT(type); + else { + ctx->dd.state_changed[shader == MESA_SHADER_COMPUTE] |= BITFIELD_BIT(type); + } } }