[Mesa-dev] [PATCH 08/10] i965: Remove the blorp CTSI path.

Eric Anholt eric at anholt.net
Tue Mar 4 14:17:42 PST 2014


The meta patch supports all the same, except for the stencil case being
unaccelerated.
---
 src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 105 ---------------------------
 src/mesa/drivers/dri/i965/brw_context.h      |   9 ---
 src/mesa/drivers/dri/i965/intel_tex_copy.c   |   9 +--
 3 files changed, 1 insertion(+), 122 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
index acdc9c7..fbed8ce 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
@@ -334,111 +334,6 @@ try_blorp_blit(struct brw_context *brw,
    return true;
 }
 
-bool
-brw_blorp_copytexsubimage(struct brw_context *brw,
-                          struct gl_renderbuffer *src_rb,
-                          struct gl_texture_image *dst_image,
-                          int slice,
-                          int srcX0, int srcY0,
-                          int dstX0, int dstY0,
-                          int width, int height)
-{
-   struct gl_context *ctx = &brw->ctx;
-   struct intel_renderbuffer *src_irb = intel_renderbuffer(src_rb);
-   struct intel_texture_image *intel_image = intel_texture_image(dst_image);
-
-   /* Sync up the state of window system buffers.  We need to do this before
-    * we go looking at the src renderbuffer's miptree.
-    */
-   intel_prepare_render(brw);
-
-   struct intel_mipmap_tree *src_mt = src_irb->mt;
-   struct intel_mipmap_tree *dst_mt = intel_image->mt;
-
-   /* BLORP is not supported before Gen6. */
-   if (brw->gen < 6 || brw->gen >= 8)
-      return false;
-
-   if (_mesa_get_format_base_format(src_mt->format) !=
-       _mesa_get_format_base_format(dst_mt->format)) {
-      return false;
-   }
-
-   /* We can't handle format conversions between Z24 and other formats since
-    * we have to lie about the surface format.  See the comments in
-    * brw_blorp_surface_info::set().
-    */
-   if ((src_mt->format == MESA_FORMAT_Z24_UNORM_X8_UINT) !=
-       (dst_mt->format == MESA_FORMAT_Z24_UNORM_X8_UINT)) {
-      return false;
-   }
-
-   if (!brw->format_supported_as_render_target[dst_mt->format])
-      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.
-    *
-    * Destination clipping shouldn't be necessary since the restrictions on
-    * glCopyTexSubImage prevent the user from specifying a destination rectangle
-    * that falls outside the bounds of the destination texture.
-    * See error_check_subtexture_dimensions().
-    */
-
-   int srcY1 = srcY0 + height;
-   int srcX1 = srcX0 + width;
-   int dstX1 = dstX0 + width;
-   int dstY1 = dstY0 + height;
-
-   /* Account for the fact that in the system framebuffer, the origin is at
-    * the lower left.
-    */
-   bool mirror_y = false;
-   if (_mesa_is_winsys_fbo(ctx->ReadBuffer)) {
-      GLint tmp = src_rb->Height - srcY0;
-      srcY0 = src_rb->Height - srcY1;
-      srcY1 = tmp;
-      mirror_y = true;
-   }
-
-   brw_blorp_blit_miptrees(brw,
-                           src_mt, src_irb->mt_level, src_irb->mt_layer,
-                           dst_mt, dst_image->Level, dst_image->Face + slice,
-                           srcX0, srcY0, srcX1, srcY1,
-                           dstX0, dstY0, dstX1, dstY1,
-                           GL_NEAREST, false, mirror_y);
-
-   /* If we're copying to a packed depth stencil texture and the source
-    * framebuffer has separate stencil, we need to also copy the stencil data
-    * over.
-    */
-   src_rb = ctx->ReadBuffer->Attachment[BUFFER_STENCIL].Renderbuffer;
-   if (_mesa_get_format_bits(dst_image->TexFormat, GL_STENCIL_BITS) > 0 &&
-       src_rb != NULL) {
-      src_irb = intel_renderbuffer(src_rb);
-      src_mt = src_irb->mt;
-
-      if (src_mt->stencil_mt)
-         src_mt = src_mt->stencil_mt;
-      if (dst_mt->stencil_mt)
-         dst_mt = dst_mt->stencil_mt;
-
-      if (src_mt != dst_mt) {
-         brw_blorp_blit_miptrees(brw,
-                                 src_mt, src_irb->mt_level, src_irb->mt_layer,
-                                 dst_mt, dst_image->Level,
-                                 dst_image->Face + slice,
-                                 srcX0, srcY0, srcX1, srcY1,
-                                 dstX0, dstY0, dstX1, dstY1,
-                                 GL_NEAREST, false, mirror_y);
-      }
-   }
-
-   return true;
-}
-
-
 GLbitfield
 brw_blorp_framebuffer(struct brw_context *brw,
                       GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index ccbe9ea..5568fcb 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -1710,15 +1710,6 @@ brw_blorp_framebuffer(struct brw_context *brw,
                       GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
                       GLbitfield mask, GLenum filter);
 
-bool
-brw_blorp_copytexsubimage(struct brw_context *brw,
-                          struct gl_renderbuffer *src_rb,
-                          struct gl_texture_image *dst_image,
-                          int slice,
-                          int srcX0, int srcY0,
-                          int dstX0, int dstY0,
-                          int width, int height);
-
 /* gen6_multisample_state.c */
 unsigned
 gen6_determine_sample_mask(struct brw_context *brw);
diff --git a/src/mesa/drivers/dri/i965/intel_tex_copy.c b/src/mesa/drivers/dri/i965/intel_tex_copy.c
index ca0b5b9..082437a 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_copy.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_copy.c
@@ -99,12 +99,7 @@ intelCopyTexSubImage(struct gl_context *ctx, GLuint dims,
 {
    struct brw_context *brw = brw_context(ctx);
 
-   /* Try BLORP first.  It can handle almost everything. */
-   if (brw_blorp_copytexsubimage(brw, rb, texImage, slice, x, y,
-                                 xoffset, yoffset, width, height))
-      return;
-
-   /* Next, try the BLT engine. */
+   /* Try the BLT engine. */
    if (intel_copy_texsubimage(brw,
                               intel_texture_image(texImage),
                               xoffset, yoffset, slice,
@@ -112,8 +107,6 @@ intelCopyTexSubImage(struct gl_context *ctx, GLuint dims,
       return;
    }
 
-   /* Finally, fall back to meta.  This will likely be slow. */
-   perf_debug("%s - fallback to swrast\n", __FUNCTION__);
    _mesa_meta_CopyTexSubImage(ctx, dims, texImage,
                               xoffset, yoffset, slice,
                               rb, x, y, width, height);
-- 
1.9.rc1



More information about the mesa-dev mailing list