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