On Wed, Feb 25, 2015 at 3:58 PM, Laura Ekstrand <la...@jlekstrand.net> wrote: > This fixes a dEQP test failure. In the test, > glCompressedTexSubImage2D was called with target = 0 and failed to throw > INVALID ENUM. This failure was caused by _mesa_get_current_tex_object(ctx, > target) being called before the target checking. To remedy this, target > checking was made into its own function and called prior to > _mesa_get_current_tex_object. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89311 > --- > src/mesa/main/teximage.c | 80 > +++++++++++++++++++++++++++++++++++++++--------- > 1 file changed, 65 insertions(+), 15 deletions(-) > > diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c > index faec444..87231df 100644 > --- a/src/mesa/main/teximage.c > +++ b/src/mesa/main/teximage.c > @@ -4456,25 +4456,21 @@ out: > > > /** > - * Error checking for glCompressedTexSubImage[123]D(). > + * Target checking for glCompressedTexSubImage[123]D(). > * \return GL_TRUE if error, GL_FALSE if no error > + * Must come before other error checking so that the texture object can > + * be correctly retrieved using _mesa_get_current_tex_object. > */ > static GLboolean > -compressed_subtexture_error_check(struct gl_context *ctx, GLint dims, > - const struct gl_texture_object *texObj, > - GLenum target, GLint level, > - GLint xoffset, GLint yoffset, GLint > zoffset, > - GLsizei width, GLsizei height, GLsizei > depth, > - GLenum format, GLsizei imageSize, bool dsa) > +compressed_subtexture_target_check(struct gl_context *ctx, GLenum target, > + GLint dims, GLenum format, bool dsa, > + const char *caller) > { > - struct gl_texture_image *texImage; > - GLint expectedSize; > GLboolean targetOK; > - const char *suffix = dsa ? "ture" : ""; > > if (dsa && target == GL_TEXTURE_RECTANGLE) { > - _mesa_error(ctx, GL_INVALID_OPERATION, > - "glCompressedSubTexture%dD(target)", dims); > + _mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid target %s)", caller, > + _mesa_lookup_enum_by_nr(target)); > return GL_TRUE; > } > > @@ -4537,7 +4533,9 @@ compressed_subtexture_error_check(struct gl_context > *ctx, GLint dims, > } > if (invalidformat) { > _mesa_error(ctx, GL_INVALID_OPERATION, > - "glCompressedTex%sSubImage%uD(target)", suffix, > dims); > + "%s(invalid target %s for format %s)", caller, > + _mesa_lookup_enum_by_nr(target), > + _mesa_lookup_enum_by_nr(format)); > return GL_TRUE; > } > } > @@ -4551,11 +4549,30 @@ compressed_subtexture_error_check(struct gl_context > *ctx, GLint dims, > } > > if (!targetOK) { > - _mesa_error(ctx, GL_INVALID_ENUM, > - "glCompressedTex%sSubImage%uD(target)", suffix, dims); > + _mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid target %s)", caller, > + _mesa_lookup_enum_by_nr(target)); > return GL_TRUE; > } > > + return GL_FALSE; > +} > + > +/** > + * Error checking for glCompressedTexSubImage[123]D(). > + * \return GL_TRUE if error, GL_FALSE if no error > + */ > +static GLboolean > +compressed_subtexture_error_check(struct gl_context *ctx, GLint dims, > + const struct gl_texture_object *texObj, > + GLenum target, GLint level, > + GLint xoffset, GLint yoffset, GLint > zoffset, > + GLsizei width, GLsizei height, GLsizei > depth, > + GLenum format, GLsizei imageSize, bool dsa) > +{ > + struct gl_texture_image *texImage; > + GLint expectedSize; > + const char *suffix = dsa ? "ture" : ""; > + > /* this will catch any invalid compressed format token */ > if (!_mesa_is_compressed_format(ctx, format)) { > _mesa_error(ctx, GL_INVALID_ENUM, > @@ -4702,6 +4719,11 @@ _mesa_CompressedTexSubImage1D(GLenum target, GLint > level, GLint xoffset, > > GET_CURRENT_CONTEXT(ctx); > > + if (compressed_subtexture_target_check(ctx, target, 1, format, false, > + "glCompressedTexSubImage1D")) { > + return; > + } > + > texObj = _mesa_get_current_tex_object(ctx, target); > if (!texObj) > return; > @@ -4737,6 +4759,12 @@ _mesa_CompressedTextureSubImage1D(GLuint texture, > GLint level, GLint xoffset, > if (!texObj) > return; > > + if (compressed_subtexture_target_check(ctx, texObj->Target, 1, format, > + true, > + "glCompressedTextureSubImage1D")) { > + return; > + } > + > if (compressed_subtexture_error_check(ctx, 1, texObj, texObj->Target, > level, xoffset, 0, 0, > width, 1, 1, > @@ -4767,6 +4795,11 @@ _mesa_CompressedTexSubImage2D(GLenum target, GLint > level, GLint xoffset, > > GET_CURRENT_CONTEXT(ctx); > > + if (compressed_subtexture_target_check(ctx, target, 2, format, false, > + "glCompressedTexSubImage2D")) { > + return; > + } > + > texObj = _mesa_get_current_tex_object(ctx, target); > if (!texObj) > return; > @@ -4805,6 +4838,12 @@ _mesa_CompressedTextureSubImage2D(GLuint texture, > GLint level, GLint xoffset, > if (!texObj) > return; > > + if (compressed_subtexture_target_check(ctx, texObj->Target, 2, format, > + true, > + "glCompressedTextureSubImage2D")) { > + return; > + } > + > if (compressed_subtexture_error_check(ctx, 2, texObj, texObj->Target, > level, xoffset, yoffset, 0, > width, height, 1, > @@ -4833,6 +4872,11 @@ _mesa_CompressedTexSubImage3D(GLenum target, GLint > level, GLint xoffset, > > GET_CURRENT_CONTEXT(ctx); > > + if (compressed_subtexture_target_check(ctx, target, 3, format, false, > + "glCompressedTexSubImage3D")) { > + return; > + } > + > texObj = _mesa_get_current_tex_object(ctx, target); > if (!texObj) > return; > @@ -4874,6 +4918,12 @@ _mesa_CompressedTextureSubImage3D(GLuint texture, > GLint level, GLint xoffset, > if (!texObj) > return; > > + if (compressed_subtexture_target_check(ctx, texObj->Target, 3, format, > + true, > + "glCompressedTextureSubImage3D")) { > + return; > + } > + > if (compressed_subtexture_error_check(ctx, 3, texObj, texObj->Target, > level, xoffset, yoffset, zoffset, > width, height, depth, > -- > 2.1.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Reviewed-by: Anuj Phogat <anuj.pho...@gmail.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev