mesa: recover target_check before get_current_tex_objects
authorJose Maria Casanova Crespo <jmcasanova@igalia.com>
Wed, 21 Aug 2019 12:16:16 +0000 (13:16 +0100)
committerJose Maria Casanova Crespo <jmcasanova@igalia.com>
Wed, 21 Aug 2019 20:26:48 +0000 (21:26 +0100)
At compressed_tex_sub_image we only can obtain the tex_object after
compressed_subtexture_target_check is validated for TEX_MODE_CURRENT.
So if the target is wrong the error is raised to the user.

This completes the fix for the regression introduced on "mesa: refactor
compressed_tex_sub_image function" of the pending failing tests:

dEQP-GLES3.functional.negative_api.texture.compressedtexsubimage3d
dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage3d

v2: Fix warning that texObj might be used uninitialized (Gert Wollny)

Fixes: 7df233d68dc ("mesa: refactor compressed_tex_sub_image function")
Reviewed-By: Gert Wollny <gert.wollny@collabora.com>
src/mesa/main/teximage.c

index e940ecd..f90765f 100644 (file)
@@ -5588,7 +5588,7 @@ compressed_tex_sub_image(unsigned dim, GLenum target, GLuint textureOrIndex,
                          const GLvoid *data, enum tex_mode mode,
                          const char *caller)
 {
-   struct gl_texture_object *texObj;
+   struct gl_texture_object *texObj = NULL;
    struct gl_texture_image *texImage;
    bool no_error = false;
    GET_CURRENT_CONTEXT(ctx);
@@ -5622,14 +5622,9 @@ compressed_tex_sub_image(unsigned dim, GLenum target, GLuint textureOrIndex,
       case TEX_MODE_CURRENT_ERROR:
       default:
          assert(textureOrIndex == 0);
-         texObj = _mesa_get_current_tex_object(ctx, target);
          break;
    }
 
-   if (!texObj)
-      return;
-
-
    if (!no_error &&
        compressed_subtexture_target_check(ctx, target, dim, format,
                                           mode == TEX_MODE_DSA_ERROR,
@@ -5637,7 +5632,12 @@ compressed_tex_sub_image(unsigned dim, GLenum target, GLuint textureOrIndex,
       return;
    }
 
-   if (!no_error && !texObj)
+   if (mode == TEX_MODE_CURRENT_NO_ERROR ||
+       mode == TEX_MODE_CURRENT_ERROR) {
+      texObj = _mesa_get_current_tex_object(ctx, target);
+   }
+
+   if (!texObj)
       return;
 
    if (!no_error &&