From: Mathias Fröhlich <mathias.froehl...@web.de> Replaces an iterate and test bit in a bitmask loop by a loop only iterating over the bits set in the bitmask. The bitmask used here for iteration is a combination of different enabled masks present for texture units.
v2: Use _mesa_bit_scan{,64} instead of open coding. Reviewed-by: Brian Paul <bri...@vmware.com> Signed-off-by: Mathias Fröhlich <mathias.froehl...@web.de> --- src/mesa/main/ff_fragment_shader.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp index 26bf162..f2f4514 100644 --- a/src/mesa/main/ff_fragment_shader.cpp +++ b/src/mesa/main/ff_fragment_shader.cpp @@ -398,22 +398,25 @@ static GLbitfield get_fp_input_mask( struct gl_context *ctx ) */ static GLuint make_state_key( struct gl_context *ctx, struct state_key *key ) { - GLuint i, j; + GLuint j; GLbitfield inputs_referenced = VARYING_BIT_COL0; const GLbitfield inputs_available = get_fp_input_mask( ctx ); + GLbitfield mask; GLuint keySize; memset(key, 0, sizeof(*key)); /* _NEW_TEXTURE */ - for (i = 0; i < ctx->Const.MaxTextureUnits; i++) { + mask = ctx->Texture._EnabledCoordUnits; + while (mask) { + const int i = _mesa_bit_scan(&mask); const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i]; const struct gl_texture_object *texObj = texUnit->_Current; const struct gl_tex_env_combine_state *comb = texUnit->_CurrentCombine; const struct gl_sampler_object *samp; GLenum format; - if (!texUnit->_Current || !texUnit->Enabled) + if (!texObj) continue; samp = _mesa_get_samplerobj(ctx, i); -- 2.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev