i965: Use meta for pixel ops on gen6+
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 11 May 2018 23:22:47 +0000 (16:22 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 22 May 2018 22:46:20 +0000 (15:46 -0700)
Using meta for anything is fairly aweful and definitely has more CPU
overhead.  However, it also uses the 3D pipe and is therefore likely
faster in terms of GPU time than the blitter.  Also, the blitter code
has so many early returns that it's probably not buying us that much.
We may as well just use meta all the time instead of working over-time
to find the tiny case where we can use the blitter.  We keep gen4-5
using the old blit paths to avoid perturbing old hardware too much.

Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/intel_pixel_bitmap.c
src/mesa/drivers/dri/i965/intel_pixel_copy.c
src/mesa/drivers/dri/i965/intel_pixel_draw.c

index 5bc341bfc0a37bf8d8b17347b9ffe70cbcef6f36..f9d48294168c8d182759ffcd1bd10f2fc1434a63 100644 (file)
@@ -348,11 +348,13 @@ intelBitmap(struct gl_context * ctx,
            const struct gl_pixelstore_attrib *unpack,
            const GLubyte * pixels)
 {
+   struct brw_context *brw = brw_context(ctx);
+
    if (!_mesa_check_conditional_render(ctx))
       return;
 
-   if (do_blit_bitmap(ctx, x, y, width, height,
-                          unpack, pixels))
+   if (brw->screen->devinfo.gen < 6 &&
+       do_blit_bitmap(ctx, x, y, width, height, unpack, pixels))
       return;
 
    _mesa_meta_Bitmap(ctx, x, y, width, height, unpack, pixels);
index 8029ffbeddc815ebf1255d18e9ef7ba69155c0f7..31838cce13c5c2e4b658fefcb5b5c6bf4d679e9f 100644 (file)
@@ -196,12 +196,15 @@ intelCopyPixels(struct gl_context * ctx,
                 GLsizei width, GLsizei height,
                 GLint destx, GLint desty, GLenum type)
 {
+   struct brw_context *brw = brw_context(ctx);
+
    DBG("%s\n", __func__);
 
    if (!_mesa_check_conditional_render(ctx))
       return;
 
-   if (do_blit_copypixels(ctx, srcx, srcy, width, height, destx, desty, type))
+   if (brw->screen->devinfo.gen < 6 &&
+       do_blit_copypixels(ctx, srcx, srcy, width, height, destx, desty, type))
       return;
 
    /* this will use swrast if needed */
index 82dca4a2ebc193b93512083edfffe62a1ee5ddb1..d5d1b99e69b101355f7a2460c054d625ecfdba78 100644 (file)
@@ -163,7 +163,8 @@ intelDrawPixels(struct gl_context * ctx,
       return;
    }
 
-   if (_mesa_is_bufferobj(unpack->BufferObj)) {
+   if (brw->screen->devinfo.gen < 6 &&
+       _mesa_is_bufferobj(unpack->BufferObj)) {
       if (do_blit_drawpixels(ctx, x, y, width, height, format, type, unpack,
                             pixels)) {
         return;