[Mesa-dev] [PATCH resend] mesa: Require mipmap completeness for glCopyImageSubData(), sometimes.

Kenneth Graunke kenneth at whitecape.org
Fri Mar 24 21:51:20 UTC 2017


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 <kenneth at 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



More information about the mesa-dev mailing list