Hey,

On 13/08/2018 16.44, Emil Velikov wrote:
From: Emil Velikov <emil.veli...@collabora.com>

Replace the manual handling of /dev/dri in famour of the drmDevice API.
The latter provides a consistent way of enumerating the devices,
providing device details as needed.

Thanks for coding this up, it's neater and the way to go since vitio-gpu
support landed in libdrm.

Reviewed-by: Robert Foss <robert.f...@collabora.com>


Cc: Robert Foss <robert.f...@collabora.com>
Cc: Tomasz Figa <tf...@chromium.org>
Signed-off-by: Emil Velikov <emil.veli...@collabora.com>
---
If using VGEM the following patch is needed [1]. It's been on the list
for ages - will double-check and commmit it to drm-misc.

[1] https://lists.freedesktop.org/archives/dri-devel/2018-March/170944.html
---
  src/egl/drivers/dri2/platform_android.c | 23 +++++++++--------------
  1 file changed, 9 insertions(+), 14 deletions(-)

diff --git a/src/egl/drivers/dri2/platform_android.c 
b/src/egl/drivers/dri2/platform_android.c
index cc16fd8118f..685851acfc2 100644
--- a/src/egl/drivers/dri2/platform_android.c
+++ b/src/egl/drivers/dri2/platform_android.c
@@ -1290,6 +1290,7 @@ static int
  droid_open_device(_EGLDisplay *disp)
  {
     const int MAX_DRM_DEVICES = 32;
+   drmDevicePtr device, devices[MAX_DRM_DEVICES] = { NULL };
     int prop_set, num_devices;
     int fd = -1, fallback_fd = -1;
@@ -1299,23 +1300,17 @@ droid_open_device(_EGLDisplay *disp)
     if (property_get("drm.gpu.vendor_name", vendor_buf, NULL) > 0)
        vendor_name = vendor_buf;
- const char *drm_dir_name = "/dev/dri";
-   DIR *sysdir = opendir(drm_dir_name);
+   num_devices = drmGetDevices2(0, devices, MAX_DRM_DEVICES);
+   if (num_devices < 0)
+      return num_devices;
- if (!sysdir)
-       return -errno;
+   for (int i = 0; i < num_devices; i++) {
+      device = devices[i];
- struct dirent *dent;
-   while ((dent = readdir(sysdir))) {
-      char dev_path[128];
-      const char render_dev_prefix[] = "renderD";
-      size_t prefix_len = sizeof(render_dev_prefix) - 1;
-
-      if (strncmp(render_dev_prefix, dent->d_name, prefix_len) != 0)
+      if (!(device->available_nodes & (1 << DRM_NODE_RENDER)))
           continue;
- snprintf(dev_path, sizeof(dev_path), "%s/%s", drm_dir_name, dent->d_name);
-      fd = loader_open_device(dev_path);
+      fd = loader_open_device(device->nodes[DRM_NODE_RENDER]);
        if (fd < 0) {
           _eglLog(_EGL_WARNING, "%s() Failed to open DRM device %s",
                   __func__, dev_path);
@@ -1341,7 +1336,7 @@ droid_open_device(_EGLDisplay *disp)
     }
success:
-   closedir(sysdir);
+   drmFreeDevices(devices, num_devices);
if (fallback_fd < 0 && fd < 0) {
        _eglLog(_EGL_WARNING, "Failed to open any DRM device");

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to