[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-intel: Changes to 'ubuntu-utopic'



 debian/changelog                                            |    5 
 debian/patches/series                                       |    2 
 debian/patches/sna-add-more-checks-and-asserts-for-blt.diff |  200 ++++++++++++
 debian/patches/sna-tweak-alignment-constraints-on-gen8.diff |   34 ++
 4 files changed, 240 insertions(+), 1 deletion(-)

New commits:
commit 1b9d692cb8ff8eba2e43755a04552808ae9b3b69
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Tue Jan 13 14:55:18 2015 +0200

    add two more patches

diff --git a/debian/changelog b/debian/changelog
index 804a8d1..f82989f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,7 +2,10 @@ xserver-xorg-video-intel (2:2.99.914-1~exp1ubuntu4.2) UNRELEASED; urgency=medium
 
   * Added patches:
     - disable-dri3.diff: Disable DRI3. (LP: #1401784)
-    - sna-fix-gen8-blt.diff: Fix GEN8 BLT with 4bit address. (LP: #1401788)
+    - sna-fix-gen8-blt.diff,
+      sna-add-more-checks-and-asserts-for-blt.diff,
+      sna-tweak-alignment-constraints-on-gen8.diff:
+      Fix GEN8 BLT with 4bit address. (LP: #1401788)
 
  -- Timo Aaltonen <tjaalton@debian.org>  Fri, 12 Dec 2014 10:53:54 +0200
 
diff --git a/debian/patches/series b/debian/patches/series
index e8f787e..02ff016 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -8,3 +8,5 @@ fix-uxa-fglrx-stealing.diff
 sna-use-vmask-in-3dstate-ps.diff
 disable-dri3.diff
 sna-fix-gen8-blt.diff
+sna-tweak-alignment-constraints-on-gen8.diff
+sna-add-more-checks-and-asserts-for-blt.diff
diff --git a/debian/patches/sna-add-more-checks-and-asserts-for-blt.diff b/debian/patches/sna-add-more-checks-and-asserts-for-blt.diff
new file mode 100644
index 0000000..c9e9068
--- /dev/null
+++ b/debian/patches/sna-add-more-checks-and-asserts-for-blt.diff
@@ -0,0 +1,200 @@
+commit 8dee52997891108eec8e4df12dd02f3a060d9cb8
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date:   Wed Nov 19 13:38:20 2014 +0000
+
+    sna: Add more checks and asserts for BLT capable bo
+    
+    Before we use the BLT for core acceleration, double check that we can.
+    This should catch the case where we attempt to operate on SHM pixmaps
+    which do not meet the restrictions.
+    
+    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+
+--- a/src/sna/sna_accel.c
++++ b/src/sna/sna_accel.c
+@@ -4642,6 +4642,9 @@ sna_put_xybitmap_blt(DrawablePtr drawabl
+ 		}
+ 	}
+ 
++	if (!kgem_bo_can_blt(&sna->kgem, bo))
++	        return false;
++
+ 	assert_pixmap_contains_box(pixmap, RegionExtents(region));
+ 	if (damage)
+ 		sna_damage_add(damage, region);
+@@ -4654,6 +4657,7 @@ sna_put_xybitmap_blt(DrawablePtr drawabl
+ 	y += dy + drawable->y;
+ 
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, bo);
++	assert(kgem_bo_can_blt(&sna->kgem, bo));
+ 
+ 	/* Region is pre-clipped and translated into pixmap space */
+ 	box = RegionRects(region);
+@@ -4802,6 +4806,9 @@ sna_put_xypixmap_blt(DrawablePtr drawabl
+ 		}
+ 	}
+ 
++	if (!kgem_bo_can_blt(&sna->kgem, bo))
++		return false;
++
+ 	assert_pixmap_contains_box(pixmap, RegionExtents(region));
+ 	if (damage)
+ 		sna_damage_add(damage, region);
+@@ -4814,6 +4821,7 @@ sna_put_xypixmap_blt(DrawablePtr drawabl
+ 	y += dy + drawable->y;
+ 
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, bo);
++	assert(kgem_bo_can_blt(&sna->kgem, bo));
+ 
+ 	skip = h * BitmapBytePad(w + left);
+ 	for (i = 1 << (gc->depth-1); i; i >>= 1, bits += skip) {
+@@ -7570,6 +7578,7 @@ sna_copy_bitmap_blt(DrawablePtr _bitmap,
+ 	br13 |= copy_ROP[gc->alu] << 16;
+ 
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, arg->bo);
++	assert(kgem_bo_can_blt(&sna->kgem, arg->bo));
+ 	do {
+ 		int bx1 = (box->x1 + sx) & ~7;
+ 		int bx2 = (box->x2 + sx + 7) & ~7;
+@@ -7789,6 +7798,7 @@ sna_copy_plane_blt(DrawablePtr source, D
+ 	br13 |= copy_ROP[gc->alu] << 16;
+ 
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, arg->bo);
++	assert(kgem_bo_can_blt(&sna->kgem, arg->bo));
+ 	do {
+ 		int bx1 = (box->x1 + sx) & ~7;
+ 		int bx2 = (box->x2 + sx + 7) & ~7;
+@@ -8074,6 +8084,10 @@ sna_copy_plane(DrawablePtr src, Drawable
+ 				goto fallback;
+ 			}
+ 		}
++
++		if (!kgem_bo_can_blt(&sna->kgem, arg.bo))
++		        return false;
++		
+ 		RegionUninit(&region);
+ 		return sna_do_copy(src, dst, gc,
+ 				   src_x, src_y,
+@@ -11472,9 +11486,14 @@ sna_poly_fill_rect_tiled_8x8_blt(Drawabl
+ 	if (tile_bo->tiling)
+ 		return false;
+ 
++	if (!kgem_bo_can_blt(&sna->kgem, bo) ||
++            !kgem_bo_can_blt(&sna->kgem, tile_bo))
++                return false;
++
+ 	assert(tile_bo->pitch == 8 * drawable->bitsPerPixel >> 3);
+ 
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, bo);
++	assert(kgem_bo_can_blt(&sna->kgem, bo));
+ 	if (!kgem_check_batch(&sna->kgem, 10+2*3) ||
+ 	    !kgem_check_reloc(&sna->kgem, 2) ||
+ 	    !kgem_check_many_bo_fenced(&sna->kgem, bo, tile_bo, NULL)) {
+@@ -12266,6 +12285,7 @@ sna_poly_fill_rect_stippled_8x8_blt(Draw
+ 	}
+ 
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, bo);
++	assert(kgem_bo_can_blt(&sna->kgem, bo));
+ 	if (!kgem_check_batch(&sna->kgem, 10 + 2*3) ||
+ 	    !kgem_check_bo_fenced(&sna->kgem, bo) ||
+ 	    !kgem_check_reloc(&sna->kgem, 1)) {
+@@ -12642,6 +12662,7 @@ sna_poly_fill_rect_stippled_1_blt(Drawab
+ 
+ 	get_drawable_deltas(drawable, pixmap, &dx, &dy);
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, bo);
++	assert(kgem_bo_can_blt(&sna->kgem, bo));
+ 
+ 	br00 = 3 << 20;
+ 	br13 = bo->pitch;
+@@ -13542,6 +13563,7 @@ sna_poly_fill_rect_stippled_n_blt__imm(D
+ 
+ 	get_drawable_deltas(drawable, pixmap, &dx, &dy);
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, bo);
++	assert(kgem_bo_can_blt(&sna->kgem, bo));
+ 
+ 	br00 = XY_MONO_SRC_COPY_IMM | 3 << 20;
+ 	br13 = bo->pitch;
+@@ -13686,6 +13708,7 @@ sna_poly_fill_rect_stippled_n_blt(Drawab
+ 
+ 	get_drawable_deltas(drawable, pixmap, &dx, &dy);
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, bo);
++	assert(kgem_bo_can_blt(&sna->kgem, bo));
+ 
+ 	br00 = XY_MONO_SRC_COPY | 3 << 20;
+ 	br13 = bo->pitch;
+@@ -13813,10 +13836,9 @@ sna_poly_fill_rect_stippled_blt(Drawable
+ {
+ 
+ 	PixmapPtr stipple = gc->stipple;
++	PixmapPtr pixmap = get_drawable_pixmap(drawable);
+ 
+ 	if (bo->tiling == I915_TILING_Y) {
+-		PixmapPtr pixmap = get_drawable_pixmap(drawable);
+-
+ 		DBG(("%s: converting bo from Y-tiling\n", __FUNCTION__));
+ 		/* This is cheating, but only the gpu_bo can be tiled */
+ 		assert(bo == __sna_pixmap_get_bo(pixmap));
+@@ -13828,6 +13850,9 @@ sna_poly_fill_rect_stippled_blt(Drawable
+ 		}
+ 	}
+ 
++	if (!kgem_bo_can_blt(&to_sna_from_pixmap(pixmap)->kgem, bo))
++                return false;
++
+ 	if (!sna_drawable_move_to_cpu(&stipple->drawable, MOVE_READ))
+ 		return false;
+ 
+@@ -14368,6 +14393,9 @@ sna_glyph_blt(DrawablePtr drawable, GCPt
+ 		}
+ 	}
+ 
++	if (!kgem_bo_can_blt(&sna->kgem, bo))
++                return false;
++
+ 	if (get_drawable_deltas(drawable, pixmap, &dx, &dy))
+ 		RegionTranslate(clip, dx, dy);
+ 	_x += drawable->x + dx;
+@@ -14386,6 +14414,7 @@ sna_glyph_blt(DrawablePtr drawable, GCPt
+ 	}
+ 
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, bo);
++	assert(kgem_bo_can_blt(&sna->kgem, bo));
+ 	if (!kgem_check_batch(&sna->kgem, 20) ||
+ 	    !kgem_check_bo_fenced(&sna->kgem, bo) ||
+ 	    !kgem_check_reloc(&sna->kgem, 1)) {
+@@ -15084,6 +15113,9 @@ sna_reversed_glyph_blt(DrawablePtr drawa
+ 		}
+ 	}
+ 
++	if (!kgem_bo_can_blt(&sna->kgem, bo))
++                return false;
++
+ 	if (get_drawable_deltas(drawable, pixmap, &dx, &dy))
+ 		RegionTranslate(clip, dx, dy);
+ 	_x += drawable->x + dx;
+@@ -15102,6 +15134,7 @@ sna_reversed_glyph_blt(DrawablePtr drawa
+ 	}
+ 
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, bo);
++	assert(kgem_bo_can_blt(&sna->kgem, bo));
+ 	if (!kgem_check_batch(&sna->kgem, 20) ||
+ 	    !kgem_check_bo_fenced(&sna->kgem, bo) ||
+ 	    !kgem_check_reloc(&sna->kgem, 1)) {
+@@ -15542,6 +15575,9 @@ sna_push_pixels_solid_blt(GCPtr gc,
+ 		}
+ 	}
+ 
++	if (!kgem_bo_can_blt(&sna->kgem, bo))
++               return false;
++
+ 	if (get_drawable_deltas(drawable, pixmap, &dx, &dy))
+ 		RegionTranslate(region, dx, dy);
+ 
+@@ -15555,6 +15591,7 @@ sna_push_pixels_solid_blt(GCPtr gc,
+ 	     region->extents.x2, region->extents.y2));
+ 
+ 	kgem_set_mode(&sna->kgem, KGEM_BLT, bo);
++	assert(kgem_bo_can_blt(&sna->kgem, bo));
+ 
+ 	/* Region is pre-clipped and translated into pixmap space */
+ 	box = RegionRects(region);
diff --git a/debian/patches/sna-tweak-alignment-constraints-on-gen8.diff b/debian/patches/sna-tweak-alignment-constraints-on-gen8.diff
new file mode 100644
index 0000000..c1b8893
--- /dev/null
+++ b/debian/patches/sna-tweak-alignment-constraints-on-gen8.diff
@@ -0,0 +1,34 @@
+commit a90cc3b3889fafbd91c11c42d068a9d6474e218b
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date:   Tue Nov 18 08:37:25 2014 +0000
+
+    sna: Tweak alignment constraints on gen8 to allow BLT
+    
+    The previous commits prevent us from using the BLT if the destination
+    address is misaligned. Honour that restriction when creating buffers as
+    well, so that they are always usuable by the BLT.
+    
+    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+
+diff --git a/src/sna/kgem.c b/src/sna/kgem.c
+index fe225d2..72ffb04 100644
+--- a/src/sna/kgem.c
++++ b/src/sna/kgem.c
+@@ -1797,6 +1797,8 @@ inline static uint32_t kgem_pitch_alignment(struct kgem *kgem, unsigned flags)
+ 		return 256;
+ 	if (flags & CREATE_SCANOUT)
+ 		return 64;
++	if (kgem->gen >= 0100)
++		return 32;
+ 	return 8;
+ }
+ 
+@@ -7234,7 +7236,7 @@ struct kgem_bo *kgem_create_buffer_2d(struct kgem *kgem,
+ 	assert(width > 0 && height > 0);
+ 	assert(ret != NULL);
+ 	stride = ALIGN(width, 2) * bpp >> 3;
+-	stride = ALIGN(stride, 4);
++	stride = ALIGN(stride, kgem->gen >= 0100 ? 32 : 4);
+ 
+ 	DBG(("%s: %dx%d, %d bpp, stride=%d\n",
+ 	     __FUNCTION__, width, height, bpp, stride));


Reply to: