[Mesa-stable] Fwd: [Mesa-dev] [PATCH] main: Fix target checking for CompressedTexSubImage*D.
Emil Velikov
emil.l.velikov at gmail.com
Tue Mar 3 18:00:49 PST 2015
Hi Laura,
This patch does not pick cleanly against the 10.4 branch. Considering
it never got any dsa treatment do we need to backport it ? If so can
you send one to the list.
Thanks
Emil
On 28 February 2015 at 00:39, Laura Ekstrand <laura at jlekstrand.net> wrote:
> CC: 10.4, 10.5
>
>
> ---------- Forwarded message ----------
> From: Anuj Phogat <anuj.phogat at gmail.com>
> Date: Thu, Feb 26, 2015 at 11:46 AM
> Subject: Re: [Mesa-dev] [PATCH] main: Fix target checking for
> CompressedTexSubImage*D.
> To: Laura Ekstrand <laura at jlekstrand.net>
> Cc: "mesa-dev at lists.freedesktop.org" <mesa-dev at lists.freedesktop.org>
>
>
> On Wed, Feb 25, 2015 at 3:58 PM, Laura Ekstrand <laura at 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 at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
> Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
>
>
> _______________________________________________
> mesa-stable mailing list
> mesa-stable at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-stable
>
More information about the mesa-stable
mailing list