mesa: fix error checking for getting zero-sized texture images
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 24 Jul 2015 00:18:57 +0000 (20:18 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Fri, 24 Jul 2015 21:09:27 +0000 (17:09 -0400)
Commit 17f714836 (mesa: rearrange texture error checking order) moved
the width/height/depth == 0 allowance before checking if the image was
there. This was in part due to depth having to be == 1 for 2D images and
width having to be == 1 for 1D images. Instead relax the height/depth
checks to also accept 0 as valid.

With this change,

  bin/arb_direct_state_access-get-textures

starts passing again.

Fixes: 17f714836 (mesa: rearrange texture error checking order)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/main/texgetimage.c

index cdbd61877085c83fb010c4ca25d399e966650627..c0ccce3d50eb702a9d34d0ae8d55091402605a3d 100644 (file)
@@ -928,13 +928,6 @@ dimensions_error_check(struct gl_context *ctx,
    const struct gl_texture_image *texImage;
    int i;
 
-   if (width == 0 || height == 0 || depth == 0) {
-      /* Not an error, but nothing to do.  Return 'true' so that the
-       * caller simply returns.
-       */
-      return true;
-   }
-
    if (xoffset < 0) {
       _mesa_error(ctx, GL_INVALID_VALUE, "%s(xoffset = %d)", caller, xoffset);
       return true;
@@ -973,7 +966,7 @@ dimensions_error_check(struct gl_context *ctx,
                      "%s(1D, yoffset = %d)", caller, yoffset);
          return true;
       }
-      if (height != 1) {
+      if (height > 1) {
          _mesa_error(ctx, GL_INVALID_VALUE,
                      "%s(1D, height = %d)", caller, height);
          return true;
@@ -987,7 +980,7 @@ dimensions_error_check(struct gl_context *ctx,
                      "%s(zoffset = %d)", caller, zoffset);
          return true;
       }
-      if (depth != 1) {
+      if (depth > 1) {
          _mesa_error(ctx, GL_INVALID_VALUE,
                      "%s(depth = %d)", caller, depth);
          return true;
@@ -1086,6 +1079,13 @@ dimensions_error_check(struct gl_context *ctx,
       }
    }
 
+   if (width == 0 || height == 0 || depth == 0) {
+      /* Not an error, but nothing to do.  Return 'true' so that the
+       * caller simply returns.
+       */
+      return true;
+   }
+
    return false;
 }