[Mesa-dev] [PATCH 13/14] mesa: Change the signature of _mesa_need_rgb_to_luminance_conversion()
Iago Toral
itoral at igalia.com
Wed Jul 22 07:44:26 PDT 2015
Looks good to me, if this did not introduce any regressions:
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
On Tue, 2015-06-16 at 11:15 -0700, Anuj Phogat wrote:
> This allows us to handle cases when texImage->_BaseFormat doesn't match
> _mesa_format_get_base_format(texImage->Format). _BaseFormat is what we
> care about in this function.
>
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> ---
> src/mesa/drivers/common/meta_tex_subimage.c | 4 +++-
> src/mesa/main/readpix.c | 28 +++++++++++++++-------------
> src/mesa/main/readpix.h | 3 ++-
> 3 files changed, 20 insertions(+), 15 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta_tex_subimage.c b/src/mesa/drivers/common/meta_tex_subimage.c
> index 6d52014..43e1210 100644
> --- a/src/mesa/drivers/common/meta_tex_subimage.c
> +++ b/src/mesa/drivers/common/meta_tex_subimage.c
> @@ -262,6 +262,7 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx, GLuint dims,
> int full_height, image_height;
> struct gl_texture_image *pbo_tex_image;
> struct gl_renderbuffer *rb = NULL;
> + GLenum dstBaseFormat = _mesa_unpack_format_to_base_format(format);
> GLenum status, base_format;
> bool success = false, clear_channels_to_zero = false;
> float save_clear_color[4];
> @@ -284,7 +285,8 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx, GLuint dims,
> type, GL_FALSE))
> return false;
>
> - if (_mesa_need_rgb_to_luminance_conversion(rb->Format, format))
> + if (_mesa_need_rgb_to_luminance_conversion(rb->_BaseFormat,
> + dstBaseFormat))
> return false;
>
> if (_mesa_need_signed_unsigned_int_conversion(rb->Format, format, type))
> diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c
> index c98975f..3a9b766 100644
> --- a/src/mesa/main/readpix.c
> +++ b/src/mesa/main/readpix.c
> @@ -47,17 +47,14 @@
> * Return true if the conversion L=R+G+B is needed.
> */
> GLboolean
> -_mesa_need_rgb_to_luminance_conversion(mesa_format texFormat, GLenum format)
> +_mesa_need_rgb_to_luminance_conversion(GLenum srcBaseFormat,
> + GLenum dstBaseFormat)
> {
> - GLenum baseTexFormat = _mesa_get_format_base_format(texFormat);
> -
> - return (baseTexFormat == GL_RG ||
> - baseTexFormat == GL_RGB ||
> - baseTexFormat == GL_RGBA) &&
> - (format == GL_LUMINANCE ||
> - format == GL_LUMINANCE_ALPHA ||
> - format == GL_LUMINANCE_INTEGER_EXT ||
> - format == GL_LUMINANCE_ALPHA_INTEGER_EXT);
> + return (srcBaseFormat == GL_RG ||
> + srcBaseFormat == GL_RGB ||
> + srcBaseFormat == GL_RGBA) &&
> + (dstBaseFormat == GL_LUMINANCE ||
> + dstBaseFormat == GL_LUMINANCE_ALPHA);
> }
>
> /**
> @@ -89,6 +86,8 @@ _mesa_get_readpixels_transfer_ops(const struct gl_context *ctx,
> GLboolean uses_blit)
> {
> GLbitfield transferOps = ctx->_ImageTransferState;
> + GLenum srcBaseFormat = _mesa_get_format_base_format(texFormat);
> + GLenum dstBaseFormat = _mesa_unpack_format_to_base_format(format);
>
> if (format == GL_DEPTH_COMPONENT ||
> format == GL_DEPTH_STENCIL ||
> @@ -125,7 +124,7 @@ _mesa_get_readpixels_transfer_ops(const struct gl_context *ctx,
> * have any effect anyway.
> */
> if (_mesa_get_format_datatype(texFormat) == GL_UNSIGNED_NORMALIZED &&
> - !_mesa_need_rgb_to_luminance_conversion(texFormat, format)) {
> + !_mesa_need_rgb_to_luminance_conversion(srcBaseFormat, dstBaseFormat)) {
> transferOps &= ~IMAGE_CLAMP_BIT;
> }
>
> @@ -164,6 +163,7 @@ _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 dstBaseFormat = _mesa_unpack_format_to_base_format(format);
>
> assert(rb);
>
> @@ -184,7 +184,8 @@ _mesa_readpixels_needs_slow_path(const struct gl_context *ctx, GLenum format,
>
> default:
> /* Color formats. */
> - if (_mesa_need_rgb_to_luminance_conversion(rb->Format, format)) {
> + if (_mesa_need_rgb_to_luminance_conversion(rb->_BaseFormat,
> + dstBaseFormat)) {
> return GL_TRUE;
> }
>
> @@ -458,6 +459,7 @@ read_rgba_pixels( struct gl_context *ctx,
> uint8_t rebase_swizzle[4];
> struct gl_framebuffer *fb = ctx->ReadBuffer;
> struct gl_renderbuffer *rb = fb->_ColorReadBuffer;
> + GLenum dstBaseFormat = _mesa_unpack_format_to_base_format(format);
>
> if (!rb)
> return;
> @@ -469,7 +471,7 @@ read_rgba_pixels( struct gl_context *ctx,
> dst_stride = _mesa_image_row_stride(packing, width, format, type);
> dst_format = _mesa_format_from_format_and_type(format, type);
> convert_rgb_to_lum =
> - _mesa_need_rgb_to_luminance_conversion(rb->Format, format);
> + _mesa_need_rgb_to_luminance_conversion(rb->_BaseFormat, dstBaseFormat);
> dst = (GLubyte *) _mesa_image_address2d(packing, pixels, width, height,
> format, type, 0, 0);
>
> diff --git a/src/mesa/main/readpix.h b/src/mesa/main/readpix.h
> index b59decd..873b825 100644
> --- a/src/mesa/main/readpix.h
> +++ b/src/mesa/main/readpix.h
> @@ -38,7 +38,8 @@ _mesa_readpixels_needs_slow_path(const struct gl_context *ctx, GLenum format,
> GLenum type, GLboolean uses_blit);
>
> extern GLboolean
> -_mesa_need_rgb_to_luminance_conversion(mesa_format texFormat, GLenum format);
> +_mesa_need_rgb_to_luminance_conversion(GLenum srcBaseFormat,
> + GLenum dstBaseFormat);
>
> extern GLboolean
> _mesa_need_luminance_to_rgb_conversion(GLenum srcBaseFormat,
More information about the mesa-dev
mailing list