From c6a885190248de623a6c9ef82e6f177fefb16ca9 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Thu, 20 Jul 2023 14:59:54 -0500 Subject: [PATCH] nvk: Implement VK_EXT_physical_device_drm Part-of: --- src/nouveau/vulkan/nvk_physical_device.c | 17 +++++++++++++++++ src/nouveau/vulkan/nvk_physical_device.h | 1 + 2 files changed, 18 insertions(+) diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index 073d2c53fb3..0f2993fae5b 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -15,6 +15,7 @@ #include "vulkan/wsi/wsi_common.h" #include +#include #include "cl90c0.h" #include "cl91c0.h" @@ -247,6 +248,17 @@ nvk_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, continue; switch (ext->sType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT: { + VkPhysicalDeviceDrmPropertiesEXT *p = (void *)ext; + p->hasPrimary = pdev->primary_dev != 0; + p->primaryMajor = major(pdev->primary_dev); + p->primaryMinor = minor(pdev->primary_dev); + p->hasRender = pdev->render_dev != 0; + p->renderMajor = major(pdev->render_dev); + p->renderMinor = minor(pdev->render_dev); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT: { VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *p = (void *)ext; p->dynamicPrimitiveTopologyUnrestricted = true; @@ -373,6 +385,7 @@ nvk_get_device_extensions(const struct nv_device_info *info, .EXT_mutable_descriptor_type = true, .EXT_non_seamless_cube_map = true, .EXT_pci_bus_info = info->type == NV_DEVICE_TYPE_DIS, + .EXT_physical_device_drm = true, .EXT_private_data = true, .EXT_provoking_vertex = true, .EXT_robustness2 = true, @@ -674,6 +687,10 @@ nvk_create_drm_physical_device(struct vk_instance *_instance, pdev->render_dev = render_dev; pdev->info = info; + if ((drm_device->available_nodes & (1 << DRM_NODE_PRIMARY)) && + !stat(drm_device->nodes[DRM_NODE_PRIMARY], &st)) + pdev->primary_dev = st.st_rdev; + const struct { uint16_t vendor_id; uint16_t device_id; diff --git a/src/nouveau/vulkan/nvk_physical_device.h b/src/nouveau/vulkan/nvk_physical_device.h index 7d747632a2f..02217809122 100644 --- a/src/nouveau/vulkan/nvk_physical_device.h +++ b/src/nouveau/vulkan/nvk_physical_device.h @@ -18,6 +18,7 @@ struct nvk_physical_device { struct vk_physical_device vk; struct nv_device_info info; dev_t render_dev; + dev_t primary_dev; struct wsi_device wsi_device; uint8_t device_uuid[VK_UUID_SIZE];