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

Author: Paul Berry <stereotype...@gmail.com>
Date:   Sun Jun  2 16:25:03 2013 -0700

intel: Don't try to blorp or blit CopyTexSubImage(1D_ARRAY).

Blorp and the hardware blitter can't be used to implement
CopyTexSubImage when the image type is 1D_ARRAY, because of a
coordinate system mismatch (the Y coordinate in the source image is
supposed to be matched up to the Z coordinate in the destination
texture).

The hardware blitter path (intel_copy_texsubimage) contained a perf
debug warning for this case, but it failed to actually fall back.  The
blorp path didn't even check.

Fixes piglit test "copyteximage 1D_ARRAY".

Reviewed-by: Eric Anholt <e...@anholt.net>

---

 src/mesa/drivers/dri/i965/brw_blorp_blit.cpp |    6 ++++++
 src/mesa/drivers/dri/intel/intel_tex_copy.c  |    1 +
 2 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp 
b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
index c70dc22..a6b2bbf 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
@@ -347,6 +347,12 @@ brw_blorp_copytexsubimage(struct intel_context *intel,
       return false;
    }
 
+   /* We can't use blorp to copy to a 1D array texture, since it can only
+    * write to one layer of the texture at a time.
+    */
+   if (dst_mt->target == GL_TEXTURE_1D_ARRAY)
+      return false;
+
    /* Source clipping shouldn't be necessary, since copytexsubimage (in
     * src/mesa/main/teximage.c) calls _mesa_clip_copytexsubimage() which
     * takes care of it.
diff --git a/src/mesa/drivers/dri/intel/intel_tex_copy.c 
b/src/mesa/drivers/dri/intel/intel_tex_copy.c
index 363cbbd..d8e65ba 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_copy.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_copy.c
@@ -83,6 +83,7 @@ intel_copy_texsubimage(struct intel_context *intel,
    if (intelImage->base.Base.TexObject->Target == GL_TEXTURE_1D_ARRAY ||
        intelImage->base.Base.TexObject->Target == GL_TEXTURE_2D_ARRAY) {
       perf_debug("no support for array textures\n");
+      return false;
    }
 
    /* glCopyTexImage (and the glBlitFramebuffer() path that reuses this)

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to