diff options
author | Laura Ekstrand <laura@jlekstrand.net> | 2018-03-06 16:32:38 -0800 |
---|---|---|
committer | Laura Ekstrand <laura@jlekstrand.net> | 2018-03-12 13:18:43 -0700 |
commit | 40e105a0847265c0283a4908a3022116c2b2709e (patch) | |
tree | b7902499467c05fc4a6013a9968794668670ec8c | |
parent | a2f08dd574ad3da47b99bd1865b069f0b5b06c4c (diff) |
i965: Replace hw blitter with blorp in DrawPixels.
Some code added to account for coordinate flips between OpenGL
and the driver.
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_pixel_draw.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_pixel_draw.c b/src/mesa/drivers/dri/i965/intel_pixel_draw.c index 82dca4a2eb..ded8d5c5f7 100644 --- a/src/mesa/drivers/dri/i965/intel_pixel_draw.c +++ b/src/mesa/drivers/dri/i965/intel_pixel_draw.c @@ -36,6 +36,7 @@ #include "swrast/swrast.h" #include "drivers/common/meta.h" +#include "brw_blorp.h" #include "brw_context.h" #include "intel_screen.h" #include "intel_blit.h" @@ -123,17 +124,29 @@ do_blit_drawpixels(struct gl_context * ctx, if (!pbo_mt) return false; - if (!intel_miptree_blit(brw, - pbo_mt, 0, 0, - 0, 0, src_flip, - irb->mt, irb->mt_level, irb->mt_layer, - x, y, _mesa_is_winsys_fbo(ctx->DrawBuffer), - width, height, COLOR_LOGICOP_COPY)) { - DBG("%s: blit failed\n", __func__); - intel_miptree_release(&pbo_mt); - return false; + /* Flip code borrowed from intel_miptree_blit */ + int dst_y = y; + + if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) { + const unsigned h0 = irb->mt->surf.phys_level0_sa.height; + dst_y = minify(h0, irb->mt_level - irb->mt->first_level) - dst_y - height; } + brw_blorp_blit_miptrees(brw, + pbo_mt, + 0, 0, + src_format, SWIZZLE_XYZW, + irb->mt, + irb->mt_level, irb->mt_layer, + dst_format, + 0, 0, + width, height, + x, dst_y, + x + width, dst_y + height, + GL_NEAREST, false, + src_flip || _mesa_is_winsys_fbo(ctx->DrawBuffer), + false, false); + intel_miptree_release(&pbo_mt); if (ctx->Query.CurrentOcclusionObject) |