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