Use meta-path instead of blorp for 2D-blits. Reduces cpu-overhead increasing the performance of meta-path. On IVB (blorp disabled and hence meta path enabled) a microbenchmark found in mesa-demos (copypixrate -blit -back):
x 62 10665.83 13388.95 11357.77 11467.463 574.57333 + 62 19933.73 21140.67 20780.81 20757.792 184.91425 Difference at 95.0% confidence 9290.33 +/- 150.247 81.0147% +/- 1.3102% Compared to default blorp meta is now on par (1-2% faster). On BDW (where blorp isn't available) the same benchmark: x 137 9055.4 14551.12 12020.87 12011.815 762.67232 + 137 13963.49 18281.85 17031.56 16985.443 712.08714 Difference at 95.0% confidence 4973.63 +/- 174.726 41.4061% +/- 1.45462% No visible changes in public benchmarks. No piglit regressions. Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/mesa/drivers/dri/i965/brw_context.h | 10 ++++++++++ src/mesa/drivers/dri/i965/intel_fbo.c | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index ae28955..a22f627 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -1752,6 +1752,16 @@ brw_blorp_framebuffer(struct brw_context *brw, GLbitfield mask, GLenum filter); bool +brw_meta_fbo_color_blit(struct brw_context *brw, + struct gl_framebuffer *read_fb, + struct gl_framebuffer *draw_fb, + float src_x0, float src_y0, + float src_x1, float src_y1, + float dst_x0, float dst_y0, + float dst_x1, float dst_y1, + GLenum filter); + +bool brw_blorp_copytexsubimage(struct brw_context *brw, struct gl_renderbuffer *src_rb, struct gl_texture_image *dst_image, diff --git a/src/mesa/drivers/dri/i965/intel_fbo.c b/src/mesa/drivers/dri/i965/intel_fbo.c index aebed72..077eb8b 100644 --- a/src/mesa/drivers/dri/i965/intel_fbo.c +++ b/src/mesa/drivers/dri/i965/intel_fbo.c @@ -878,6 +878,17 @@ intel_blit_framebuffer(struct gl_context *ctx, if (!_mesa_check_conditional_render(ctx)) return; + if (brw->gen >= 6 && (mask & GL_COLOR_BUFFER_BIT)) { + if (brw_meta_fbo_color_blit(brw, readFb, drawFb, + srcX0, srcY0, srcX1, srcY1, + dstX0, dstY0, dstX1, dstY1, + filter)) { + mask &= ~GL_COLOR_BUFFER_BIT; + if (mask == 0x0) + return; + } + } + mask = brw_blorp_framebuffer(brw, readFb, drawFb, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, -- 1.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev