[cogl/wip/rib/cogl-1.12: 22/142] Use ffs to calculate the GL_{UN, }PACK_ALIGNMENT



commit 712001d6087f24941b1a86471a518d470b79b758
Author: Neil Roberts <neil linux intel com>
Date:   Thu Mar 22 12:40:38 2012 +0000

    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 <robert linux intel com>
    
    (cherry picked from commit d54111795fee3fd0618c448c5279f2421396a154)

 cogl/cogl-texture.c |   28 ++++++++++++----------------
 1 files changed, 12 insertions(+), 16 deletions(-)
---
diff --git a/cogl/cogl-texture.c b/cogl/cogl-texture.c
index 579281f..2617345 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 */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]