aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmil Velikov <[email protected]>2018-08-08 15:40:56 +0100
committerEmil Velikov <[email protected]>2018-08-24 11:52:44 +0100
commit2c049384b1638fb25e7f9cfd423500ac19a48b72 (patch)
treeb129ca3d3ebd49dc14a451f83c98ae51137c6aec
parent2f8403a4ca523eada114505219b9f7e542be2869 (diff)
egl/android: simplify device open/probe
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. Signed-off-by: Emil Velikov <[email protected]> Reviewed-by: Tomasz Figa <[email protected]>
-rw-r--r--src/egl/drivers/dri2/platform_android.c52
1 files changed, 18 insertions, 34 deletions
diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c
index 24fd7769613..1f9fe27ab85 100644
--- a/src/egl/drivers/dri2/platform_android.c
+++ b/src/egl/drivers/dri2/platform_android.c
@@ -1404,31 +1404,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
@@ -1462,25 +1451,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) {