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(®ion, 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, ®ion);
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(®ion));
- box = REGION_RECTS(®ion);
- n = REGION_NUM_RECTS(®ion);
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(®ion, src_dx, src_dy);
+ RegionTranslate(®ion, src_dx-dst_dx, src_dy-dst_dy);
ret = sna_drawable_move_region_to_cpu(&src_pixmap->drawable,
®ion,
MOVE_READ | MOVE_ASYNC_HINT);
- RegionTranslate(®ion, -src_dx, -src_dy);
+ RegionTranslate(®ion, 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(®ion);
- n = REGION_NUM_RECTS(®ion);
-
if (dst_priv) {
assert_pixmap_contains_box(dst_pixmap,
RegionExtents(®ion));
@@ -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(®ion, src_dx, src_dy);
+ RegionTranslate(®ion, src_dx-dst_dx, src_dy-dst_dy);
assert_pixmap_contains_box(src_pixmap,
RegionExtents(®ion));
@@ -4119,7 +4112,7 @@ fallback:
®ion, mode))
goto out;
- RegionTranslate(®ion, -src_dx, -src_dy);
+ RegionTranslate(®ion, 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