[Mesa-dev] [PATCH] i965: Don't use fast copy blit in case of logical operations other than GL_COPY

Anuj Phogat anuj.phogat at gmail.com
Wed May 25 18:40:52 UTC 2016


XY_FAST_COPY_BLT command doesn't have a field for raster operation. So, fall
back to using XY_SRC_COPY_BLT to handle those cases.

Fixes piglit test gl-1.1-xor-copypixels when fast copy blit is enabled
for all tiling formats.

Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
---
 src/mesa/drivers/dri/i965/intel_blit.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_blit.c b/src/mesa/drivers/dri/i965/intel_blit.c
index 42cdb36..91c24ea 100644
--- a/src/mesa/drivers/dri/i965/intel_blit.c
+++ b/src/mesa/drivers/dri/i965/intel_blit.c
@@ -340,7 +340,8 @@ can_fast_copy_blit(struct brw_context *brw,
                    int16_t dst_x, int16_t dst_y,
                    uintptr_t dst_offset, uint32_t dst_pitch,
                    uint32_t dst_tiling, uint32_t dst_tr_mode,
-                   int16_t w, int16_t h, uint32_t cpp)
+                   int16_t w, int16_t h, uint32_t cpp,
+                   GLenum logic_op)
 {
    const bool dst_tiling_none = dst_tiling == I915_TILING_NONE;
    const bool src_tiling_none = src_tiling == I915_TILING_NONE;
@@ -348,6 +349,9 @@ can_fast_copy_blit(struct brw_context *brw,
    if (brw->gen < 9)
       return false;
 
+   if (logic_op != GL_COPY)
+      return false;
+
    /* The start pixel for Fast Copy blit should be on an OWord boundary. */
    if ((dst_x * cpp | src_x * cpp) & 15)
       return false;
@@ -490,13 +494,14 @@ intelEmitCopyBlit(struct brw_context *brw,
                                            dst_x, dst_y,
                                            dst_offset, dst_pitch,
                                            dst_tiling, dst_tr_mode,
-                                           w, h, cpp);
+                                           w, h, cpp, logic_op);
    if (!use_fast_copy_blit &&
        (src_tr_mode != INTEL_MIPTREE_TRMODE_NONE ||
         dst_tr_mode != INTEL_MIPTREE_TRMODE_NONE))
       return false;
 
    if (use_fast_copy_blit) {
+      assert(logic_op == GL_COPY);
       /* When two sequential fast copy blits have different source surfaces,
        * but their destinations refer to the same destination surfaces and
        * therefore destinations overlap it is imperative that a flush be
-- 
2.5.5



More information about the mesa-dev mailing list