xf86-video-intel: 2 commits - src/sna/sna_accel.c
Chris Wilson
ickle at kemper.freedesktop.org
Tue Jun 17 01:21:53 PDT 2014
src/sna/sna_accel.c | 41 +++++++++++++++++++++++++++++++----------
1 file changed, 31 insertions(+), 10 deletions(-)
New commits:
commit 96d1fe314c4bb4d862b057a440e575bd32d63460
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jun 17 08:51:00 2014 +0100
sna: Add a few missing checks for all-damaged
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 f3f95e6..43fb6b9 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -2853,7 +2853,8 @@ move_to_cpu:
goto done;
}
} else {
- if (sna_damage_contains_box__no_reduce(priv->cpu_damage,
+ if (DAMAGE_IS_ALL(priv->cpu_damage) ||
+ sna_damage_contains_box__no_reduce(priv->cpu_damage,
®ion->extents)) {
assert(sna_damage_contains_box(&priv->gpu_damage, ®ion->extents) == PIXMAN_REGION_OUT);
assert(sna_damage_contains_box(&priv->cpu_damage, ®ion->extents) == PIXMAN_REGION_IN);
@@ -3623,7 +3624,8 @@ create_gpu_bo:
goto use_gpu_bo;
}
- if (sna_damage_contains_box__no_reduce(priv->gpu_damage,
+ if (DAMAGE_IS_ALL(priv->gpu_damage) ||
+ sna_damage_contains_box__no_reduce(priv->gpu_damage,
®ion.extents)) {
DBG(("%s: region wholly contained within GPU damage\n",
__FUNCTION__));
@@ -3829,6 +3831,7 @@ cpu_fail:
sna_damage_destroy(&priv->gpu_damage);
*damage = NULL;
} else {
+ assert(!DAMAGE_IS_ALL(priv->cpu_damage));
if (priv->cpu_damage &&
sna_damage_contains_box__no_reduce(priv->cpu_damage,
®ion.extents)) {
@@ -4712,8 +4715,9 @@ try_upload__blt(PixmapPtr pixmap, RegionRec *region,
assert(priv->gpu_bo->proxy == NULL);
if (priv->cpu_damage &&
- sna_damage_contains_box__no_reduce(priv->cpu_damage,
- ®ion->extents) &&
+ (DAMAGE_IS_ALL(priv->cpu_damage) ||
+ sna_damage_contains_box__no_reduce(priv->cpu_damage,
+ ®ion->extents)) &&
!box_inplace(pixmap, ®ion->extents)) {
DBG(("%s: no, damage on CPU and too small\n", __FUNCTION__));
return false;
commit 30f521c717f7301004e7cb77ba66b840b3f773c6
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jun 17 08:30:55 2014 +0100
sna: Discard GPU damage for the magic upload proxy
The magic upload proxy is initially considered damaged in both the GPU
and CPU.
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 d48321d..f3f95e6 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -2088,9 +2088,14 @@ _sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned int flags)
}
if (kgem_bo_discard_cache(priv->gpu_bo, flags & MOVE_WRITE)) {
- DBG(("%s: discarding cached upload buffer\n", __FUNCTION__));
assert(DAMAGE_IS_ALL(priv->cpu_damage));
- assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
+ if (DAMAGE_IS_ALL(priv->gpu_damage)) {
+ DBG(("%s: using magical upload buffer\n", __FUNCTION__));
+ goto skip;
+ }
+
+ DBG(("%s: discarding cached upload buffer\n", __FUNCTION__));
+ assert(priv->gpu_damage == NULL);
assert(!priv->pinned);
assert(!priv->mapped);
kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
@@ -2359,7 +2364,8 @@ done:
assert((flags & MOVE_WRITE) == 0 || !kgem_bo_is_busy(priv->cpu_bo));
}
}
- priv->cpu |= (flags & (MOVE_WRITE |MOVE_ASYNC_HINT)) == MOVE_WRITE;
+skip:
+ priv->cpu |= (flags & (MOVE_WRITE | MOVE_ASYNC_HINT)) == MOVE_WRITE;
assert(pixmap->devPrivate.ptr == PTR(priv->ptr));
assert(pixmap->devKind);
assert_pixmap_damage(pixmap);
@@ -2498,9 +2504,14 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
assert(priv->gpu_damage == NULL || priv->gpu_bo);
if (kgem_bo_discard_cache(priv->gpu_bo, flags & MOVE_WRITE)) {
- DBG(("%s: discarding cached upload buffer\n", __FUNCTION__));
assert(DAMAGE_IS_ALL(priv->cpu_damage));
- assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
+ if (DAMAGE_IS_ALL(priv->gpu_damage)) {
+ DBG(("%s: using magical upload buffer\n", __FUNCTION__));
+ goto skip;
+ }
+
+ DBG(("%s: discarding cached upload buffer\n", __FUNCTION__));
+ assert(priv->gpu_damage == NULL);
assert(!priv->pinned);
assert(!priv->mapped);
kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
@@ -2989,7 +3000,8 @@ out:
FORCE_FULL_SYNC || flags & MOVE_WRITE);
assert((flags & MOVE_WRITE) == 0 || !kgem_bo_is_busy(priv->cpu_bo));
}
- priv->cpu |= (flags & (MOVE_WRITE |MOVE_ASYNC_HINT)) == MOVE_WRITE;
+skip:
+ priv->cpu |= (flags & (MOVE_WRITE | MOVE_ASYNC_HINT)) == MOVE_WRITE;
assert(pixmap->devPrivate.ptr == PTR(priv->ptr));
assert(pixmap->devKind);
assert_pixmap_damage(pixmap);
@@ -3215,6 +3227,7 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
assert(!priv->pinned);
assert(!priv->mapped);
+ sna_damage_destroy(&priv->gpu_damage);
kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
priv->gpu_bo = NULL;
}
@@ -3458,6 +3471,7 @@ sna_drawable_use_bo(DrawablePtr drawable, unsigned flags, const BoxRec *box,
assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
assert(!priv->pinned);
assert(!priv->mapped);
+ sna_damage_destroy(&priv->gpu_damage);
kgem_bo_destroy(&to_sna_from_pixmap(pixmap)->kgem,
priv->gpu_bo);
priv->gpu_bo = NULL;
@@ -3954,6 +3968,7 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
assert(!priv->pinned);
assert(!priv->mapped);
+ sna_damage_destroy(&priv->gpu_damage);
kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
priv->gpu_bo = NULL;
}
@@ -4540,6 +4555,7 @@ try_upload__inplace(PixmapPtr pixmap, RegionRec *region,
assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
assert(!priv->pinned);
assert(!priv->mapped);
+ sna_damage_destroy(&priv->gpu_damage);
kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
priv->gpu_bo = NULL;
}
@@ -5999,6 +6015,7 @@ static void discard_cpu_damage(struct sna *sna, struct sna_pixmap *priv)
assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
assert(!priv->pinned);
assert(!priv->mapped);
+ sna_damage_destroy(&priv->gpu_damage);
kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
priv->gpu_bo = NULL;
}
More information about the xorg-commit
mailing list