From cb35b397395cff8ff7f5155759f58c1840bfeeb5 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Mon, 14 Apr 2014 17:12:37 +0100 Subject: [PATCH] sna: Rearrange cursor reuse to avoid sharing rotations Try not to steal a rotated cursor that is currently in use, or else we may see a brief flash of corruption. Signed-off-by: Chris Wilson --- src/sna/sna_display.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index 3f2b9125..6c43bb08 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -3160,13 +3160,25 @@ static struct sna_cursor *__sna_get_cursor(struct sna *sna, xf86CrtcPtr crtc) size = sna->cursor.size; for (cursor = sna->cursor.cursors; cursor; cursor = cursor->next) { - if (cursor->alloc >= 4*size*size && cursor->serial != sna->cursor.serial) { + if (cursor->alloc >= 4*size*size && cursor->rotation == rotation) { __DBG(("%s: stealing handle=%d, serial=%d, rotation=%d, alloc=%d\n", __FUNCTION__, cursor->handle, cursor->serial, cursor->rotation, cursor->alloc)); + assert(cursor->serial != sna->cursor.serial); break; } } + if (cursor == NULL) { + for (cursor = sna->cursor.cursors; cursor; cursor = cursor->next) { + if (cursor->alloc >= 4*size*size && cursor->serial != sna->cursor.serial) { + __DBG(("%s: stealing handle=%d, serial=%d, rotation=%d, alloc=%d\n", + __FUNCTION__, cursor->handle, cursor->serial, cursor->rotation, cursor->alloc)); + assert(cursor->rotation != sna->cursor.rotation); + break; + } + } + } + if (cursor == NULL) { cursor = __sna_create_cursor(sna); if (cursor == NULL)