From 4ca075ac4f047141d5e5ef865991650e0ac488e4 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Wed, 2 Mar 2011 21:23:04 +0100 Subject: egl_dri2 x11: Workaround device_name xcb-dri2 bug This commit is basically a copy-over of the fix Chia-I Wu's commited to wayland: http://cgit.freedesktop.org/wayland/wayland-demos/commit/?id=1b6c0ed95 "Workaround an xcb-dri2 bug. xcb_dri2_connect_device_name generated by xcb-proto 1.6 is broken. It only works when the length of the driver name is a multiple of 4." --- src/egl/drivers/dri2/platform_x11.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'src/egl') diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index c7bdfa6287..b3e60b8a11 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -478,6 +478,7 @@ dri2_connect(struct dri2_egl_display *dri2_dpy) xcb_dri2_connect_cookie_t connect_cookie; xcb_generic_error_t *error; xcb_screen_iterator_t s; + char *driver_name, *device_name; xcb_prefetch_extension_data (dri2_dpy->conn, &xcb_xfixes_id); xcb_prefetch_extension_data (dri2_dpy->conn, &xcb_dri2_id); @@ -524,14 +525,21 @@ dri2_connect(struct dri2_egl_display *dri2_dpy) return EGL_FALSE; } - dri2_dpy->device_name = - dri2_strndup(xcb_dri2_connect_device_name (connect), - xcb_dri2_connect_device_name_length (connect)); - + driver_name = xcb_dri2_connect_driver_name (connect); dri2_dpy->driver_name = - dri2_strndup(xcb_dri2_connect_driver_name (connect), + dri2_strndup(driver_name, xcb_dri2_connect_driver_name_length (connect)); +#if XCB_DRI2_CONNECT_DEVICE_NAME_BROKEN + device_name = driver_name + ((connect->driver_name_length + 3) & ~3); +#else + device_name = xcb_dri2_connect_device_name (connect); +#endif + + dri2_dpy->device_name = + dri2_strndup(device_name, + xcb_dri2_connect_device_name_length (connect)); + if (dri2_dpy->device_name == NULL || dri2_dpy->driver_name == NULL) { free(dri2_dpy->device_name); free(dri2_dpy->driver_name); -- cgit v1.2.3