[Mesa-dev] [PATCH] mesa: add NV_read_{depth, stencil, depth_stencil} extensions
Rob Clark
robdclark at gmail.com
Mon Aug 10 04:02:19 PDT 2015
From: Rob Clark <robclark at freedesktop.org>
These extensions allow reading depth/stencil for GLES contexts, which is
useful for tools like apitrace.
Signed-off-by: Rob Clark <robclark at freedesktop.org>
---
I have a patch, which I will send out after some cleanup, that makes
apitrace able to dump depth/stencil buffers with GLES, thanks to this
extension.
src/mesa/main/extensions.c | 3 +++
src/mesa/main/readpix.c | 25 +++++++++++++++++++------
2 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 2dbfabd..d934d19 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -385,6 +385,9 @@ static const struct extension extension_table[] = {
{ "GL_NV_point_sprite", o(NV_point_sprite), GL, 2001 },
{ "GL_NV_primitive_restart", o(NV_primitive_restart), GLL, 2002 },
{ "GL_NV_read_buffer", o(dummy_true), ES2, 2011 },
+ { "GL_NV_read_depth", o(dummy_true), ES2, 2011 },
+ { "GL_NV_read_depth_stencil", o(dummy_true), ES2, 2011 },
+ { "GL_NV_read_stencil", o(dummy_true), ES2, 2011 },
{ "GL_NV_texgen_reflection", o(dummy_true), GLL, 1999 },
{ "GL_NV_texture_barrier", o(NV_texture_barrier), GL, 2009 },
{ "GL_NV_texture_env_combine4", o(NV_texture_env_combine4), GLL, 1999 },
diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c
index 2744232..65751aa 100644
--- a/src/mesa/main/readpix.c
+++ b/src/mesa/main/readpix.c
@@ -917,7 +917,9 @@ read_pixels_es3_error_check(GLenum format, GLenum type,
GLboolean is_unsigned_int = GL_FALSE;
GLboolean is_signed_int = GL_FALSE;
- if (!_mesa_is_color_format(internalFormat)) {
+ /* TODO just drop the check? Are there any formats to filter out? */
+ if (!(_mesa_is_color_format(internalFormat) ||
+ _mesa_is_depth_or_stencil_format(internalFormat))) {
return GL_INVALID_OPERATION;
}
@@ -950,6 +952,22 @@ read_pixels_es3_error_check(GLenum format, GLenum type,
(is_unsigned_int && type == GL_UNSIGNED_INT))
return GL_NO_ERROR;
break;
+ case GL_DEPTH_STENCIL:
+ if ((internalFormat == GL_DEPTH24_STENCIL8) &&
+ (type == GL_UNSIGNED_INT_24_8))
+ return GL_NO_ERROR;
+ if ((internalFormat == GL_DEPTH32F_STENCIL8) &&
+ (type == GL_FLOAT_32_UNSIGNED_INT_24_8_REV))
+ return GL_NO_ERROR;
+ break;
+ case GL_DEPTH_COMPONENT:
+ if ((internalFormat == GL_DEPTH_COMPONENT32F) &&
+ (type == GL_FLOAT))
+ return GL_NO_ERROR;
+ if ((internalFormat == GL_DEPTH_COMPONENT24) &&
+ (type == GL_UNSIGNED_INT))
+ return GL_NO_ERROR;
+ break;
}
return GL_INVALID_OPERATION;
@@ -1023,11 +1041,6 @@ _mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height,
err = read_pixels_es3_error_check(format, type, rb);
}
- if (err == GL_NO_ERROR && (format == GL_DEPTH_COMPONENT
- || format == GL_DEPTH_STENCIL)) {
- err = GL_INVALID_ENUM;
- }
-
if (err != GL_NO_ERROR) {
_mesa_error(ctx, err, "glReadPixels(invalid format %s and/or type %s)",
_mesa_enum_to_string(format),
--
2.4.3
More information about the mesa-dev
mailing list