This patch makes glCopyImageSubData require mipmap completeness when the
texture object's built-in sampler object has a mipmapping MinFilter.

Fixes (on i965):
dEQP-GLES31.functional.debug.negative_coverage.*.buffer.copy_image_sub_data

Signed-off-by: Kenneth Graunke <kenn...@whitecape.org>
---
 src/mesa/main/copyimage.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

Resending the same patch as before.  The Khronos OpenGL ARB and ES working
group both decided that although this behavior is unfortunate and strange,
Android's CTS requires it and so everybody else's implementations already
work this way.

This patch will break several Piglit tests.  You need these patches:

    https://patchwork.freedesktop.org/patch/146384/
    https://patchwork.freedesktop.org/patch/146385/

This patch will also break several GL 4.5 CTS tests.  You need this patch:

    https://gerrit.khronos.org/849

    Or for those without Khronos access:
    
http://whitecape.org/paste/0001-Set-nearest-filtering-in-GL-CopyImage-tests.patch

diff --git a/src/mesa/main/copyimage.c b/src/mesa/main/copyimage.c
index cf25159e880..877c8ac246d 100644
--- a/src/mesa/main/copyimage.c
+++ b/src/mesa/main/copyimage.c
@@ -149,9 +149,30 @@ prepare_target(struct gl_context *ctx, GLuint name, GLenum 
target,
          return false;
       }
 
+      /* The ARB_copy_image specification says:
+       *
+       *    "INVALID_OPERATION is generated if either object is a texture and
+       *     the texture is not complete (as defined in section 3.9.14)"
+       *
+       * The cited section says:
+       *
+       *    "Using the preceding definitions, a texture is complete unless any
+       *     of the following conditions hold true: [...]
+       *
+       *     * The minification filter requires a mipmap (is neither NEAREST
+       *       nor LINEAR), and the texture is not mipmap complete."
+       *
+       * This imposes the bizarre restriction that glCopyImageSubData requires
+       * mipmap completion at times, which dEQP mandates, and other drivers
+       * appear to implement.  We don't have any texture units here, so we
+       * can't look at any bound separate sampler objects...it appears that
+       * you're supposed to use the sampler object which is built-in to the
+       * texture object.
+       *
+       * See https://cvs.khronos.org/bugzilla/show_bug.cgi?id=16224.
+       */
       _mesa_test_texobj_completeness(ctx, texObj);
-      if (!texObj->_BaseComplete ||
-          (level != 0 && !texObj->_MipmapComplete)) {
+      if (!_mesa_is_texture_complete(texObj, &texObj->Sampler)) {
          _mesa_error(ctx, GL_INVALID_OPERATION,
                      "glCopyImageSubData(%sName incomplete)", dbg_prefix);
          return false;
-- 
2.12.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to