egl_dri2: add nouveau support.
authorDave Airlie <airlied@redhat.com>
Sun, 13 Feb 2011 21:52:26 +0000 (07:52 +1000)
committerDave Airlie <airlied@redhat.com>
Sun, 13 Feb 2011 21:54:28 +0000 (07:54 +1000)
but really wtf? all these PCI IDs need to be ripped out of here, its totally
unscalable and the drivers already have this info so could export it some better way.

tested by Darxus on #wayland.

src/egl/drivers/dri2/platform_drm.c

index 42939a57a2aa79507e7bcc54b55036c8f3b43363..a25cad6d0c585ab3660ad721c83f75476b6d0229 100644 (file)
@@ -565,6 +565,7 @@ const struct dri2_driver_map driver_map[] = {
    { 0x1002, "r200", r200_chip_ids, ARRAY_SIZE(r200_chip_ids) },
    { 0x1002, "r300", r300_chip_ids, ARRAY_SIZE(r300_chip_ids) },
    { 0x1002, "r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) },
+   { 0x10de, "nouveau", NULL, -1 },
 };
 
 char *
@@ -605,6 +606,13 @@ dri2_get_driver_for_fd(int fd)
    for (i = 0; i < ARRAY_SIZE(driver_map); i++) {
       if (vendor_id != driver_map[i].vendor_id)
         continue;
+      if (driver_map[i].num_chips_ids == -1) {
+           driver = strdup(driver_map[i].driver);
+           _eglLog(_EGL_DEBUG, "pci id for %d: %04x:%04x, driver %s",
+                   fd, vendor_id, chip_id, driver);
+           goto out;
+      }
+
       for (j = 0; j < driver_map[i].num_chips_ids; j++)
         if (driver_map[i].chip_ids[j] == chip_id) {
            driver = strdup(driver_map[i].driver);