summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-04-11 07:52:30 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2014-04-11 07:52:30 +0100
commit2eddc60a5fe1fabefcad93783d58354570132af3 (patch)
treec99515d84dcd19ccfc2dff62ccbbc374c31de4dd
parenta79eb2e29a158910785580409c51a585f25876a7 (diff)
sna: Don't redraw cursor if the fg/bg colors do not change
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/sna_display.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 80b26248..88e8f638 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;