From d54111795fee3fd0618c448c5279f2421396a154 Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Thu, 22 Mar 2012 12:40:38 +0000 Subject: [PATCH] Use ffs to calculate the GL_{UN,}PACK_ALIGNMENT Instead of having a series of if-statements this adds an inline function to calculate the alignment directly using ffs which is probably slightly faster. Admittedly this is a pointless micro-optimisation but I think it makes the code looks a bit neater anyway. Reviewed-by: Robert Bragg --- cogl/cogl-texture.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/cogl/cogl-texture.c b/cogl/cogl-texture.c index 579281f28..261734516 100644 --- a/cogl/cogl-texture.c +++ b/cogl/cogl-texture.c @@ -256,19 +256,21 @@ _cogl_texture_prepare_for_upload (CoglBitmap *src_bmp, return dst_bmp; } +static inline int +calculate_alignment (int rowstride) +{ + int alignment = 1 << (_cogl_util_ffs (rowstride) - 1); + + return MIN (alignment, 8); +} + void _cogl_texture_prep_gl_alignment_for_pixels_upload (int pixels_rowstride) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); - if (!(pixels_rowstride & 0x7)) - GE( ctx, glPixelStorei (GL_UNPACK_ALIGNMENT, 8) ); - else if (!(pixels_rowstride & 0x3)) - GE( ctx, glPixelStorei (GL_UNPACK_ALIGNMENT, 4) ); - else if (!(pixels_rowstride & 0x1)) - GE( ctx, glPixelStorei (GL_UNPACK_ALIGNMENT, 2) ); - else - GE( ctx, glPixelStorei (GL_UNPACK_ALIGNMENT, 1) ); + GE( ctx, glPixelStorei (GL_UNPACK_ALIGNMENT, + calculate_alignment (pixels_rowstride)) ); } void @@ -276,14 +278,8 @@ _cogl_texture_prep_gl_alignment_for_pixels_download (int pixels_rowstride) { _COGL_GET_CONTEXT (ctx, NO_RETVAL); - if (!(pixels_rowstride & 0x7)) - GE( ctx, glPixelStorei (GL_PACK_ALIGNMENT, 8) ); - else if (!(pixels_rowstride & 0x3)) - GE( ctx, glPixelStorei (GL_PACK_ALIGNMENT, 4) ); - else if (!(pixels_rowstride & 0x1)) - GE( ctx, glPixelStorei (GL_PACK_ALIGNMENT, 2) ); - else - GE( ctx, glPixelStorei (GL_PACK_ALIGNMENT, 1) ); + GE( ctx, glPixelStorei (GL_PACK_ALIGNMENT, + calculate_alignment (pixels_rowstride)) ); } /* FIXME: wrap modes should be set on pipelines not textures */