diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2014-04-11 07:52:30 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2014-04-11 07:52:30 +0100 |
commit | 2eddc60a5fe1fabefcad93783d58354570132af3 (patch) | |
tree | c99515d84dcd19ccfc2dff62ccbbc374c31de4dd | |
parent | a79eb2e29a158910785580409c51a585f25876a7 (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.c | 22 |
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; |