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.
dev
Chia-I Wu 14 years ago committed by Kristian Høgsberg
parent 4d8ba216c5
commit 1b6c0ed95a
  1. 17
      compositor/compositor-x11.c
  2. 5
      configure.ac

@ -16,6 +16,10 @@
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stddef.h> #include <stddef.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -152,9 +156,22 @@ dri2_connect(struct x11_compositor *c)
return -1; return -1;
} }
#ifdef XCB_DRI2_CONNECT_DEVICE_NAME_BROKEN
{
char *driver_name, *device_name;
driver_name = xcb_dri2_connect_driver_name (connect);
device_name = driver_name +
((connect->driver_name_length + 3) & ~3);
snprintf(path, sizeof path, "%.*s",
xcb_dri2_connect_device_name_length (connect),
device_name);
}
#else
snprintf(path, sizeof path, "%.*s", snprintf(path, sizeof path, "%.*s",
xcb_dri2_connect_device_name_length (connect), xcb_dri2_connect_device_name_length (connect),
xcb_dri2_connect_device_name (connect)); xcb_dri2_connect_device_name (connect));
#endif
free(connect); free(connect);
fd = open(path, O_RDWR); fd = open(path, O_RDWR);

@ -34,6 +34,11 @@ AC_CHECK_LIB(expat, XML_ParserCreate, [EXPAT_LIBS="-lexpat"],
[AC_MSG_ERROR([Can't find expat library. Please install expat.])]) [AC_MSG_ERROR([Can't find expat library. Please install expat.])])
AC_SUBST(EXPAT_LIBS) AC_SUBST(EXPAT_LIBS)
# workaround a bug in xcb-dri2 generated by xcb-proto 1.6
AC_CHECK_LIB(xcb-dri2, xcb_dri2_connect_alignment_pad, [],
[AC_DEFINE([XCB_DRI2_CONNECT_DEVICE_NAME_BROKEN], [1],
[Define to 1 if xcb_dri2_connect_device_name is broken])])
AC_CONFIG_FILES([wayland/wayland-server.pc AC_CONFIG_FILES([wayland/wayland-server.pc
wayland/wayland-client.pc wayland/wayland-client.pc
Makefile Makefile

Loading…
Cancel
Save