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

Chris Wilson ickle at kemper.freedesktop.org
Sun Mar 17 14:59:31 PDT 2013


 src/sna/kgem.c    |    3 ++-
 src/sna/sna_dri.c |    7 ++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

New commits:
commit 16dac417c8049d65b3641e0f662865772faad61f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sun Mar 17 21:56:56 2013 +0000

    sna/dri: Fix stale Pixmap detection
    
    NB the back buffer is not associated with the Drawable and so has no
    pixmap field set. Hence comparing the front->pixmap against the
    back->pixmap was always rejecting the blit. All we can check is that
    front->pixmap corresponds with the current Drawable and so reject stale
    configuration.
    
    Reported-by: Jiri Slaby <jirislaby at gmail.com>
    References: https://bugs.freedesktop.org/show_bug.cgi?id=47597
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c
index 2d3a262..1a02449 100644
--- a/src/sna/sna_dri.c
+++ b/src/sna/sna_dri.c
@@ -884,8 +884,13 @@ can_blit(struct sna * sna,
 	if (draw->type == DRAWABLE_PIXMAP)
 		return true;
 
-	if (get_private(front)->pixmap != get_private(back)->pixmap)
+	if (get_private(front)->pixmap != get_drawable_pixmap(draw)) {
+		DBG(("%s: reject as front pixmap=%ld, but expecting pixmap=%ld\n",
+		     __FUNCTION__,
+		     get_private(front)->pixmap ? get_private(front)->pixmap->drawable.serialNumber : 0,
+		     get_drawable_pixmap(draw)->drawable.serialNumber));
 		return false;
+	}
 
 	clip = &((WindowPtr)draw)->clipList;
 	w = clip->extents.x2 - draw->x;
commit 85213d5d450eec5696496128c1acecb5ca13c53b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sun Mar 17 21:42:48 2013 +0000

    sna: Don't remove the flush flag for userptr bo
    
    This flag is far too overload with meaning, but for now this prevents us
    attempting to call free() on a SHM segment.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index a01da88..e0d864d 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1752,7 +1752,8 @@ static void __kgem_bo_destroy(struct kgem *kgem, struct kgem_bo *bo)
 			kgem_bo_move_to_snoop(kgem, bo);
 		return;
 	}
-	bo->flush = false;
+	if (!IS_USER_MAP(bo->map))
+		bo->flush = false;
 
 	if (bo->scanout) {
 		kgem_bo_move_to_scanout(kgem, bo);


More information about the xorg-commit mailing list