[Mesa-dev] [PATCHv2] mesa: Return INVALID_ENUM for glReadPixels(..., GL_DEPTH_*, ...) on ES 3

Anuj Phogat anuj.phogat at gmail.com
Tue Dec 4 10:22:23 PST 2012


On Mon, Dec 3, 2012 at 4:27 PM, Matt Turner <mattst88 at gmail.com> wrote:
> I'm not sure if this is the correct fix. The
> _mesa_es_error_check_format_and_type function (used above in the ES 1
> and 2 cases) was originally added for glTexImage checking and allows
> GL_DEPTH_STENCIL/GL_UNSIGNED_INT_24_8 combinations. Using it in ES 3
> causes other tests to regress.
>
> Fixes es3conform's packed_depth_stencil_error test.
> Cc: Anuj Phogat <anuj.phogat at gmail.com>
> Reviewed-by: Kenneth Graunke <kenneth at whitecape.org> (v1)
> ---
>  src/mesa/main/readpix.c |   22 +++++++++++++---------
>  1 files changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c
> index d6d105b..6ee7623 100644
> --- a/src/mesa/main/readpix.c
> +++ b/src/mesa/main/readpix.c
> @@ -679,7 +679,7 @@ _mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height,
>                       GLenum format, GLenum type, GLsizei bufSize,
>                        GLvoid *pixels )
>  {
> -   GLenum err;
> +   GLenum err = GL_NO_ERROR;
>
>     GET_CURRENT_CONTEXT(ctx);
>     ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
> @@ -707,17 +707,21 @@ _mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height,
>      * preferred combination.  This code doesn't know what that preferred
>      * combination is, and Mesa can handle anything valid.  Just work instead.
>      */
> -   if (_mesa_is_gles(ctx) && ctx->Version < 30) {
> -      err = _mesa_es_error_check_format_and_type(format, type, 2);
> -      if (err == GL_NO_ERROR) {
> -         if (type == GL_FLOAT || type == GL_HALF_FLOAT_OES) {
> -            err = GL_INVALID_OPERATION;
> -         } else if (format == GL_DEPTH_COMPONENT
> -                    || format == GL_DEPTH_STENCIL) {
> -            err = GL_INVALID_ENUM;
> +   if (_mesa_is_gles(ctx)) {
> +      if (ctx->version < 30) {
> +         err = _mesa_es_error_check_format_and_type(format, type, 2);
> +         if (err == GL_NO_ERROR) {
> +            if (type == GL_FLOAT || type == GL_HALF_FLOAT_OES) {
> +               err = GL_INVALID_OPERATION;
> +            }
>           }
>        }
>
> +      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_lookup_enum_by_nr(format),
> --
> 1.7.8.6
>
Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>


More information about the mesa-dev mailing list