summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaura Ekstrand <laura@jlekstrand.net>2018-03-06 16:32:38 -0800
committerLaura Ekstrand <laura@jlekstrand.net>2018-03-12 13:18:43 -0700
commit40e105a0847265c0283a4908a3022116c2b2709e (patch)
treeb7902499467c05fc4a6013a9968794668670ec8c
parenta2f08dd574ad3da47b99bd1865b069f0b5b06c4c (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.c31
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)