From 59fa32858916e5e80708f3acadc71529313eb94f Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 4 Aug 2022 22:43:38 -0400 Subject: [PATCH] zink: rework bit iteration in update_gfx_shader_modules to use for loop this is roughly 1% faster in drawoverhead case 7 Reviewed-by: Samuel Pitoiset Part-of: --- src/gallium/drivers/zink/zink_program.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 362693420f5..34440f6e66a 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -182,18 +182,21 @@ update_gfx_shader_modules(struct zink_context *ctx, bool default_variants = true; bool first = !prog->modules[MESA_SHADER_VERTEX]; uint32_t variant_hash = prog->last_variant_hash; - u_foreach_bit(pstage, mask) { - assert(prog->shaders[pstage]); - struct zink_shader_module *zm = get_shader_module_for_stage(ctx, screen, prog->shaders[pstage], prog, state); - state->modules[pstage] = zm->shader; - if (prog->modules[pstage] == zm) + for (unsigned i = 0; i < MESA_SHADER_COMPUTE; i++) { + if (!(mask & BITFIELD_BIT(i))) continue; - if (prog->modules[pstage]) - variant_hash ^= prog->modules[pstage]->hash; + + assert(prog->shaders[i]); + struct zink_shader_module *zm = get_shader_module_for_stage(ctx, screen, prog->shaders[i], prog, state); + state->modules[i] = zm->shader; + if (prog->modules[i] == zm) + continue; + if (prog->modules[i]) + variant_hash ^= prog->modules[i]->hash; hash_changed = true; default_variants &= zm->default_variant; - prog->modules[pstage] = zm; - variant_hash ^= prog->modules[pstage]->hash; + prog->modules[i] = zm; + variant_hash ^= prog->modules[i]->hash; } if (hash_changed && state) {