xf86-video-intel: 3 commits - src/intel_module.c tools/virtual.c

Chris Wilson ickle at kemper.freedesktop.org
Sat May 16 14:17:29 PDT 2015


 src/intel_module.c |    3 +++
 tools/virtual.c    |   53 ++++++++++++++++++++++++++++++++++++++++-------------
 2 files changed, 43 insertions(+), 13 deletions(-)

New commits:
commit aa44ba990a4c49fcfc5ed7dbf9968e3c622ffa0a
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat May 16 22:05:05 2015 +0100

    intel: Prevent crash with X -configure
    
    When run with -configure, xf86configptr is NULL, so be careful and do
    not dereference it.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/intel_module.c b/src/intel_module.c
index 2a3b016..689c0dd 100644
--- a/src/intel_module.c
+++ b/src/intel_module.c
@@ -514,6 +514,9 @@ static enum accel_method { NOACCEL, SNA, UXA } get_accel_method(void)
 	if (hosted())
 		return SNA;
 
+	if (xf86configptr == NULL) /* X -configure */
+		return SNA;
+
 	dev = _xf86findDriver("intel", xf86configptr->conf_device_lst);
 	if (dev && dev->dev_option_lst) {
 		const char *s;
commit f696867c897f1f879c4c03e19690e8217db4d81e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed May 13 13:58:20 2015 +0100

    intel-virtual-output: Record the cursor shape in the DBG log
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/tools/virtual.c b/tools/virtual.c
index 75bd701..f5cba1a 100644
--- a/tools/virtual.c
+++ b/tools/virtual.c
@@ -1654,6 +1654,26 @@ static void display_load_visible_cursor(struct display *display, XFixesCursorIma
 	dst = display->cursor_image.pixels;
 	while (n--)
 		*dst++ = *src++;
+
+	if (verbose & CURSOR) {
+		int x, y;
+
+		printf("%s cursor image %dx%d, serial %d:\n",
+		       DisplayString(display->dpy),
+		       cur->width, cur->height,
+		       display->cursor_serial);
+		dst = display->cursor_image.pixels;
+		for (y = 0; y < cur->height; y++) {
+			for (x = 0; x < cur->width; x++) {
+				if (x == cur->xhot && y == cur->yhot)
+					printf("+");
+				else
+					printf("%c", *dst ? *dst >> 24 >= 127 ? 'x' : '.' : ' ');
+				dst++;
+			}
+			printf("\n");
+		}
+	}
 }
 
 static void display_cursor_move(struct display *display, int x, int y, int visible)
commit 63c43dfa63f4a5ecfa5a00f8b802c56f40d2908c
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed May 13 13:44:41 2015 +0100

    intel-virtual-output: Only store cursor image on reference display
    
    We only need a single copy of the cursor image, from which we can create
    all the cloned cursors.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/tools/virtual.c b/tools/virtual.c
index 850eb92..75bd701 100644
--- a/tools/virtual.c
+++ b/tools/virtual.c
@@ -111,7 +111,7 @@ struct display {
 	Cursor invisible_cursor;
 	Cursor visible_cursor;
 
-	XcursorImage cursor_image;
+	XcursorImage cursor_image; /* first only */
 	int cursor_serial;
 	int cursor_x;
 	int cursor_y;
@@ -1614,14 +1614,17 @@ static Cursor display_load_invisible_cursor(struct display *display)
 
 static Cursor display_get_visible_cursor(struct display *display)
 {
-	if (display->cursor_serial != display->cursor_image.size) {
-		DBG(CURSOR, ("%s updating cursor\n", DisplayString(display->dpy)));
+	struct display *first = display->ctx->display;
+
+	if (display->cursor_serial != first->cursor_serial) {
+		DBG(CURSOR, ("%s updating cursor %dx%d, serial %d\n",
+		    DisplayString(display->dpy), first->cursor_image.width, first->cursor_image.height, first->cursor_serial));
 
 		if (display->visible_cursor)
 			XFreeCursor(display->dpy, display->visible_cursor);
 
-		display->visible_cursor = XcursorImageLoadCursor(display->dpy, &display->cursor_image);
-		display->cursor_serial = display->cursor_image.size;
+		display->visible_cursor = XcursorImageLoadCursor(display->dpy, &first->cursor_image);
+		display->cursor_serial = first->cursor_serial;
 	}
 
 	return display->visible_cursor;
@@ -1644,20 +1647,13 @@ static void display_load_visible_cursor(struct display *display, XFixesCursorIma
 	display->cursor_image.height = cur->height;
 	display->cursor_image.xhot = cur->xhot;
 	display->cursor_image.yhot = cur->yhot;
-	display->cursor_image.size++;
+	display->cursor_serial++;
 
 	n = cur->width*cur->height;
 	src = cur->pixels;
 	dst = display->cursor_image.pixels;
 	while (n--)
 		*dst++ = *src++;
-
-	DBG(CURSOR, ("%s marking cursor changed\n", DisplayString(display->dpy)));
-	display->cursor_moved++;
-	if (display->cursor != display->invisible_cursor) {
-		display->cursor_visible++;
-		context_enable_timer(display->ctx);
-	}
 }
 
 static void display_cursor_move(struct display *display, int x, int y, int visible)
@@ -1700,6 +1696,8 @@ static void display_flush_cursor(struct display *display)
 	if (cursor == None)
 		cursor = display->invisible_cursor;
 	if (cursor != display->cursor) {
+		DBG(CURSOR, ("%s setting cursor shape %lx\n",
+		    DisplayString(display->dpy), (long)cursor));
 		XDefineCursor(display->dpy, display->root, cursor);
 		display->cursor = cursor;
 	}
@@ -3405,8 +3403,17 @@ int main(int argc, char **argv)
 					if (cur == NULL)
 						continue;
 
-					for (i = 1; i < ctx.ndisplay; i++)
-						display_load_visible_cursor(&ctx.display[i], cur);
+					display_load_visible_cursor(&ctx.display[0], cur);
+					for (i = 1; i < ctx.ndisplay; i++) {
+						struct display *display = &ctx.display[i];
+
+						DBG(CURSOR, ("%s marking cursor changed\n", DisplayString(display->dpy)));
+						display->cursor_moved++;
+						if (display->cursor != display->invisible_cursor) {
+							display->cursor_visible++;
+							context_enable_timer(display->ctx);
+						}
+					}
 
 					XFree(cur);
 				} else if (e.type == ctx.display->rr_event + RRScreenChangeNotify) {


More information about the xorg-commit mailing list