xf86-video-intel: 3 commits - src/sna/sna_accel.c src/sna/sna_display.c src/sna/sna.h

Chris Wilson ickle at kemper.freedesktop.org
Thu Jan 16 04:19:34 PST 2014


 src/sna/sna.h         |   10 +++++++---
 src/sna/sna_accel.c   |    6 +++++-
 src/sna/sna_display.c |   12 +++++++++---
 3 files changed, 21 insertions(+), 7 deletions(-)

New commits:
commit 6db99169a99393a8a669f89682bb8df13a7c5677
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 16 11:20:30 2014 +0000

    sna: Regularly check that the devPrivate.ptr is valid
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna.h b/src/sna/sna.h
index 0acc9a2..3ac0fad 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -503,13 +503,17 @@ PixmapPtr sna_pixmap_create_unattached(ScreenPtr screen,
 				       int width, int height, int depth);
 void sna_pixmap_destroy(PixmapPtr pixmap);
 
-#define assert_pixmap_map(pixmap, priv) \
-	assert(priv->mapped == false || pixmap->devPrivate.ptr == (priv->mapped == MAPPED_CPU ? MAP(priv->gpu_bo->map__cpu) : MAP(priv->gpu_bo->map__gtt)));
+#define assert_pixmap_map(pixmap, priv)  do { \
+	assert(priv->mapped != MAPPED_NONE || pixmap->devPrivate.ptr == PTR(priv->ptr)); \
+	assert(priv->mapped == MAPPED_NONE || pixmap->devPrivate.ptr == (priv->mapped == MAPPED_CPU ? MAP(priv->gpu_bo->map__cpu) : MAP(priv->gpu_bo->map__gtt))); \
+} while (0)
 
 static inline void sna_pixmap_unmap(PixmapPtr pixmap, struct sna_pixmap *priv)
 {
-	if (priv->mapped == MAPPED_NONE)
+	if (priv->mapped == MAPPED_NONE) {
+		assert(pixmap->devPrivate.ptr == PTR(priv->ptr));
 		return;
+	}
 
 	DBG(("%s: pixmap=%ld dropping %s mapping\n",
 	     __FUNCTION__, pixmap->drawable.serialNumber,
commit 242d7503ddd98c59feda4bcc25e70cac06d3325e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 16 11:08:05 2014 +0000

    sna: Avoid allocating temporary storage for TearFree rotations
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 5bce764..10ee9e4 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -4307,12 +4307,18 @@ sna_crtc_redisplay__composite(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
 	DBG(("%s: compositing transformed damage boxes\n", __FUNCTION__));
 
 	pixmap = sna_pixmap_create_unattached(screen,
-					      crtc->mode.HDisplay,
-					      crtc->mode.VDisplay,
-					      sna->front->drawable.depth);
+					      0, 0, sna->front->drawable.depth);
 	if (pixmap == NullPixmap)
 		return;
 
+	if (!screen->ModifyPixmapHeader(pixmap,
+					crtc->mode.HDisplay,
+					crtc->mode.VDisplay,
+					sna->front->drawable.depth,
+					sna->front->drawable.bitsPerPixel,
+					bo->pitch, NULL))
+		goto free_pixmap;
+
 	if (!sna_pixmap_attach_to_bo(pixmap, bo))
 		goto free_pixmap;
 
commit 587452a6ad7ac57e37820c72220c4944451315a8
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 16 10:27:50 2014 +0000

    sna: Make the temporary upload pixmap as having a statically allocated pointer
    
    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 f6aee3c..fee5857 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -3681,11 +3681,13 @@ sna_pixmap_create_upload(ScreenPtr screen,
 	if (sna->freed_pixmap) {
 		pixmap = sna->freed_pixmap;
 		sna->freed_pixmap = pixmap->devPrivate.ptr;
+		assert(pixmap->refcnt == 0);
 
 		pixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
 		pixmap->refcnt = 1;
 	} else {
-		pixmap = create_pixmap(sna, screen, 0, 0, depth, 0);
+		pixmap = create_pixmap(sna, screen, 0, 0, depth,
+				       CREATE_PIXMAP_USAGE_SCRATCH);
 		if (!pixmap)
 			return NullPixmap;
 
@@ -3725,6 +3727,8 @@ sna_pixmap_create_upload(ScreenPtr screen,
 
 	pixmap->devKind = priv->gpu_bo->pitch;
 	pixmap->devPrivate.ptr = ptr;
+	priv->ptr = MAKE_STATIC_PTR(ptr);
+	priv->stride = priv->gpu_bo->pitch;
 
 	pixmap->usage_hint = 0;
 	if (!kgem_buffer_is_inplace(priv->gpu_bo))


More information about the xorg-commit mailing list