From 6bda88bfdbc06a238d910034442bf3b2b0ccdf00 Mon Sep 17 00:00:00 2001 From: Icenowy Zheng Date: Wed, 17 Dec 2025 15:23:47 +0800 Subject: [PATCH] pvr: copy WSI can_present_on_device function from PanVK Both PVR and PanVK are drivers for generic embedded GPU IP cores, so just take the can_present_on_device implementation from PanVK, which allows any platform devices for presentation. Signed-off-by: Icenowy Zheng Reviewed-by: Frank Binns Part-of: --- src/imagination/vulkan/pvr_wsi.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/imagination/vulkan/pvr_wsi.c b/src/imagination/vulkan/pvr_wsi.c index 8134a9c7030..4177b6284a1 100644 --- a/src/imagination/vulkan/pvr_wsi.c +++ b/src/imagination/vulkan/pvr_wsi.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "pvr_device.h" #include "pvr_entrypoints.h" @@ -50,6 +51,16 @@ static PFN_vkVoidFunction pvr_wsi_proc_addr(VkPhysicalDevice physicalDevice, return vk_instance_get_proc_addr_unchecked(&pdevice->instance->vk, pName); } +static bool pvr_can_present_on_device(VkPhysicalDevice pdevice, int fd) +{ + drmDevicePtr device; + if (drmGetDevice2(fd, 0, &device) != 0) + return false; + /* Allow on-device presentation for all devices with bus type PLATFORM. + * Other device types such as PCI or USB should use the PRIME blit path. */ + return device->bustype == DRM_BUS_PLATFORM; +} + VkResult pvr_wsi_init(struct pvr_physical_device *pdevice) { VkResult result; @@ -65,6 +76,7 @@ VkResult pvr_wsi_init(struct pvr_physical_device *pdevice) return result; pdevice->wsi_device.supports_modifiers = false; + pdevice->wsi_device.can_present_on_device = pvr_can_present_on_device; pdevice->vk.wsi_device = &pdevice->wsi_device; return VK_SUCCESS;