On 09/24/2012 06:42 PM, Eric Anholt wrote:
Brian Paul<[email protected]>  writes:

From: Brian Paul<[email protected]>

If a subtexture region isn't aligned to the compressed block size,
return GL_INVALID_OPERATION, not gl_INVALID_VALUE.

NOTE: This is a candidate for the stable branches.
---
  src/mesa/main/teximage.c |    6 +++---
  1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 08af668..c22e853 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -3574,13 +3574,13 @@ compressed_subtexture_error_check(struct gl_context 
*ctx, GLint dimensions,
     get_compressed_block_size(format,&bw,&bh);

     if ((xoffset % bw != 0) || (yoffset % bh != 0))
-      return GL_INVALID_VALUE;
+      return GL_INVALID_OPERATION;

     if ((width % bw != 0)&&  width != 2&&  width != 1)
-      return GL_INVALID_VALUE;
+      return GL_INVALID_OPERATION;

     if ((height % bh != 0)&&  height != 2&&  height != 1)
-      return GL_INVALID_VALUE;
+      return GL_INVALID_OPERATION;

Reviewed-by: Eric Anholt<[email protected]>

The conditions are pretty bogus, though.  The s3tc text says:

     INVALID_OPERATION is generated by CompressedTexSubImage2D if
     TEXTURE_INTERNAL_FORMAT is COMPRESSED_RGB_S3TC_DXT1_EXT,
     COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
     COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply:

         *<width>  is not a multiple of four, and<width>  plus<xoffset>  is not
           equal to TEXTURE_WIDTH;

         *<height>  is not a multiple of four, and<height>  plus<yoffset>  is
           not equal to TEXTURE_HEIGHT; or

and the 3.1 core spec text says (section 3.8.3):

     These commands will result in an INVALID_OPERATION error if one of
     the following conditions occurs:

     • width is not a multiple of four, and width + xoffset is not equal
       to the value of TEXTURE_WIDTH.

     • height is not a multiple of four, and height + yoffset is not
       equal to the value of TEXTURE_HEIGHT.

     • xoffset or yoffset is not a multiple of four.

Looks like this code wants to live in
compressed_subtexture_error_check2(), which has some overlapping checks
in it.

The follow-on patches consolidate all this texsubimage error checking code.

-Brian

_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to