xf86-video-intel: src/sna/sna_display.c

Chris Wilson ickle at kemper.freedesktop.org
Thu Apr 10 23:45:52 PDT 2014


 src/sna/sna_display.c |   22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

New commits:
commit 2eddc60a5fe1fabefcad93783d58354570132af3
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Apr 11 07:52:30 2014 +0100

    sna: Don't redraw cursor if the fg/bg colors do not change
    
    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 80b2624..88e8f63 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -3342,15 +3342,21 @@ sna_show_cursors(ScrnInfoPtr scrn)
 }
 
 static void
-sna_set_cursor_colors(ScrnInfoPtr scrn, int bg, int fg)
+sna_set_cursor_colors(ScrnInfoPtr scrn, int _bg, int _fg)
 {
 	struct sna *sna = to_sna(scrn);
+	uint32_t fg = _fg, bg = _bg;
 
 	__DBG(("%s(%08x, %08x)\n", __FUNCTION__, bg, fg));
 
 	/* Save ARGB versions of these colors */
-	sna->cursor.fg = (CARD32) fg | 0xff000000;
-	sna->cursor.bg = (CARD32) bg | 0xff000000;
+	fg |= 0xff000000;
+	bg |= 0xff000000;
+	if (fg == sna->cursor.fg && bg == sna->cursor.bg)
+		return;
+
+	sna->cursor.fg = fg;
+	sna->cursor.bg = bg;
 
 	if (sna->cursor.ref == NULL)
 		return;
@@ -3359,6 +3365,8 @@ sna_set_cursor_colors(ScrnInfoPtr scrn, int bg, int fg)
 		return;
 
 	sna->cursor.serial++;
+	__DBG(("%s: serial->%d\n", __FUNCTION__, sna->cursor.serial));
+
 	sna_show_cursors(scrn);
 }
 
@@ -3486,8 +3494,9 @@ disable:
 			}
 		}
 
-		__DBG(("%s: CRTC:%d (%d, %d), handle=%d, flags=%x (old cursor handle=%d)\n",
-		       __FUNCTION__, sna_crtc->id, arg.x, arg.y, arg.handle, arg.flags, sna_crtc->cursor ? sna_crtc->cursor->handle : 0));
+		__DBG(("%s: CRTC:%d (%d, %d), handle=%d, flags=%x (old cursor handle=%d), move? %d, update handle? %d\n",
+		       __FUNCTION__, sna_crtc->id, arg.x, arg.y, arg.handle, arg.flags, sna_crtc->cursor ? sna_crtc->cursor->handle : 0,
+		       arg.flags & DRM_MODE_CURSOR_MOVE, arg.flags & DRM_MODE_CURSOR_BO));
 
 		if (arg.flags &&
 		    drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_CURSOR, &arg) == 0)
@@ -3536,6 +3545,9 @@ sna_use_hw_cursor(ScreenPtr screen, CursorPtr cursor)
 {
 	struct sna *sna = to_sna_from_screen(screen);
 
+	__DBG(("%s (%dx%d)\n", __FUNCTION__,
+	       cursor->bits->width, cursor->bits->height));
+
 	/* cursors are invariant */
 	if (cursor == sna->cursor.ref)
 		return TRUE;


More information about the xorg-commit mailing list