Mesa (master): mesa: Require mipmap completeness for glCopyImageSubData(), sometimes.

Kenneth Graunke kwg at kemper.freedesktop.org
Wed Apr 5 00:35:53 UTC 2017


Module: Mesa
Branch: master
Commit: c5bf7cb52942cb7df9f5d73746ffbf3c102d12cc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c5bf7cb52942cb7df9f5d73746ffbf3c102d12cc

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Thu Feb 23 15:04:52 2017 -0800

mesa: Require mipmap completeness for glCopyImageSubData(), sometimes.

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

Reviewed-by: Roland Scheidegger <sroland at vmware.com>

---

 src/mesa/main/copyimage.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/copyimage.c b/src/mesa/main/copyimage.c
index cf25159e88..877c8ac246 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;




More information about the mesa-commit mailing list