diff options
author | Neil Roberts <neil@linux.intel.com> | 2012-03-22 12:40:38 +0000 |
---|---|---|
committer | Neil Roberts <neil@linux.intel.com> | 2012-04-05 13:51:56 +0100 |
commit | d54111795fee3fd0618c448c5279f2421396a154 (patch) | |
tree | 515b842aa69fa7211647ac032437840beb911a78 | |
parent | c33ce5fc6bbda0f7c2d8f0e4bb3523948acce0da (diff) | |
download | cogl-d54111795fee3fd0618c448c5279f2421396a154.tar.gz |
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>
-rw-r--r-- | 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 579281f2..26173451 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 */ |