From: Rob Clark <[email protected]> These extensions allow reading depth/stencil for GLES contexts, which is useful for tools like apitrace.
Signed-off-by: Rob Clark <[email protected]> --- 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 _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
