Mesa (main): anv: implement VK_EXT_physical_device_drm

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jun 21 19:39:12 UTC 2021


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

Author: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Date:   Fri Jan 22 12:38:41 2021 +0200

anv: implement VK_EXT_physical_device_drm

v2: add docs
    update error messages (Sagar)

v3: Use fstat() (Jason)

v4: Do fstat() on demand (Jason)

v5: clear major/minor values if not present (Jason)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Sagar Ghuge <sagar.ghuge at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8649>

---

 docs/features.txt             |  1 +
 src/intel/vulkan/anv_device.c | 28 ++++++++++++++++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/docs/features.txt b/docs/features.txt
index 933988be9f2..b44cd6e1a76 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -533,6 +533,7 @@ Khronos extensions that are not part of any Vulkan version:
   VK_EXT_memory_budget                                  DONE (anv, radv, tu)
   VK_EXT_memory_priority                                DONE (radv)
   VK_EXT_pci_bus_info                                   DONE (anv, radv)
+  VK_EXT_physical_device_drm                            DONE (anv)
   VK_EXT_pipeline_creation_cache_control                DONE (anv, radv)
   VK_EXT_pipeline_creation_feedback                     DONE (anv, radv)
   VK_EXT_post_depth_coverage                            DONE (anv/gfx10+, lvp, radv)
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 7a66f629ee6..e329e29075b 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -24,7 +24,9 @@
 #include <assert.h>
 #include <stdbool.h>
 #include <string.h>
+#include <sys/sysmacros.h>
 #include <sys/mman.h>
+#include <sys/stat.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include "drm-uapi/drm_fourcc.h"
@@ -281,6 +283,7 @@ get_device_extensions(const struct anv_physical_device *device,
       .EXT_line_rasterization                = true,
       .EXT_memory_budget                     = device->has_mem_available,
       .EXT_pci_bus_info                      = true,
+      .EXT_physical_device_drm               = true,
       .EXT_pipeline_creation_cache_control   = true,
       .EXT_pipeline_creation_feedback        = true,
       .EXT_post_depth_coverage               = device->info.ver >= 9,
@@ -2248,6 +2251,31 @@ void anv_GetPhysicalDeviceProperties2(
          break;
       }
 
+      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;
+         }
+         break;
+      }
+
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT: {
          VkPhysicalDeviceExternalMemoryHostPropertiesEXT *props =
             (VkPhysicalDeviceExternalMemoryHostPropertiesEXT *) ext;



More information about the mesa-commit mailing list