[Mesa-dev] [PATCH 5/5] egl/android: simplify device open/probe

Emil Velikov emil.l.velikov at gmail.com
Mon Aug 13 14:44:53 UTC 2018


From: Emil Velikov <emil.velikov at collabora.com>

Currently droid_probe_device, does not do any 'probing' but filtering
out a device if it doesn't match the vendor string given.

Rename the function, straighten the return type and call it only as
needed - an actual vendor string is provided.

Cc: Robert Foss <robert.foss at collabora.com>
Cc: Tomasz Figa <tfiga at chromium.org>
Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
---
 src/egl/drivers/dri2/platform_android.c | 52 +++++++++----------------
 1 file changed, 18 insertions(+), 34 deletions(-)

diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c
index 02bb0b55f03..ad160d6886f 100644
--- a/src/egl/drivers/dri2/platform_android.c
+++ b/src/egl/drivers/dri2/platform_android.c
@@ -1236,31 +1236,20 @@ error:
    return false;
 }
 
-typedef enum {
-   probe_fail = -1,
-   probe_success = 0,
-   probe_filtered_out = 1,
-} probe_ret_t;
-
-static probe_ret_t
-droid_probe_device(_EGLDisplay *disp, int fd, const char *vendor)
+static int
+droid_filter_device(_EGLDisplay *disp, int fd, const char *vendor)
 {
-   int ret;
-
    drmVersionPtr ver = drmGetVersion(fd);
    if (!ver)
-      return probe_fail;
+      return -1;
 
-   if (vendor && strcmp(vendor, ver->name) != 0) {
-      ret = probe_filtered_out;
-      goto cleanup;
+   if (strcmp(vendor, ver->name) != 0) {
+      drmFreeVersion(ver);
+      return -1;
    }
 
-   ret = probe_success;
-
-cleanup:
    drmFreeVersion(ver);
-   return ret;
+   return 0;
 }
 
 static int
@@ -1294,25 +1283,20 @@ droid_open_device(_EGLDisplay *disp)
          continue;
       }
 
-      int ret = droid_probe_device(disp, fd, vendor_name);
-      switch (ret) {
-      case probe_success:
-         goto success;
-      case probe_filtered_out:
-         /* Set as fallback */
-         if (fallback_fd == -1)
+      if (vendor_name && droid_filter_device(disp, fd, vendor_name)) {
+         /* Match requested, but not found - set as fallback */
+         if (fallback_fd == -1) {
             fallback_fd = fd;
-         break;
-      case probe_fail:
-         break;
-      }
+         } else {
+            close(fd);
+            fd = -1;
+         }
 
-      if (fallback_fd != fd)
-         close(fd);
-      fd = -1;
+         continue;
+      }
+      /* Found a device */
+      break;
    }
-
-success:
    drmFreeDevices(devices, num_devices);
 
    if (fallback_fd < 0 && fd < 0) {
-- 
2.18.0



More information about the mesa-dev mailing list