Mesa (main): anv: expose primary node to VK_EXT_physical_device_drm even when VK_KHR_display is not enabled

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jun 28 14:14:53 UTC 2021


Module: Mesa
Branch: main
Commit: 86fe8db4aaedb2c57d2a41546883531c0d97df7d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=86fe8db4aaedb2c57d2a41546883531c0d97df7d

Author: Ella-0 <23418164+Ella-0 at users.noreply.github.com>
Date:   Sun Jun 27 19:29:08 2021 +0000

anv: expose primary node to VK_EXT_physical_device_drm even when VK_KHR_display is not enabled

Fixes: e9e1e0362b6c2d ("anv: implement VK_EXT_physical_device_drm")
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11616>

---

 src/intel/vulkan/anv_device.c  | 48 ++++++++++++++++++++++++++----------------
 src/intel/vulkan/anv_private.h |  6 ++++++
 2 files changed, 36 insertions(+), 18 deletions(-)

diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index abebfea01a8..f01f4c3dfe1 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -991,6 +991,28 @@ anv_physical_device_try_create(struct anv_instance *instance,
 
    *device_out = device;
 
+   struct stat st;
+
+   if (stat(primary_path, &st) == 0) {
+      device->has_master = true;
+      device->master_major = major(st.st_rdev);
+      device->master_minor = minor(st.st_rdev);
+   } else {
+      device->has_master = false;
+      device->master_major = 0;
+      device->master_minor = 0;
+   }
+
+   if (stat(path, &st) == 0) {
+      device->has_local = true;
+      device->local_major = major(st.st_rdev);
+      device->local_minor = minor(st.st_rdev);
+   } else {
+      device->has_local = false;
+      device->local_major = 0;
+      device->local_minor = 0;
+   }
+
    return VK_SUCCESS;
 
 fail_engine_info:
@@ -2351,25 +2373,15 @@ void anv_GetPhysicalDeviceProperties2(
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT: {
          VkPhysicalDeviceDrmPropertiesEXT *props =
             (VkPhysicalDeviceDrmPropertiesEXT *)ext;
-         struct stat st;
-
-         props->hasPrimary = fstat(pdevice->master_fd, &st) == 0;
-         if (props->hasPrimary) {
-            props->primaryMajor = (int64_t) major(st.st_rdev);
-            props->primaryMinor = (int64_t) minor(st.st_rdev);
-         } else {
-            props->primaryMajor = 0;
-            props->primaryMinor = 0;
-         }
 
-         props->hasRender = fstat(pdevice->local_fd, &st) == 0;
-         if (props->hasRender) {
-            props->renderMajor = (int64_t) major(st.st_rdev);
-            props->renderMinor = (int64_t) minor(st.st_rdev);
-         } else {
-            props->renderMajor = 0;
-            props->renderMinor = 0;
-         }
+         props->hasPrimary = pdevice->has_master;
+         props->primaryMajor = pdevice->master_major;
+         props->primaryMinor = pdevice->master_minor;
+
+         props->hasRender = pdevice->has_local;
+         props->renderMajor = pdevice->local_major;
+         props->renderMinor = pdevice->local_minor;
+
          break;
       }
 
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index d380d6c52e2..0aa21b43749 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -988,7 +988,13 @@ struct anv_physical_device {
 
     struct wsi_device                       wsi_device;
     int                                         local_fd;
+    bool                                        has_local;
+    int64_t                                     local_major;
+    int64_t                                     local_minor;
     int                                         master_fd;
+    bool                                        has_master;
+    int64_t                                     master_major;
+    int64_t                                     master_minor;
     struct drm_i915_query_engine_info *         engine_info;
 
     void (*cmd_emit_timestamp)(struct anv_batch *, struct anv_bo *, uint32_t );



More information about the mesa-commit mailing list