xf86-video-intel: 9 commits - src/sna/gen3_render.c src/sna/sna_accel.c src/sna/sna_render_inline.h src/sna/sna_trapezoids.c
Chris Wilson
ickle at kemper.freedesktop.org
Sun Aug 19 13:53:00 PDT 2012
src/sna/gen3_render.c | 13 +++++++++----
src/sna/sna_accel.c | 25 +++++++++++++++++++------
src/sna/sna_render_inline.h | 20 ++++++++++++++------
src/sna/sna_trapezoids.c | 41 +++++++++++++++++++++++++++++++++--------
4 files changed, 75 insertions(+), 24 deletions(-)
New commits:
commit c39fe0253847f5a86e16b47ba420c8ba819c9110
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 19 20:42:55 2012 +0100
sna: Do not use the GPU to migrate to the CPU whilst wedged!
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 4596a7a..04dacf1 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1126,6 +1126,9 @@ static inline bool use_cpu_bo_for_download(struct sna *sna,
if (DBG_NO_CPU_DOWNLOAD)
return false;
+ if (wedged(sna))
+ return false;
+
if (priv->cpu_bo == NULL || !sna->kgem.can_blt_cpu)
return false;
@@ -2144,6 +2147,7 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
assert_pixmap_damage(pixmap);
assert_pixmap_contains_box(pixmap, box);
+ assert(!wedged(sna));
if (sna_damage_is_all(&priv->gpu_damage,
pixmap->drawable.width,
commit fe05268d70088c8cad5f4b5ef756e1ffe2069fca
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 19 19:28:42 2012 +0100
sna: Experiment with flushing the batch prior to rendering to a ShmPixmap
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 0cd4b77..4596a7a 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -2572,8 +2572,11 @@ use_cpu_bo:
*damage = &priv->cpu_damage;
if (priv->shm) {
+ struct sna *sna = to_sna_from_pixmap(pixmap);
assert(!priv->flush);
- add_flush_pixmap(to_sna_from_pixmap(pixmap), priv);
+ add_flush_pixmap(sna, priv);
+ if (!kgem_bo_is_busy(priv->cpu_bo))
+ kgem_submit(&sna->kgem);
}
DBG(("%s: using CPU bo with damage? %d\n",
commit bbd7a825810cc9772e6d613df449cb5ecb0be3f6
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 19 19:28:20 2012 +0100
sna: Don't promote a ShmPixmap to GPU for a CopyArea
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 2a022e6..0cd4b77 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -3836,6 +3836,8 @@ move_to_gpu(PixmapPtr pixmap, struct sna_pixmap *priv,
} else {
if ((priv->create & KGEM_CAN_CREATE_GPU) == 0)
return false;
+ if (priv->shm)
+ return false;
}
count = priv->source_count++;
@@ -3947,7 +3949,7 @@ sna_self_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
if (priv == NULL || DAMAGE_IS_ALL(priv->cpu_damage))
goto fallback;
- if (priv->gpu_bo) {
+ if (priv->gpu_damage) {
if (alu == GXcopy && priv->clear)
goto out;
commit 7bf7a5ad1057f1aeb5b261da6dc501323c022287
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 19 19:17:35 2012 +0100
sna/gen3: Tidy vbo discard
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 5b0894e..48f104e 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1652,6 +1652,7 @@ static int gen3_vertex_finish(struct sna *sna)
sna->render.vbo = NULL;
return 0;
}
+ assert(sna->render.vbo->snoop == false);
if (sna->render.vertex_used) {
memcpy(sna->render.vertices,
@@ -1710,10 +1711,12 @@ static void gen3_vertex_close(struct sna *sna)
sna->render.vertex_used));
bo = kgem_create_linear(&sna->kgem,
4*sna->render.vertex_used, 0);
- if (bo)
+ if (bo) {
+ assert(sna->render.vbo->snoop == false);
kgem_bo_write(&sna->kgem, bo,
sna->render.vertex_data,
4*sna->render.vertex_used);
+ }
free_bo = bo;
}
}
@@ -1967,9 +1970,10 @@ gen3_render_reset(struct sna *sna)
state->last_vertex_offset = 0;
state->vertex_offset = 0;
- if (sna->render.vbo &&
+ if (sna->render.vbo != NULL &&
!kgem_bo_is_mappable(&sna->kgem, sna->render.vbo)) {
- DBG(("%s: discarding unmappable vbo\n", __FUNCTION__));
+ DBG(("%s: discarding vbo as next access will stall: %d\n",
+ __FUNCTION__, sna->render.vbo->presumed_offset));
discard_vbo(sna);
}
}
@@ -1980,7 +1984,8 @@ gen3_render_retire(struct kgem *kgem)
struct sna *sna;
sna = container_of(kgem, struct sna, kgem);
- if (kgem->nbatch == 0 && sna->render.vbo && !kgem_bo_is_busy(sna->render.vbo)) {
+ if (sna->render.vertex_reloc[0] == 0 &&
+ sna->render.vbo && !kgem_bo_is_busy(sna->render.vbo)) {
DBG(("%s: resetting idle vbo\n", __FUNCTION__));
sna->render.vertex_used = 0;
sna->render.vertex_index = 0;
commit d1b808fd72b477bde96f7c6737a993bd1a20baf2
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 19 17:53:24 2012 +0100
sna: Tweak is_cpu/is_gpu heuristics
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_render_inline.h b/src/sna/sna_render_inline.h
index 0024f99..3849a88 100644
--- a/src/sna/sna_render_inline.h
+++ b/src/sna/sna_render_inline.h
@@ -75,24 +75,32 @@ is_gpu(DrawablePtr drawable)
if (priv == NULL || priv->clear)
return false;
- if (DAMAGE_IS_ALL(priv->gpu_damage) ||
- (priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo) && !priv->gpu_bo->proxy))
+ if (priv->cpu_damage == NULL)
return true;
- return priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo);
+ if (priv->gpu_damage && !priv->gpu_bo->proxy)
+ return true;
+
+ if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo))
+ return true;
+
+ return priv->gpu_bo && kgem_bo_is_busy(priv->gpu_bo);
}
static inline bool
is_cpu(DrawablePtr drawable)
{
struct sna_pixmap *priv = sna_pixmap_from_drawable(drawable);
- if (priv == NULL || priv->gpu_bo == NULL || priv->clear)
+ if (priv == NULL || priv->clear)
return true;
- if (priv->gpu_damage && kgem_bo_is_busy(priv->gpu_bo))
+ if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo))
return false;
- if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo))
+ if (DAMAGE_IS_ALL(priv->cpu_damage))
+ return true;
+
+ if (priv->gpu_damage && kgem_bo_is_busy(priv->gpu_bo))
return false;
return true;
commit c682c1a37692021cbd9bfc1e3f1ccf2b648c73f9
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 19 17:28:25 2012 +0100
sna: Discard GPU (and damage) after applying clear on migration to 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 1723757..2a022e6 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1326,7 +1326,6 @@ skip_inplace_map:
assert(!priv->shm);
sna_pixmap_free_cpu(sna, priv);
}
- sna_damage_destroy(&priv->gpu_damage);
}
if (pixmap->devPrivate.ptr == NULL &&
@@ -1355,6 +1354,11 @@ skip_inplace_map:
priv->clear_color);
}
+ sna_damage_all(&priv->cpu_damage,
+ pixmap->drawable.width,
+ pixmap->drawable.height);
+ sna_pixmap_free_gpu(sna, priv);
+ priv->undamaged = false;
priv->clear = false;
}
commit dc83ef49f9e8ff94ab77aa9d54fe29e32b9d7a3d
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 19 17:20:45 2012 +0100
sna/trapezoids: Accept more operators for maybe-inplace
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index 0dcb971..6cc03f9 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -4671,22 +4671,41 @@ trapezoid_spans_maybe_inplace(CARD8 op, PicturePtr src, PicturePtr dst,
if (is_mono(dst, maskFormat))
goto out;
- if (!sna_picture_is_solid(src, NULL))
- return false;
-
switch ((int)dst->format) {
case PICT_a8:
+ if (!sna_picture_is_solid(src, NULL))
+ return false;
+
+ switch (op) {
+ case PictOpIn:
+ case PictOpAdd:
+ case PictOpSrc:
+ break;
+ default:
+ return false;
+ }
+ break;
+
case PICT_x8r8g8b8:
case PICT_a8r8g8b8:
- break;
- default:
- return false;
- }
+ if (picture_is_gpu(src))
+ return false;
- switch (op) {
- case PictOpIn:
- case PictOpAdd:
- case PictOpSrc:
+ switch (op) {
+ case PictOpOver:
+ case PictOpAdd:
+ case PictOpOutReverse:
+ break;
+ case PictOpSrc:
+ if (sna_picture_is_solid(src, NULL))
+ break;
+
+ if (!sna_drawable_is_clear(dst->pDrawable))
+ return false;
+ break;
+ default:
+ return false;
+ }
break;
default:
return false;
commit 47d948f5df0cd0e975cfe5183b6ce79cd3fd27ee
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 19 17:09:21 2012 +0100
sna: Update maybe_inplace to recognise more types of handled pixel formats
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index a1141f1..0dcb971 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -4674,8 +4674,14 @@ trapezoid_spans_maybe_inplace(CARD8 op, PicturePtr src, PicturePtr dst,
if (!sna_picture_is_solid(src, NULL))
return false;
- if (dst->format != PICT_a8)
+ switch ((int)dst->format) {
+ case PICT_a8:
+ case PICT_x8r8g8b8:
+ case PICT_a8r8g8b8:
+ break;
+ default:
return false;
+ }
switch (op) {
case PictOpIn:
commit 02963f489b177d0085006753e91e240545933387
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Aug 19 15:45:35 2012 +0100
sna: Only submit the batch if flushing a DRI client bo
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 31a9d3d..1723757 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -13362,13 +13362,13 @@ sna_accel_flush_callback(CallbackListPtr *list,
} else {
DBG(("%s: flushing DRI pixmap=%ld\n", __FUNCTION__,
priv->pixmap->drawable.serialNumber));
- ret = sna_pixmap_move_to_gpu(priv->pixmap,
- MOVE_READ | __MOVE_FORCE);
+ if (sna_pixmap_move_to_gpu(priv->pixmap,
+ MOVE_READ | __MOVE_FORCE))
+ kgem_bo_submit(&sna->kgem, priv->gpu_bo);
}
(void)ret;
}
- kgem_submit(&sna->kgem);
sna->kgem.flush = false;
}
More information about the xorg-commit
mailing list