On Wed, Feb 25, 2015 at 6:04 PM, Laura Ekstrand <la...@jlekstrand.net> wrote: > > This fixes a dEQP test failure. In the test, > glCopyTexSubImage2D 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 separated from the main error-checking function and > called prior to _mesa_get_current_tex_object. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89312 > --- > src/mesa/main/teximage.c | 62 > +++++++++++++++++++++++++++++++++++++++++------- > 1 file changed, 54 insertions(+), 8 deletions(-) > > diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c > index 87231df..475dc54 100644 > --- a/src/mesa/main/teximage.c > +++ b/src/mesa/main/teximage.c > @@ -2815,14 +2815,6 @@ copytexsubimage_error_check(struct gl_context *ctx, > GLuint dimensions, > } > } > > - /* check target (proxies not allowed) */ > - if (!legal_texsubimage_target(ctx, dimensions, target, dsa)) { > - _mesa_error(ctx, GL_INVALID_ENUM, "glCopyTex%sSubImage%uD(target=%s)", > - suffix, dimensions, > - _mesa_lookup_enum_by_nr(target)); > - return GL_TRUE; > - } > - > /* Check level */ > if (level < 0 || level >= _mesa_max_texture_levels(ctx, target)) { > _mesa_error(ctx, GL_INVALID_VALUE, > @@ -4090,6 +4082,16 @@ _mesa_CopyTexSubImage1D( GLenum target, GLint level, > struct gl_texture_object* texObj; > GET_CURRENT_CONTEXT(ctx); > > + /* Check target (proxies not allowed). Target must be checked prior to > + * calling _mesa_get_current_tex_object. > + */ > + if (!legal_texsubimage_target(ctx, 1, target, false)) { > + _mesa_error(ctx, GL_INVALID_ENUM, > + "glCopyTexSubImage1D(invalid target %s)", > + _mesa_lookup_enum_by_nr(target)); > + return; > + } > + > texObj = _mesa_get_current_tex_object(ctx, target); > if (!texObj) > return; > @@ -4108,6 +4110,16 @@ _mesa_CopyTexSubImage2D( GLenum target, GLint level, > struct gl_texture_object* texObj; > GET_CURRENT_CONTEXT(ctx); > > + /* Check target (proxies not allowed). Target must be checked prior to > + * calling _mesa_get_current_tex_object. > + */ > + if (!legal_texsubimage_target(ctx, 2, target, false)) { > + _mesa_error(ctx, GL_INVALID_ENUM, > + "glCopyTexSubImage2D(invalid target %s)", > + _mesa_lookup_enum_by_nr(target)); > + return; > + } > + > texObj = _mesa_get_current_tex_object(ctx, target); > if (!texObj) > return; > @@ -4127,6 +4139,16 @@ _mesa_CopyTexSubImage3D( GLenum target, GLint level, > struct gl_texture_object* texObj; > GET_CURRENT_CONTEXT(ctx); > > + /* Check target (proxies not allowed). Target must be checked prior to > + * calling _mesa_get_current_tex_object. > + */ > + if (!legal_texsubimage_target(ctx, 3, target, false)) { > + _mesa_error(ctx, GL_INVALID_ENUM, > + "glCopyTexSubImage3D(invalid target %s)", > + _mesa_lookup_enum_by_nr(target)); > + return; > + } > + > texObj = _mesa_get_current_tex_object(ctx, target); > if (!texObj) > return; > @@ -4147,6 +4169,14 @@ _mesa_CopyTextureSubImage1D(GLuint texture, GLint > level, > if (!texObj) > return; > > + /* Check target (proxies not allowed). */ > + if (!legal_texsubimage_target(ctx, 1, texObj->Target, true)) { > + _mesa_error(ctx, GL_INVALID_ENUM, > + "glCopyTextureSubImage1D(invalid target %s)", > + _mesa_lookup_enum_by_nr(texObj->Target)); > + return; > + } > + > _mesa_copy_texture_sub_image(ctx, 1, texObj, texObj->Target, level, > xoffset, 0, 0, x, y, width, 1, true); > } > @@ -4163,6 +4193,14 @@ _mesa_CopyTextureSubImage2D(GLuint texture, GLint > level, > if (!texObj) > return; > > + /* Check target (proxies not allowed). */ > + if (!legal_texsubimage_target(ctx, 2, texObj->Target, true)) { > + _mesa_error(ctx, GL_INVALID_ENUM, > + "glCopyTextureSubImage2D(invalid target %s)", > + _mesa_lookup_enum_by_nr(texObj->Target)); > + return; > + } > + > _mesa_copy_texture_sub_image(ctx, 2, texObj, texObj->Target, level, > xoffset, yoffset, 0, > x, y, width, height, true); > @@ -4182,6 +4220,14 @@ _mesa_CopyTextureSubImage3D(GLuint texture, GLint > level, > if (!texObj) > return; > > + /* Check target (proxies not allowed). */ > + if (!legal_texsubimage_target(ctx, 3, texObj->Target, true)) { > + _mesa_error(ctx, GL_INVALID_ENUM, > + "glCopyTextureSubImage3D(invalid target %s)", > + _mesa_lookup_enum_by_nr(texObj->Target)); > + return; > + } > + > _mesa_copy_texture_sub_image(ctx, 3, texObj, texObj->Target, level, > xoffset, yoffset, zoffset, > x, y, width, height, true); > -- > 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