summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Roberts <neil@linux.intel.com>2012-03-22 12:40:38 +0000
committerNeil Roberts <neil@linux.intel.com>2012-04-05 13:51:56 +0100
commitd54111795fee3fd0618c448c5279f2421396a154 (patch)
tree515b842aa69fa7211647ac032437840beb911a78
parentc33ce5fc6bbda0f7c2d8f0e4bb3523948acce0da (diff)
downloadcogl-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.c28
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 */