[Mesa-dev] [PATCH 16/41] main: set_tex_parameterf now handles errors according to the OpenGL 4.5 Specification.
Laura Ekstrand
laura at jlekstrand.net
Mon Dec 15 17:22:31 PST 2014
Beginning in the OpenGL 4.3 core specification, certain error handling has
changed. One example shown here is that INVALID_ENUM is thrown instead of
INVALID_OPERATION when a user attempts to set sampler parameters for a
multisample target.
---
src/mesa/main/texparam.c | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
index 70685f2..df2ba3c 100644
--- a/src/mesa/main/texparam.c
+++ b/src/mesa/main/texparam.c
@@ -602,7 +602,7 @@ invalid_enum:
static GLboolean
set_tex_parameterf(struct gl_context *ctx,
struct gl_texture_object *texObj,
- GLenum pname, const GLfloat *params)
+ GLenum pname, const GLfloat *params, bool dsa)
{
switch (pname) {
case GL_TEXTURE_MIN_LOD:
@@ -610,7 +610,7 @@ set_tex_parameterf(struct gl_context *ctx,
goto invalid_pname;
if (!target_allows_setting_sampler_parameters(texObj->Target))
- goto invalid_operation;
+ goto invalid_enum;
if (texObj->Sampler.MinLod == params[0])
return GL_FALSE;
@@ -623,7 +623,7 @@ set_tex_parameterf(struct gl_context *ctx,
goto invalid_pname;
if (!target_allows_setting_sampler_parameters(texObj->Target))
- goto invalid_operation;
+ goto invalid_enum;
if (texObj->Sampler.MaxLod == params[0])
return GL_FALSE;
@@ -642,12 +642,13 @@ set_tex_parameterf(struct gl_context *ctx,
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
if (ctx->Extensions.EXT_texture_filter_anisotropic) {
if (!target_allows_setting_sampler_parameters(texObj->Target))
- goto invalid_operation;
+ goto invalid_enum;
if (texObj->Sampler.MaxAnisotropy == params[0])
return GL_FALSE;
if (params[0] < 1.0) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTexParameter(param)" );
+ _mesa_error(ctx, GL_INVALID_VALUE, "glTex%sParameter(param)",
+ dsa ? "ture" : "");
return GL_FALSE;
}
flush(ctx);
@@ -669,7 +670,7 @@ set_tex_parameterf(struct gl_context *ctx,
goto invalid_pname;
if (!target_allows_setting_sampler_parameters(texObj->Target))
- goto invalid_operation;
+ goto invalid_enum;
if (texObj->Sampler.LodBias != params[0]) {
flush(ctx);
@@ -683,7 +684,7 @@ set_tex_parameterf(struct gl_context *ctx,
goto invalid_pname;
if (!target_allows_setting_sampler_parameters(texObj->Target))
- goto invalid_operation;
+ goto invalid_enum;
flush(ctx);
/* ARB_texture_float disables clamping */
@@ -706,12 +707,14 @@ set_tex_parameterf(struct gl_context *ctx,
return GL_FALSE;
invalid_pname:
- _mesa_error(ctx, GL_INVALID_ENUM, "glTexParameter(pname=%s)",
+ _mesa_error(ctx, GL_INVALID_ENUM, "glTex%sParameter(pname=%s)",
+ dsa ? "ture" : "",
_mesa_lookup_enum_by_nr(pname));
return GL_FALSE;
-invalid_operation:
- _mesa_error(ctx, GL_INVALID_OPERATION, "glTexParameter(pname=%s)",
+invalid_enum:
+ _mesa_error(ctx, GL_INVALID_ENUM, "glTex%sParameter(pname=%s)",
+ dsa ? "ture" : "",
_mesa_lookup_enum_by_nr(pname));
return GL_FALSE;
}
@@ -763,7 +766,7 @@ _mesa_TexParameterf(GLenum target, GLenum pname, GLfloat param)
GLfloat p[4];
p[0] = param;
p[1] = p[2] = p[3] = 0.0F;
- need_update = set_tex_parameterf(ctx, texObj, pname, p);
+ need_update = set_tex_parameterf(ctx, texObj, pname, p, false);
}
}
@@ -836,7 +839,7 @@ _mesa_TexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
break;
default:
/* this will generate an error if pname is illegal */
- need_update = set_tex_parameterf(ctx, texObj, pname, params);
+ need_update = set_tex_parameterf(ctx, texObj, pname, params, false);
}
if (ctx->Driver.TexParameter && need_update) {
@@ -868,7 +871,7 @@ _mesa_TexParameteri(GLenum target, GLenum pname, GLint param)
fparam[0] = (GLfloat) param;
fparam[1] = fparam[2] = fparam[3] = 0.0F;
/* convert int param to float */
- need_update = set_tex_parameterf(ctx, texObj, pname, fparam);
+ need_update = set_tex_parameterf(ctx, texObj, pname, fparam, false);
}
break;
default:
@@ -908,7 +911,7 @@ _mesa_TexParameteriv(GLenum target, GLenum pname, const GLint *params)
fparams[1] = INT_TO_FLOAT(params[1]);
fparams[2] = INT_TO_FLOAT(params[2]);
fparams[3] = INT_TO_FLOAT(params[3]);
- need_update = set_tex_parameterf(ctx, texObj, pname, fparams);
+ need_update = set_tex_parameterf(ctx, texObj, pname, fparams, false);
}
break;
case GL_TEXTURE_MIN_LOD:
@@ -922,7 +925,7 @@ _mesa_TexParameteriv(GLenum target, GLenum pname, const GLint *params)
GLfloat fparams[4];
fparams[0] = (GLfloat) params[0];
fparams[1] = fparams[2] = fparams[3] = 0.0F;
- need_update = set_tex_parameterf(ctx, texObj, pname, fparams);
+ need_update = set_tex_parameterf(ctx, texObj, pname, fparams, false);
}
break;
default:
--
2.1.0
More information about the mesa-dev
mailing list