xf86-video-intel: src/sna/gen6_render.c src/sna/gen7_render.c src/sna/sna_dri.c src/sna/sna_render.h

Chris Wilson ickle at kemper.freedesktop.org
Thu Jan 17 12:02:40 PST 2013


 src/sna/gen6_render.c |    3 +++
 src/sna/gen7_render.c |    3 +++
 src/sna/sna_dri.c     |    7 ++++++-
 src/sna/sna_render.h  |    1 +
 4 files changed, 13 insertions(+), 1 deletion(-)

New commits:
commit 9f68ac60ae37cc72503ec40691d1ae43a476f8e7
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 17 20:00:34 2013 +0000

    sna/dri: Explicitly flag sync copies for the backends
    
    As gen6/7 need to prevent ring switching and perform a rendercopy if we
    need to perform a vsync'ed copy.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 8b1ae3c..7af59ae 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2453,6 +2453,9 @@ static inline bool prefer_blt_copy(struct sna *sna,
 				   struct kgem_bo *dst_bo,
 				   unsigned flags)
 {
+	if (flags & COPY_SYNC)
+		return false;
+
 	if (PREFER_RENDER)
 		return PREFER_RENDER > 0;
 
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 2269b3a..5880e7a 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2557,6 +2557,9 @@ static inline bool prefer_blt_copy(struct sna *sna,
 				   struct kgem_bo *dst_bo,
 				   unsigned flags)
 {
+	if (flags & COPY_SYNC)
+		return false;
+
 	if (sna->kgem.ring == KGEM_BLT)
 		return true;
 
diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c
index e972537..b48894e 100644
--- a/src/sna/sna_dri.c
+++ b/src/sna/sna_dri.c
@@ -677,10 +677,15 @@ sna_dri_copy_to_front(struct sna *sna, DrawablePtr draw, RegionPtr region,
 				      dst_bo, 0, 0,
 				      boxes, n);
 	} else {
+		unsigned flags;
+
+		flags = COPY_LAST;
+		if (flush)
+			flags |= COPY_SYNC;
 		sna->render.copy_boxes(sna, GXcopy,
 				       (PixmapPtr)draw, src_bo, -draw->x-dx, -draw->y-dy,
 				       pixmap, dst_bo, 0, 0,
-				       boxes, n, COPY_LAST);
+				       boxes, n, flags);
 
 		DBG(("%s: flushing? %d\n", __FUNCTION__, flush));
 		if (flush) { /* STAT! */
diff --git a/src/sna/sna_render.h b/src/sna/sna_render.h
index 4174b6f..13a3e7d 100644
--- a/src/sna/sna_render.h
+++ b/src/sna/sna_render.h
@@ -242,6 +242,7 @@ struct sna_render {
 			   PixmapPtr dst, struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
 			   const BoxRec *box, int n, unsigned flags);
 #define COPY_LAST 0x1
+#define COPY_SYNC 0x2
 
 	bool (*copy)(struct sna *sna, uint8_t alu,
 		     PixmapPtr src, struct kgem_bo *src_bo,


More information about the xorg-commit mailing list