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;