From: Mathias Fröhlich <[email protected]>
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 <[email protected]>
Signed-off-by: Mathias Fröhlich <[email protected]>
---
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
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev