Update to track udev API change in eagle.
This commit is contained in:
parent
ff52fbaaf8
commit
aa68fe346a
@ -7,7 +7,7 @@ PKG_CHECK_MODULES(LIBDRM, [libdrm])
|
|||||||
|
|
||||||
PKG_CHECK_MODULES(EGL_COMPOSITOR, [eagle libpng cairo gdk-pixbuf-2.0 libudev])
|
PKG_CHECK_MODULES(EGL_COMPOSITOR, [eagle libpng cairo gdk-pixbuf-2.0 libudev])
|
||||||
PKG_CHECK_MODULES(GL_COMPOSITOR, [gl x11])
|
PKG_CHECK_MODULES(GL_COMPOSITOR, [gl x11])
|
||||||
PKG_CHECK_MODULES(CLIENT, [eagle cairo glib-2.0])
|
PKG_CHECK_MODULES(CLIENT, [eagle cairo glib-2.0 libudev])
|
||||||
|
|
||||||
if test $CC = gcc; then
|
if test $CC = gcc; then
|
||||||
GCC_CFLAGS="-Wall -g -Wstrict-prototypes -Wmissing-prototypes -fvisibility=hidden"
|
GCC_CFLAGS="-Wall -g -Wstrict-prototypes -Wmissing-prototypes -fvisibility=hidden"
|
||||||
|
7
gears.c
7
gears.c
@ -341,9 +341,14 @@ gears_create(struct wl_display *display, int fd)
|
|||||||
const int x = 200, y = 200, width = 450, height = 500;
|
const int x = 200, y = 200, width = 450, height = 500;
|
||||||
EGLint major, minor, count;
|
EGLint major, minor, count;
|
||||||
EGLConfig configs[64];
|
EGLConfig configs[64];
|
||||||
|
struct udev *udev;
|
||||||
|
struct udev_device *device;
|
||||||
struct gears *gears;
|
struct gears *gears;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
udev = udev_new();
|
||||||
|
device = udev_device_new_from_syspath(udev, "/sys/class/drm/card0");
|
||||||
|
|
||||||
gears = malloc(sizeof *gears);
|
gears = malloc(sizeof *gears);
|
||||||
memset(gears, 0, sizeof *gears);
|
memset(gears, 0, sizeof *gears);
|
||||||
gears->wl_display = display;
|
gears->wl_display = display;
|
||||||
@ -351,7 +356,7 @@ gears_create(struct wl_display *display, int fd)
|
|||||||
gears->window = window_create(display, fd, "Wayland Gears",
|
gears->window = window_create(display, fd, "Wayland Gears",
|
||||||
x, y, width, height);
|
x, y, width, height);
|
||||||
|
|
||||||
gears->display = eglCreateDisplayNative("/dev/dri/card0", "i965");
|
gears->display = eglCreateDisplayNative(device);
|
||||||
if (gears->display == NULL)
|
if (gears->display == NULL)
|
||||||
die("failed to create egl display\n");
|
die("failed to create egl display\n");
|
||||||
|
|
||||||
|
@ -793,44 +793,6 @@ get_udev_property(struct udev_device *device, const char *name)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dri_driver_entry {
|
|
||||||
uint32_t vendor_id;
|
|
||||||
uint32_t chip_id;
|
|
||||||
const char *driver;
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct dri_driver_entry driver_map[] = {
|
|
||||||
/* FIXME: We need to extract this table from the dri drivers
|
|
||||||
* and store it on disk. For now, map my i965 to i965,
|
|
||||||
* anything else intel to i915 and that's that. */
|
|
||||||
|
|
||||||
{ 0x8086, 0x2a02, "i965" },
|
|
||||||
{ 0x8086, ~0, "i915" },
|
|
||||||
{ 0, }
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *
|
|
||||||
get_driver_for_device(struct udev_device *device)
|
|
||||||
{
|
|
||||||
struct udev_device *parent;
|
|
||||||
const char *pci_id;
|
|
||||||
uint32_t vendor_id, chip_id;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
parent = udev_device_get_parent(device);
|
|
||||||
pci_id = get_udev_property(parent, "PCI_ID");
|
|
||||||
if (sscanf(pci_id, "%x:%x", &vendor_id, &chip_id) != 2)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_LENGTH(driver_map); i++) {
|
|
||||||
if (driver_map[i].vendor_id == vendor_id &&
|
|
||||||
(driver_map[i].chip_id == ~0 || driver_map[i].chip_id == chip_id))
|
|
||||||
return driver_map[i].driver;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
init_egl(struct egl_compositor *ec, struct udev_device *device)
|
init_egl(struct egl_compositor *ec, struct udev_device *device)
|
||||||
{
|
{
|
||||||
@ -841,18 +803,9 @@ init_egl(struct egl_compositor *ec, struct udev_device *device)
|
|||||||
EGL_NONE
|
EGL_NONE
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *path, *driver;
|
|
||||||
EGLint major, minor;
|
EGLint major, minor;
|
||||||
|
|
||||||
path = udev_device_get_devnode(device);
|
ec->display = eglCreateDisplayNative(device);
|
||||||
driver = get_driver_for_device(device);
|
|
||||||
if (driver == NULL) {
|
|
||||||
fprintf(stderr, "didn't find driver for %s\n",
|
|
||||||
udev_device_get_devpath(device));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ec->display = eglCreateDisplayNative(path, driver);
|
|
||||||
if (ec->display == NULL) {
|
if (ec->display == NULL) {
|
||||||
fprintf(stderr, "failed to create display\n");
|
fprintf(stderr, "failed to create display\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user