xf86-video-intel: 2 commits - src/sna/kgem.c src/sna/sna_accel.c src/sna/sna_driver.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Jul 3 03:26:21 PDT 2012


 src/sna/kgem.c       |   16 +++++++++++++++-
 src/sna/sna_accel.c  |   29 ++++++++++-------------------
 src/sna/sna_driver.c |   15 +--------------
 3 files changed, 26 insertions(+), 34 deletions(-)

New commits:
commit 3a41248195e8b327a5d970726450bd2077cdaf0f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jul 3 11:22:54 2012 +0100

    sna: Operate on the original boxes for CopyArea
    
    Be consistent and avoid the confusion when mixing operations on the
    region boxes and the original boxes.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 8db89ca..28b964d 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -3796,14 +3796,12 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
 	     replaces));
 
 	RegionTranslate(&region, dst_dx, dst_dy);
-	src_dx -= dst_dx;
-	src_dy -= dst_dy;
 
 	if (dst_priv == NULL)
 		goto fallback;
 
 	if (dst_priv->cpu_damage && alu_overwrites(alu)) {
-		DBG(("%s: overwritting CPU damage\n", _FUNCTION__));
+		DBG(("%s: overwritting CPU damage\n", __FUNCTION__));
 		sna_damage_subtract(&dst_priv->cpu_damage, &region);
 		if (dst_priv->cpu_damage == NULL) {
 			list_del(&dst_priv->list);
@@ -3821,8 +3819,6 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
 			     __FUNCTION__, src_priv->clear_color));
 			assert_pixmap_contains_box(dst_pixmap,
 						   RegionExtents(&region));
-			box = REGION_RECTS(&region);
-			n = REGION_NUM_RECTS(&region);
 			if (n == 1) {
 				if (!sna->render.fill_one(sna,
 							  dst_pixmap, bo,
@@ -3862,7 +3858,7 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
 			     __FUNCTION__));
 			if (!sna->render.copy_boxes(sna, alu,
 						    src_pixmap, src_priv->gpu_bo, src_dx, src_dy,
-						    dst_pixmap, bo, 0, 0,
+						    dst_pixmap, bo, dst_dx, dst_dy,
 						    box, n)) {
 				DBG(("%s: fallback - accelerated copy boxes failed\n",
 				     __FUNCTION__));
@@ -3897,7 +3893,7 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
 
 			if (!sna->render.copy_boxes(sna, alu,
 						    src_pixmap, src_priv->gpu_bo, src_dx, src_dy,
-						    dst_pixmap, bo, 0, 0,
+						    dst_pixmap, bo, dst_dx, dst_dy,
 						    box, n)) {
 				DBG(("%s: fallback - accelerated copy boxes failed\n",
 				     __FUNCTION__));
@@ -3923,17 +3919,17 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
 
 			assert(bo != dst_priv->cpu_bo);
 
-			RegionTranslate(&region, src_dx, src_dy);
+			RegionTranslate(&region, src_dx-dst_dx, src_dy-dst_dy);
 			ret = sna_drawable_move_region_to_cpu(&src_pixmap->drawable,
 							      &region,
 							      MOVE_READ | MOVE_ASYNC_HINT);
-			RegionTranslate(&region, -src_dx, -src_dy);
+			RegionTranslate(&region, dst_dx-src_dx, dst_dy-src_dy);
 			if (!ret)
 				goto fallback;
 
 			if (!sna->render.copy_boxes(sna, alu,
 						    src_pixmap, src_priv->cpu_bo, src_dx, src_dy,
-						    dst_pixmap, bo, 0, 0,
+						    dst_pixmap, bo, dst_dx, dst_dy,
 						    box, n)) {
 				DBG(("%s: fallback - accelerated copy boxes failed\n",
 				     __FUNCTION__));
@@ -3993,7 +3989,7 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
 
 			if (!sna->render.copy_boxes(sna, alu,
 						    tmp, sna_pixmap_get_bo(tmp), dx, dy,
-						    dst_pixmap, bo, 0, 0,
+						    dst_pixmap, bo, dst_dx, dst_dy,
 						    box, n)) {
 				DBG(("%s: fallback - accelerated copy boxes failed\n",
 				     __FUNCTION__));
@@ -4074,9 +4070,6 @@ fallback:
 		DBG(("%s: copying clear [%08x]\n",
 		     __FUNCTION__, src_priv->clear_color));
 
-		box = REGION_RECTS(&region);
-		n = REGION_NUM_RECTS(&region);
-
 		if (dst_priv) {
 			assert_pixmap_contains_box(dst_pixmap,
 						   RegionExtents(&region));
@@ -4091,7 +4084,7 @@ fallback:
 			pixman_fill(dst_pixmap->devPrivate.ptr,
 				    dst_pixmap->devKind/sizeof(uint32_t),
 				    dst_pixmap->drawable.bitsPerPixel,
-				    box->x1, box->y1,
+				    box->x1 + dst_dx, box->y1 + dst_dy,
 				    box->x2 - box->x1,
 				    box->y2 - box->y1,
 				    src_priv->clear_color);
@@ -4106,7 +4099,7 @@ fallback:
 		if (src_priv) {
 			unsigned mode;
 
-			RegionTranslate(&region, src_dx, src_dy);
+			RegionTranslate(&region, src_dx-dst_dx, src_dy-dst_dy);
 
 			assert_pixmap_contains_box(src_pixmap,
 						   RegionExtents(&region));
@@ -4119,7 +4112,7 @@ fallback:
 							     &region, mode))
 				goto out;
 
-			RegionTranslate(&region, -src_dx, -src_dy);
+			RegionTranslate(&region, dst_dx-src_dx, dst_dy-src_dy);
 		}
 
 		if (dst_priv) {
@@ -4140,8 +4133,6 @@ fallback:
 		dst_stride = dst_pixmap->devKind;
 		src_stride = src_pixmap->devKind;
 
-		src_dx += dst_dx;
-		src_dy += dst_dy;
 		if (alu == GXcopy && bpp >= 8) {
 			dst_bits = (FbBits *)
 				((char *)dst_pixmap->devPrivate.ptr +
commit e3bc91842bf186ec149c852f48993235ef7ad27f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jul 3 10:21:06 2012 +0100

    sna: Allow booting on older kernels by disabling HW acceleration
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 76f6cae..43fa705 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -595,6 +595,20 @@ static bool __kgem_throttle(struct kgem *kgem)
 	return drmIoctl(kgem->fd, DRM_IOCTL_I915_GEM_THROTTLE, NULL) == -EIO;
 }
 
+static bool is_hw_supported(struct kgem *kgem)
+{
+	if (DBG_NO_HW)
+		return false;
+
+	if (kgem->gen >= 60) /* Only if the kernel supports the BLT ring */
+		return gem_param(kgem, I915_PARAM_HAS_BLT) > 0;
+
+	if (kgem->gen <= 20) /* dynamic GTT is fubar */
+		return false;
+
+	return true;
+}
+
 void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, int gen)
 {
 	struct drm_i915_gem_get_aperture aperture;
@@ -607,7 +621,7 @@ void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, int gen)
 	kgem->fd = fd;
 	kgem->gen = gen;
 	kgem->wedged = __kgem_throttle(kgem);
-	kgem->wedged |= DBG_NO_HW;
+	kgem->wedged |= !is_hw_supported(kgem);
 
 	kgem->batch_size = ARRAY_SIZE(kgem->batch);
 	if (gen == 22)
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index 047b865..f7eeca5 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -294,8 +294,7 @@ static int sna_open_drm_master(ScrnInfoPtr scrn)
 	struct sna *sna = to_sna(scrn);
 	struct pci_device *pci = sna->PciInfo;
 	drmSetVersion sv;
-	struct drm_i915_getparam gp;
-	int err, val;
+	int err;
 	char busid[20];
 	int fd;
 
@@ -335,18 +334,6 @@ static int sna_open_drm_master(ScrnInfoPtr scrn)
 		return -1;
 	}
 
-	val = FALSE;
-
-	VG_CLEAR(gp);
-	gp.param = I915_PARAM_HAS_BLT;
-	gp.value = &val;
-	if (drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp)) {
-		xf86DrvMsg(scrn->scrnIndex, X_ERROR,
-			   "Failed to detect BLT.  Kernel 2.6.37 required.\n");
-		drmClose(fd);
-		return -1;
-	}
-
 	dev = malloc(sizeof(*dev));
 	if (dev) {
 		int flags;


More information about the xorg-commit mailing list