summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTapani Pälli <tapani.palli@intel.com>2015-09-15 09:17:20 +0300
committerEmil Velikov <emil.l.velikov@gmail.com>2015-09-23 21:05:54 +0100
commit278739eb0169e25e82eae322e337e6c9a7390083 (patch)
treecb3396e4c237b93dbcdd4a68ecef634b29b9b6d6
parentae6dcfee56de0f0bf96bac2ddcf5c578a05c7f7e (diff)
mesa: fix errors when reading depth with glReadPixels
OpenGL ES 3.0 spec 3.7.2 "Transfer of Pixel Rectangles" specifies DEPTH_COMPONENT, UNSIGNED_INT as a valid couple, validation for internal format is checked by is_float_depth(). Fix regression caused by 81d2fd91a90e5b2fd9fd74792a7a7c329f0e4d29 in: ES3-CTS.gtf.GL3Tests.packed_pixels.packed_pixels Test uses GL_DEPTH_COMPONENT, UNSIGNED_INT only when GL_NV_read_depth extension is present. v2: change check in _mesa_error_check_format_and_type to be explicit for ES 2.0+, desktop OpenGL does not allow this behaviour + uses this function for both glReadPixels and glDrawPixels validation. (No Piglit regressions seen with v2.) Signed-off-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com> Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com> [v1] Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92009 Cc: "10.6 11.0" <mesa-stable@lists.freedesktop.org> (cherry picked from commit afa1efdc8522d987e3af7c7a6272021caa33eb82)
-rw-r--r--src/mesa/main/glformats.c7
-rw-r--r--src/mesa/main/readpix.c1
2 files changed, 7 insertions, 1 deletions
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index cef831ca9ec..0ea5b2f90f4 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -494,7 +494,8 @@ _mesa_bytes_per_pixel(GLenum format, GLenum type)
else
return -1;
case GL_UNSIGNED_INT_24_8_EXT:
- if (format == GL_DEPTH_STENCIL_EXT)
+ if (format == GL_DEPTH_COMPONENT ||
+ format == GL_DEPTH_STENCIL_EXT)
return sizeof(GLuint);
else
return -1;
@@ -1691,6 +1692,10 @@ _mesa_error_check_format_and_type(const struct gl_context *ctx,
return GL_INVALID_OPERATION;
case GL_UNSIGNED_INT_24_8:
+ /* Depth buffer OK to read in OpenGL ES (NV_read_depth). */
+ if (ctx->API == API_OPENGLES2 && format == GL_DEPTH_COMPONENT)
+ return GL_NO_ERROR;
+
if (format != GL_DEPTH_STENCIL) {
return GL_INVALID_OPERATION;
}
diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c
index e7d28328c79..18ab06afdba 100644
--- a/src/mesa/main/readpix.c
+++ b/src/mesa/main/readpix.c
@@ -963,6 +963,7 @@ read_pixels_es3_error_check(GLenum format, GLenum type,
return GL_NO_ERROR;
break;
case GL_UNSIGNED_SHORT:
+ case GL_UNSIGNED_INT:
case GL_UNSIGNED_INT_24_8:
if (!is_float_depth)
return GL_NO_ERROR;