intel: Bail on blits with non-tile-aligned offsets.
authorEric Anholt <eric@anholt.net>
Mon, 22 Jun 2009 22:23:38 +0000 (15:23 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 24 Jun 2009 02:31:12 +0000 (19:31 -0700)
src/mesa/drivers/dri/intel/intel_blit.c

index e0596a5531c7d47702f2dc8eef54cf9ef2072e8c..75d315d82bdcc85157b183952c5e1cd4bdce4c8c 100644 (file)
@@ -225,10 +225,18 @@ intelEmitCopyBlit(struct intel_context *intel,
    dri_bo *aper_array[3];
    BATCH_LOCALS;
 
-   if (dst_tiling == I915_TILING_Y)
-      return GL_FALSE;
-   if (src_tiling == I915_TILING_Y)
-      return GL_FALSE;
+   if (dst_tiling != I915_TILING_NONE) {
+      if (dst_offset & 4095)
+        return GL_FALSE;
+      if (dst_tiling == I915_TILING_Y)
+        return GL_FALSE;
+   }
+   if (src_tiling != I915_TILING_NONE) {
+      if (src_offset & 4095)
+        return GL_FALSE;
+      if (src_tiling == I915_TILING_Y)
+        return GL_FALSE;
+   }
 
    /* do space/cliprects check before going any further */
    do {
@@ -561,8 +569,12 @@ intelEmitImmediateColorExpandBlit(struct intel_context *intel,
    int dwords = ALIGN(src_size, 8) / 4;
    uint32_t opcode, br13, blit_cmd;
 
-   if (dst_tiling == I915_TILING_Y)
-      return GL_FALSE;
+   if (dst_tiling != I915_TILING_NONE) {
+      if (dst_offset & 4095)
+        return GL_FALSE;
+      if (dst_tiling == I915_TILING_Y)
+        return GL_FALSE;
+   }
 
    assert( logic_op - GL_CLEAR >= 0 );
    assert( logic_op - GL_CLEAR < 0x10 );