This utility function is used in a later patch. Signed-off-by: Anuj Phogat <anuj.pho...@gmail.com> Cc: <mesa-sta...@lists.freedesktop.org> --- src/mesa/main/readpix.c | 32 ++++++++++++++++++-------------- src/mesa/main/readpix.h | 4 ++++ 2 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c index a9416ef..1038983 100644 --- a/src/mesa/main/readpix.c +++ b/src/mesa/main/readpix.c @@ -114,6 +114,22 @@ _mesa_get_readpixels_transfer_ops(const struct gl_context *ctx, return transferOps; } +bool +_mesa_need_signed_unsigned_int_conversion(mesa_format rbFormat, + GLenum format, GLenum type) +{ + const GLenum srcType = _mesa_get_format_datatype(rbFormat); + return (srcType == GL_INT && + _mesa_is_enum_format_integer(format) && + (type == GL_UNSIGNED_INT || + type == GL_UNSIGNED_SHORT || + type == GL_UNSIGNED_BYTE)) || + (srcType == GL_UNSIGNED_INT && + _mesa_is_enum_format_integer(format) && + (type == GL_INT || + type == GL_SHORT || + type == GL_BYTE)); +} /** * Return true if memcpy cannot be used for ReadPixels. @@ -130,7 +146,6 @@ _mesa_readpixels_needs_slow_path(const struct gl_context *ctx, GLenum format, { struct gl_renderbuffer *rb = _mesa_get_read_renderbuffer_for_format(ctx, format); - GLenum srcType; assert(rb); @@ -157,20 +172,9 @@ _mesa_readpixels_needs_slow_path(const struct gl_context *ctx, GLenum format, /* Conversion between signed and unsigned integers needs masking * (it isn't just memcpy). */ - srcType = _mesa_get_format_datatype(rb->Format); - - if ((srcType == GL_INT && - _mesa_is_enum_format_integer(format) && - (type == GL_UNSIGNED_INT || - type == GL_UNSIGNED_SHORT || - type == GL_UNSIGNED_BYTE)) || - (srcType == GL_UNSIGNED_INT && - _mesa_is_enum_format_integer(format) && - (type == GL_INT || - type == GL_SHORT || - type == GL_BYTE))) { + if (_mesa_need_signed_unsigned_int_conversion(rb->Format, format, + type)) return GL_TRUE; - } /* And finally, see if there are any transfer ops. */ return _mesa_get_readpixels_transfer_ops(ctx, rb->Format, format, type, diff --git a/src/mesa/main/readpix.h b/src/mesa/main/readpix.h index f894036..a93e263 100644 --- a/src/mesa/main/readpix.h +++ b/src/mesa/main/readpix.h @@ -46,6 +46,10 @@ _mesa_get_readpixels_transfer_ops(const struct gl_context *ctx, GLenum format, GLenum type, GLboolean uses_blit); +extern bool +_mesa_need_signed_unsigned_int_conversion(mesa_format rbFormat, + GLenum format, GLenum type); + extern void _mesa_readpixels(struct gl_context *ctx, GLint x, GLint y, GLsizei width, GLsizei height, -- 1.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev