diff options
author | Anuj Phogat <[email protected]> | 2015-05-20 10:22:45 -0700 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2015-08-01 16:27:40 +0100 |
commit | 6321bf72be877fe3efc81bd9e3c6d645d6b6ed9a (patch) | |
tree | 93a83288e11f4fbc1b5f7c40d10490b109eaf6e4 | |
parent | acaac69ccd3d8d70044aab98dbadc5b177510eb5 (diff) |
meta: Abort meta pbo path if readpixels need signed-unsigned conversion
Meta pbo path for ReadPixels rely on BlitFramebuffer which doesn't support
signed to unsigned integer conversions and vice versa.
Without this patch, piglit test fbo_integer_readpixels_sint_uint fails, when
forced to use the meta pbo path.
v2: Make need_signed_unsigned_int_conversion() a static function. (Iago)
Bump up the comment and the commit message. (Jason)
Signed-off-by: Anuj Phogat <[email protected]>
Cc: <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Reviewed-by: Iago Toral <[email protected]>
(cherry picked from commit 0d207905e675b778739236072e7a4dfba7cd7959)
-rw-r--r-- | src/mesa/drivers/common/meta_tex_subimage.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/mesa/drivers/common/meta_tex_subimage.c b/src/mesa/drivers/common/meta_tex_subimage.c index d2552c4425d..679e1353264 100644 --- a/src/mesa/drivers/common/meta_tex_subimage.c +++ b/src/mesa/drivers/common/meta_tex_subimage.c @@ -247,6 +247,24 @@ fail: return success; } +static bool +need_signed_unsigned_int_conversion(mesa_format rbFormat, + GLenum format, GLenum type) +{ + const GLenum srcType = _mesa_get_format_datatype(rbFormat); + const bool is_dst_format_integer = _mesa_is_enum_format_integer(format); + return (srcType == GL_INT && + is_dst_format_integer && + (type == GL_UNSIGNED_INT || + type == GL_UNSIGNED_SHORT || + type == GL_UNSIGNED_BYTE)) || + (srcType == GL_UNSIGNED_INT && + is_dst_format_integer && + (type == GL_INT || + type == GL_SHORT || + type == GL_BYTE)); +} + bool _mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx, GLuint dims, struct gl_texture_image *tex_image, @@ -285,6 +303,14 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx, GLuint dims, if (_mesa_need_rgb_to_luminance_conversion(rb->Format, format)) return false; + + /* This function rely on BlitFramebuffer to fill in the pixel data for + * ReadPixels. But, BlitFrameBuffer doesn't support signed to unsigned + * or unsigned to signed integer conversions. OpenGL spec expects an + * invalid operation in that case. + */ + if (need_signed_unsigned_int_conversion(rb->Format, format, type)) + return false; } /* For arrays, use a tall (height * depth) 2D texture but taking into |