From 2fd785d12602103a1c05fd52903bdb4ffefadaad Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Sun, 2 Jun 2013 16:25:03 -0700 Subject: [PATCH] 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 --- 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(+) 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) -- 2.7.4