[Mesa-dev] [PATCH 15/41] main: set_tex_parameteri now handles errors according to the OpenGL 4.5 Specification.

Laura Ekstrand laura at jlekstrand.net
Mon Jan 5 15:02:53 PST 2015


These comments have been addressed:
http://cgit.freedesktop.org/~ldeks/mesa/commit/?h=adsa-textures&id=fe7abbcd2356a25758791bf1a66654936a7a1837

On Tue, Dec 30, 2014 at 4:03 PM, Anuj Phogat <anuj.phogat at gmail.com> wrote:

> On Tue, Dec 16, 2014 at 6:52 AM, Laura Ekstrand <laura at jlekstrand.net>
> wrote:
> > Beginning in the OpenGL 4.3 core specification, some error handling has
> > changed. As an example, changing sampler states with a multisample target
> > throws INVALID_ENUM rather than INVALID_OPERATION.
> Patch also changes error handling for GL_TEXTURE_RECTANGLE. It'll be
> nice to provide the spec reference for the change in the commit message.
>
> > ---
> >  src/mesa/main/texparam.c | 70
> ++++++++++++++++++++++++++++++------------------
> >  1 file changed, 44 insertions(+), 26 deletions(-)
> >
> > diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
> > index e40fb24..70685f2 100644
> > --- a/src/mesa/main/texparam.c
> > +++ b/src/mesa/main/texparam.c
> > @@ -234,12 +234,12 @@ target_allows_setting_sampler_parameters(GLenum
> target)
> >  static GLboolean
> >  set_tex_parameteri(struct gl_context *ctx,
> >                     struct gl_texture_object *texObj,
> > -                   GLenum pname, const GLint *params)
> > +                   GLenum pname, const GLint *params, bool dsa)
> >  {
> >     switch (pname) {
> >     case GL_TEXTURE_MIN_FILTER:
> >        if (!target_allows_setting_sampler_parameters(texObj->Target))
> > -         goto invalid_operation;
> > +         goto invalid_enum;
> >
> >        if (texObj->Sampler.MinFilter == params[0])
> >           return GL_FALSE;
> > @@ -267,7 +267,7 @@ set_tex_parameteri(struct gl_context *ctx,
> >
> >     case GL_TEXTURE_MAG_FILTER:
> >        if (!target_allows_setting_sampler_parameters(texObj->Target))
> > -         goto invalid_operation;
> > +         goto invalid_enum;
> >
> >        if (texObj->Sampler.MagFilter == params[0])
> >           return GL_FALSE;
> > @@ -284,7 +284,7 @@ set_tex_parameteri(struct gl_context *ctx,
> >
> >     case GL_TEXTURE_WRAP_S:
> >        if (!target_allows_setting_sampler_parameters(texObj->Target))
> > -         goto invalid_operation;
> > +         goto invalid_enum;
> >
> >        if (texObj->Sampler.WrapS == params[0])
> >           return GL_FALSE;
> > @@ -297,7 +297,7 @@ set_tex_parameteri(struct gl_context *ctx,
> >
> >     case GL_TEXTURE_WRAP_T:
> >        if (!target_allows_setting_sampler_parameters(texObj->Target))
> > -         goto invalid_operation;
> > +         goto invalid_enum;
> >
> >        if (texObj->Sampler.WrapT == params[0])
> >           return GL_FALSE;
> > @@ -310,7 +310,7 @@ set_tex_parameteri(struct gl_context *ctx,
> >
> >     case GL_TEXTURE_WRAP_R:
> >        if (!target_allows_setting_sampler_parameters(texObj->Target))
> > -         goto invalid_operation;
> > +         goto invalid_enum;
> >
> >        if (texObj->Sampler.WrapR == params[0])
> >           return GL_FALSE;
> > @@ -332,10 +332,17 @@ set_tex_parameteri(struct gl_context *ctx,
> >             texObj->Target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY) &&
> params[0] != 0)
> >           goto invalid_operation;
> >
> > -      if (params[0] < 0 ||
> > -          (texObj->Target == GL_TEXTURE_RECTANGLE_ARB && params[0] !=
> 0)) {
> > +      if (params[0] < 0) {
> >           _mesa_error(ctx, GL_INVALID_VALUE,
> > -                     "glTexParameter(param=%d)", params[0]);
> > +                     "glTex%sParameter(param=%d)", dsa ? "ture" : "",
> > +                     params[0]);
> > +         return GL_FALSE;
> > +      }
> > +      if (texObj->Target == GL_TEXTURE_RECTANGLE_ARB && params[0] != 0)
> {
> > +         _mesa_error(ctx, GL_INVALID_OPERATION,
> > +                     "glTex%sParameter(target=%s, param=%d)",
> > +                     dsa ? "true" : "",
> > +                     _mesa_lookup_enum_by_nr(texObj->Target),
> params[0]);
> >           return GL_FALSE;
> >        }
> >        incomplete(ctx, texObj);
> > @@ -355,7 +362,8 @@ set_tex_parameteri(struct gl_context *ctx,
> >        if (params[0] < 0 ||
> >            (texObj->Target == GL_TEXTURE_RECTANGLE_ARB && params[0] >
> 0)) {
> >           _mesa_error(ctx, GL_INVALID_VALUE,
> > -                     "glTexParameter(param=%d)", params[0]);
> > +                     "glTex%sParameter(param=%d)", dsa ? "ture" : "",
> > +                     params[0]);
> >           return GL_FALSE;
> >        }
> >        incomplete(ctx, texObj);
> > @@ -392,7 +400,7 @@ set_tex_parameteri(struct gl_context *ctx,
> >            || _mesa_is_gles3(ctx)) {
> >
> >           if (!target_allows_setting_sampler_parameters(texObj->Target))
> > -            goto invalid_operation;
> > +            goto invalid_enum;
> >
> >           if (texObj->Sampler.CompareMode == params[0])
> >              return GL_FALSE;
> > @@ -411,7 +419,7 @@ set_tex_parameteri(struct gl_context *ctx,
> >            || _mesa_is_gles3(ctx)) {
> >
> >           if (!target_allows_setting_sampler_parameters(texObj->Target))
> > -            goto invalid_operation;
> > +            goto invalid_enum;
> >
> >           if (texObj->Sampler.CompareFunc == params[0])
> >              return GL_FALSE;
> > @@ -486,7 +494,8 @@ set_tex_parameteri(struct gl_context *ctx,
> >           const GLint swz = comp_to_swizzle(params[0]);
> >           if (swz < 0) {
> >              _mesa_error(ctx, GL_INVALID_ENUM,
> > -                        "glTexParameter(swizzle 0x%x)", params[0]);
> > +                        "glTex%sParameter(swizzle 0x%x)", dsa ? "ture"
> : "",
> > +                        params[0]);
> >              return GL_FALSE;
> >           }
> >           ASSERT(comp < 4);
> > @@ -511,7 +520,8 @@ set_tex_parameteri(struct gl_context *ctx,
> >              }
> >              else {
> >                 _mesa_error(ctx, GL_INVALID_ENUM,
> > -                           "glTexParameter(swizzle 0x%x)",
> params[comp]);
> > +                           "glTex%sParameter(swizzle 0x%x)",
> > +                           dsa ? "ture" : "", params[comp]);
> >                 return GL_FALSE;
> >              }
> >           }
> > @@ -525,7 +535,7 @@ set_tex_parameteri(struct gl_context *ctx,
> >           GLenum decode = params[0];
> >
> >           if (!target_allows_setting_sampler_parameters(texObj->Target))
> > -            goto invalid_operation;
> > +            goto invalid_enum;
> >
> >          if (decode == GL_DECODE_EXT || decode == GL_SKIP_DECODE_EXT) {
> >             if (texObj->Sampler.sRGBDecode != decode) {
> > @@ -543,7 +553,7 @@ set_tex_parameteri(struct gl_context *ctx,
> >           GLenum param = params[0];
> >
> >           if (!target_allows_setting_sampler_parameters(texObj->Target))
> > -            goto invalid_operation;
> > +            goto invalid_enum;
> >
> >           if (param != GL_TRUE && param != GL_FALSE) {
> >              goto invalid_param;
> > @@ -561,17 +571,25 @@ set_tex_parameteri(struct gl_context *ctx,
> >     }
> >
> >  invalid_pname:
> > -   _mesa_error(ctx, GL_INVALID_ENUM, "glTexParameter(pname=%s)",
> > -               _mesa_lookup_enum_by_nr(pname));
> > +   _mesa_error(ctx, GL_INVALID_ENUM, "glTex%sParameter(pname=%s)",
> > +               dsa ? "ture" : "", _mesa_lookup_enum_by_nr(pname));
> >     return GL_FALSE;
> >
> >  invalid_param:
> > -   _mesa_error(ctx, GL_INVALID_ENUM, "glTexParameter(param=%s)",
> > +   _mesa_error(ctx, GL_INVALID_ENUM, "glTex%sParameter(param=%s)",
> > +               dsa ? "ture" : "",
> >                 _mesa_lookup_enum_by_nr(params[0]));
> >     return GL_FALSE;
> >
> >  invalid_operation:
> > -   _mesa_error(ctx, GL_INVALID_OPERATION, "glTexParameter(pname=%s)",
> > +   _mesa_error(ctx, GL_INVALID_OPERATION, "glTex%sParameter(pname=%s)",
> > +               dsa ? "ture" : "",
> > +               _mesa_lookup_enum_by_nr(pname));
> > +   return GL_FALSE;
> > +
> > +invalid_enum:
> > +   _mesa_error(ctx, GL_INVALID_ENUM, "glTex%sParameter(pname=%s)",
> > +               dsa ? "ture" : "",
> >                 _mesa_lookup_enum_by_nr(pname));
> >     return GL_FALSE;
> >  }
> > @@ -736,7 +754,7 @@ _mesa_TexParameterf(GLenum target, GLenum pname,
> GLfloat param)
> >                  ((param < INT_MIN) ? INT_MIN : (GLint) (param - 0.5));
> >
> >           p[1] = p[2] = p[3] = 0;
> > -         need_update = set_tex_parameteri(ctx, texObj, pname, p);
> > +         need_update = set_tex_parameteri(ctx, texObj, pname, p, false);
> >        }
> >        break;
> >     default:
> > @@ -786,7 +804,7 @@ _mesa_TexParameterfv(GLenum target, GLenum pname,
> const GLfloat *params)
> >           GLint p[4];
> >           p[0] = (GLint) params[0];
> >           p[1] = p[2] = p[3] = 0;
> > -         need_update = set_tex_parameteri(ctx, texObj, pname, p);
> > +         need_update = set_tex_parameteri(ctx, texObj, pname, p, false);
> >        }
> >        break;
> >     case GL_TEXTURE_CROP_RECT_OES:
> > @@ -797,7 +815,7 @@ _mesa_TexParameterfv(GLenum target, GLenum pname,
> const GLfloat *params)
> >           iparams[1] = (GLint) params[1];
> >           iparams[2] = (GLint) params[2];
> >           iparams[3] = (GLint) params[3];
> > -         need_update = set_tex_parameteri(ctx, texObj, pname, iparams);
> > +         need_update = set_tex_parameteri(ctx, texObj, pname, iparams,
> false);
> >        }
> >        break;
> >     case GL_TEXTURE_SWIZZLE_R_EXT:
> > @@ -813,7 +831,7 @@ _mesa_TexParameterfv(GLenum target, GLenum pname,
> const GLfloat *params)
> >              p[2] = (GLint) params[2];
> >              p[3] = (GLint) params[3];
> >           }
> > -         need_update = set_tex_parameteri(ctx, texObj, pname, p);
> > +         need_update = set_tex_parameteri(ctx, texObj, pname, p, false);
> >        }
> >        break;
> >     default:
> > @@ -859,7 +877,7 @@ _mesa_TexParameteri(GLenum target, GLenum pname,
> GLint param)
> >           GLint iparam[4];
> >           iparam[0] = param;
> >           iparam[1] = iparam[2] = iparam[3] = 0;
> > -         need_update = set_tex_parameteri(ctx, texObj, pname, iparam);
> > +         need_update = set_tex_parameteri(ctx, texObj, pname, iparam,
> false);
> >        }
> >     }
> >
> > @@ -909,7 +927,7 @@ _mesa_TexParameteriv(GLenum target, GLenum pname,
> const GLint *params)
> >        break;
> >     default:
> >        /* this will generate an error if pname is illegal */
> > -      need_update = set_tex_parameteri(ctx, texObj, pname, params);
> > +      need_update = set_tex_parameteri(ctx, texObj, pname, params,
> false);
> >     }
> >
> >     if (ctx->Driver.TexParameter && need_update) {
> > --
> > 2.1.0
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150105/6e091706/attachment-0001.html>


More information about the mesa-dev mailing list