[Mesa-dev] [PATCH] mesa/main: refactor sampler parameter error codepath

Marek Olšák maraeo at gmail.com
Mon Feb 27 13:27:32 UTC 2017


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Fri, Feb 24, 2017 at 12:42 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> This is similar to what we do in the texture error codepath.
> While we are at it, update the specification comment with
> latest GL 4.5 spec.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/mesa/main/samplerobj.c | 139 +++++++++++++++++----------------------------
>  1 file changed, 52 insertions(+), 87 deletions(-)
>
> diff --git a/src/mesa/main/samplerobj.c b/src/mesa/main/samplerobj.c
> index 9326956e2f..19ee44b562 100644
> --- a/src/mesa/main/samplerobj.c
> +++ b/src/mesa/main/samplerobj.c
> @@ -799,26 +799,40 @@ set_sampler_srgb_decode(struct gl_context *ctx,
>     return GL_TRUE;
>  }
>
> -void GLAPIENTRY
> -_mesa_SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
> +static struct gl_sampler_object *
> +sampler_parameter_error_check(struct gl_context *ctx, GLuint sampler,
> +                              const char *name)
>  {
>     struct gl_sampler_object *sampObj;
> -   GLuint res;
> -   GET_CURRENT_CONTEXT(ctx);
>
>     sampObj = _mesa_lookup_samplerobj(ctx, sampler);
>     if (!sampObj) {
> -      /* '3.8.2 Sampler Objects' section of the GL-ES 3.0 specification states:
> -       *
> -       *     "An INVALID_OPERATION error is generated if sampler is not the name
> -       *     of a sampler object previously returned from a call to GenSamplers."
> +      /* OpenGL 4.5 spec, section "8.2 Sampler Objects", page 176 of the PDF
> +       * states:
>         *
> +       *    "An INVALID_OPERATION error is generated if sampler is not the name
> +       *    of a sampler object previously returned from a call to
> +       *    GenSamplers."
>         */
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glSamplerParameteri(sampler %u)", sampler);
> -      return;
> +      _mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid sampler)", name);
> +      return NULL;
>     }
>
> +   return sampObj;
> +}
> +
> +void GLAPIENTRY
> +_mesa_SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
> +{
> +   struct gl_sampler_object *sampObj;
> +   GLuint res;
> +   GET_CURRENT_CONTEXT(ctx);
> +
> +   sampObj = sampler_parameter_error_check(ctx, sampler,
> +                                           "glSamplerParameteri");
> +   if (!sampObj)
> +      return;
> +
>     switch (pname) {
>     case GL_TEXTURE_WRAP_S:
>        res = set_sampler_wrap_s(ctx, sampObj, param);
> @@ -897,18 +911,10 @@ _mesa_SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
>     GLuint res;
>     GET_CURRENT_CONTEXT(ctx);
>
> -   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
> -   if (!sampObj) {
> -      /* '3.8.2 Sampler Objects' section of the GL-ES 3.0 specification states:
> -       *
> -       *     "An INVALID_OPERATION error is generated if sampler is not the name
> -       *     of a sampler object previously returned from a call to GenSamplers."
> -       *
> -       */
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glSamplerParameterf(sampler %u)", sampler);
> +   sampObj = sampler_parameter_error_check(ctx, sampler,
> +                                           "glSamplerParameterf");
> +   if (!sampObj)
>        return;
> -   }
>
>     switch (pname) {
>     case GL_TEXTURE_WRAP_S:
> @@ -987,17 +993,10 @@ _mesa_SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *params)
>     GLuint res;
>     GET_CURRENT_CONTEXT(ctx);
>
> -   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
> -   if (!sampObj) {
> -      /* '3.8.2 Sampler Objects' section of the GL-ES 3.0 specification states:
> -       *
> -       *     "An INVALID_OPERATION error is generated if sampler is not the name
> -       *     of a sampler object previously returned from a call to GenSamplers."
> -       */
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glSamplerParameteriv(sampler %u)", sampler);
> +   sampObj = sampler_parameter_error_check(ctx, sampler,
> +                                           "glSamplerParameteriv");
> +   if (!sampObj)
>        return;
> -   }
>
>     switch (pname) {
>     case GL_TEXTURE_WRAP_S:
> @@ -1084,18 +1083,10 @@ _mesa_SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *params)
>     GLuint res;
>     GET_CURRENT_CONTEXT(ctx);
>
> -   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
> -   if (!sampObj) {
> -      /* '3.8.2 Sampler Objects' section of the GL-ES 3.0 specification states:
> -       *
> -       *     "An INVALID_OPERATION error is generated if sampler is not the name
> -       *     of a sampler object previously returned from a call to GenSamplers."
> -       *
> -       */
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glSamplerParameterfv(sampler %u)", sampler);
> +   sampObj = sampler_parameter_error_check(ctx, sampler,
> +                                           "glSamplerParameterfv");
> +   if (!sampObj)
>        return;
> -   }
>
>     switch (pname) {
>     case GL_TEXTURE_WRAP_S:
> @@ -1175,12 +1166,10 @@ _mesa_SamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *params)
>     GLuint res;
>     GET_CURRENT_CONTEXT(ctx);
>
> -   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
> -   if (!sampObj) {
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glSamplerParameterIiv(sampler %u)", sampler);
> +   sampObj = sampler_parameter_error_check(ctx, sampler,
> +                                           "glSamplerParameterIiv");
> +   if (!sampObj)
>        return;
> -   }
>
>     switch (pname) {
>     case GL_TEXTURE_WRAP_S:
> @@ -1261,12 +1250,10 @@ _mesa_SamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *params)
>     GLuint res;
>     GET_CURRENT_CONTEXT(ctx);
>
> -   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
> -   if (!sampObj) {
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glSamplerParameterIuiv(sampler %u)", sampler);
> +   sampObj = sampler_parameter_error_check(ctx, sampler,
> +                                           "glSamplerParameterIuiv");
> +   if (!sampObj)
>        return;
> -   }
>
>     switch (pname) {
>     case GL_TEXTURE_WRAP_S:
> @@ -1346,18 +1333,10 @@ _mesa_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
>     struct gl_sampler_object *sampObj;
>     GET_CURRENT_CONTEXT(ctx);
>
> -   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
> -   if (!sampObj) {
> -      /* '3.8.2 Sampler Objects' section of the GL-ES 3.0 specification states:
> -       *
> -       *     "An INVALID_OPERATION error is generated if sampler is not the name
> -       *     of a sampler object previously returned from a call to GenSamplers."
> -       *
> -       */
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glGetSamplerParameteriv(sampler %u)", sampler);
> +   sampObj = sampler_parameter_error_check(ctx, sampler,
> +                                           "glGetSamplerParameteriv");
> +   if (!sampObj)
>        return;
> -   }
>
>     switch (pname) {
>     case GL_TEXTURE_WRAP_S:
> @@ -1438,18 +1417,10 @@ _mesa_GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
>     struct gl_sampler_object *sampObj;
>     GET_CURRENT_CONTEXT(ctx);
>
> -   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
> -   if (!sampObj) {
> -      /* '3.8.2 Sampler Objects' section of the GL-ES 3.0 specification states:
> -       *
> -       *     "An INVALID_OPERATION error is generated if sampler is not the name
> -       *     of a sampler object previously returned from a call to GenSamplers."
> -       *
> -       */
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glGetSamplerParameterfv(sampler %u)", sampler);
> +   sampObj = sampler_parameter_error_check(ctx, sampler,
> +                                           "glGetSamplerParameterfv");
> +   if (!sampObj)
>        return;
> -   }
>
>     switch (pname) {
>     case GL_TEXTURE_WRAP_S:
> @@ -1518,13 +1489,10 @@ _mesa_GetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params)
>     struct gl_sampler_object *sampObj;
>     GET_CURRENT_CONTEXT(ctx);
>
> -   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
> -   if (!sampObj) {
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glGetSamplerParameterIiv(sampler %u)",
> -                  sampler);
> +   sampObj = sampler_parameter_error_check(ctx, sampler,
> +                                           "glGetSamplerParameterIiv");
> +   if (!sampObj)
>        return;
> -   }
>
>     switch (pname) {
>     case GL_TEXTURE_WRAP_S:
> @@ -1593,13 +1561,10 @@ _mesa_GetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params)
>     struct gl_sampler_object *sampObj;
>     GET_CURRENT_CONTEXT(ctx);
>
> -   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
> -   if (!sampObj) {
> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> -                  "glGetSamplerParameterIuiv(sampler %u)",
> -                  sampler);
> +   sampObj = sampler_parameter_error_check(ctx, sampler,
> +                                           "glGetSamplerParameterIuiv");
> +   if (!sampObj)
>        return;
> -   }
>
>     switch (pname) {
>     case GL_TEXTURE_WRAP_S:
> --
> 2.11.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list