diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index b03c8f1d314..2a0236f43f8 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -1776,18 +1776,11 @@ radv_CreateImage(VkDevice _device, const VkImageCreateInfo *pCreateInfo, const V return radv_image_from_gralloc(_device, pCreateInfo, gralloc_info, pAllocator, pImage); #endif -#ifdef RADV_USE_WSI_PLATFORM - /* Ignore swapchain creation info on Android. Since we don't have an implementation in Mesa, - * we're guaranteed to access an Android object incorrectly. - */ VK_FROM_HANDLE(radv_device, device, _device); const struct radv_physical_device *pdev = radv_device_physical(device); - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { - return wsi_common_create_swapchain_image(pdev->vk.wsi_device, pCreateInfo, swapchain_info->swapchain, pImage); - } -#endif + + if (wsi_common_is_swapchain_image(pCreateInfo)) + return wsi_common_create_swapchain_image(pdev->vk.wsi_device, pCreateInfo, pImage); const struct wsi_image_create_info *wsi_info = vk_find_struct_const(pCreateInfo->pNext, WSI_IMAGE_CREATE_INFO_MESA); bool scanout = wsi_info && wsi_info->scanout; diff --git a/src/asahi/vulkan/hk_image.c b/src/asahi/vulkan/hk_image.c index 602b2b3d814..8c66f999a70 100644 --- a/src/asahi/vulkan/hk_image.c +++ b/src/asahi/vulkan/hk_image.c @@ -984,18 +984,8 @@ hk_CreateImage(VkDevice _device, const VkImageCreateInfo *pCreateInfo, struct hk_image *image; VkResult result; -#ifdef HK_USE_WSI_PLATFORM - /* Ignore swapchain creation info on Android. Since we don't have an - * implementation in Mesa, we're guaranteed to access an Android object - * incorrectly. - */ - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { - return wsi_common_create_swapchain_image( - &pdev->wsi_device, pCreateInfo, swapchain_info->swapchain, pImage); - } -#endif + if (wsi_common_is_swapchain_image(pCreateInfo)) + return wsi_common_create_swapchain_image(&pdev->wsi_device, pCreateInfo, pImage); image = vk_zalloc2(&dev->vk.alloc, pAllocator, sizeof(*image), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); diff --git a/src/broadcom/vulkan/v3dv_image.c b/src/broadcom/vulkan/v3dv_image.c index 7b777bc78ea..d9faf761e8e 100644 --- a/src/broadcom/vulkan/v3dv_image.c +++ b/src/broadcom/vulkan/v3dv_image.c @@ -533,16 +533,11 @@ create_image(struct v3dv_device *device, const VkAllocationCallbacks *pAllocator, VkImage *pImage) { -#if !DETECT_OS_ANDROID - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { + if (wsi_common_is_swapchain_image(pCreateInfo)) { return wsi_common_create_swapchain_image(&device->pdevice->wsi_device, pCreateInfo, - swapchain_info->swapchain, pImage); } -#endif VkResult result; struct v3dv_image *image = NULL; diff --git a/src/freedreno/vulkan/tu_image.cc b/src/freedreno/vulkan/tu_image.cc index 168b0eea455..4ac16ce719f 100644 --- a/src/freedreno/vulkan/tu_image.cc +++ b/src/freedreno/vulkan/tu_image.cc @@ -834,20 +834,11 @@ tu_CreateImage(VkDevice _device, VK_FROM_HANDLE(tu_device, device, _device); -#ifdef TU_USE_WSI_PLATFORM - /* Ignore swapchain creation info on Android. Since we don't have an - * implementation in Mesa, we're guaranteed to access an Android object - * incorrectly. - */ - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { + if (wsi_common_is_swapchain_image(pCreateInfo)) { return wsi_common_create_swapchain_image(device->physical_device->vk.wsi_device, pCreateInfo, - swapchain_info->swapchain, pImage); } -#endif struct tu_image *image = (struct tu_image *) vk_image_create(&device->vk, pCreateInfo, alloc, sizeof(*image)); diff --git a/src/gallium/frontends/lavapipe/lvp_image.c b/src/gallium/frontends/lavapipe/lvp_image.c index e4d607e5b69..acbbacaa091 100644 --- a/src/gallium/frontends/lavapipe/lvp_image.c +++ b/src/gallium/frontends/lavapipe/lvp_image.c @@ -223,17 +223,14 @@ lvp_CreateImage(VkDevice _device, const VkAllocationCallbacks *pAllocator, VkImage *pImage) { -#if !DETECT_OS_ANDROID VK_FROM_HANDLE(lvp_device, device, _device); - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { + + if (wsi_common_is_swapchain_image(pCreateInfo)) { return wsi_common_create_swapchain_image(&lvp_device_physical(device)->wsi_device, pCreateInfo, - swapchain_info->swapchain, pImage); } -#endif + return lvp_image_create(_device, pCreateInfo, pAllocator, pImage); } diff --git a/src/imagination/vulkan/pvr_image.c b/src/imagination/vulkan/pvr_image.c index 0d23ed186f8..7772825a50c 100644 --- a/src/imagination/vulkan/pvr_image.c +++ b/src/imagination/vulkan/pvr_image.c @@ -162,16 +162,11 @@ VkResult pvr_CreateImage(VkDevice _device, VK_FROM_HANDLE(pvr_device, device, _device); struct pvr_image *image; -#if defined(PVR_USE_WSI_PLATFORM) - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { + if (wsi_common_is_swapchain_image(pCreateInfo)) { return wsi_common_create_swapchain_image(&device->pdevice->wsi_device, pCreateInfo, - swapchain_info->swapchain, pImage); } -#endif image = vk_image_create(&device->vk, pCreateInfo, pAllocator, sizeof(*image)); diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index 9fc244b79e3..16bf029aaf9 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -2268,20 +2268,11 @@ VkResult anv_CreateImage( mesa_logi("=== %s %s:%d flags:0x%08x\n", __func__, __FILE__, __LINE__, pCreateInfo->flags); -#ifndef VK_USE_PLATFORM_ANDROID_KHR - /* Skip the WSI common swapchain creation here on Android. Similar to ahb, - * this case is handled by a partial image init and then resolved when the - * image is bound and gralloc info is passed. - */ - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { + if (wsi_common_is_swapchain_image(pCreateInfo)) { return wsi_common_create_swapchain_image(&device->physical->wsi_device, pCreateInfo, - swapchain_info->swapchain, pImage); } -#endif struct anv_image *image = vk_object_zalloc(&device->vk, pAllocator, sizeof(*image), diff --git a/src/intel/vulkan_hasvk/anv_image.c b/src/intel/vulkan_hasvk/anv_image.c index 9aa16fdec9b..aecac26f67c 100644 --- a/src/intel/vulkan_hasvk/anv_image.c +++ b/src/intel/vulkan_hasvk/anv_image.c @@ -1341,20 +1341,11 @@ VkResult anv_CreateImage( { ANV_FROM_HANDLE(anv_device, device, _device); -#ifndef VK_USE_PLATFORM_ANDROID_KHR - /* Ignore swapchain creation info on Android. Since we don't have an - * implementation in Mesa, we're guaranteed to access an Android object - * incorrectly. - */ - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { + if (wsi_common_is_swapchain_image(pCreateInfo)) { return wsi_common_create_swapchain_image(&device->physical->wsi_device, pCreateInfo, - swapchain_info->swapchain, pImage); } -#endif struct anv_image *image = vk_object_zalloc(&device->vk, pAllocator, sizeof(*image), diff --git a/src/kosmickrisp/vulkan/kk_image.c b/src/kosmickrisp/vulkan/kk_image.c index 7958ac88bb9..f3cd1efa47b 100644 --- a/src/kosmickrisp/vulkan/kk_image.c +++ b/src/kosmickrisp/vulkan/kk_image.c @@ -604,18 +604,8 @@ kk_CreateImage(VkDevice _device, const VkImageCreateInfo *pCreateInfo, struct kk_image *image; VkResult result; -#ifdef KK_USE_WSI_PLATFORM - /* Ignore swapchain creation info on Android. Since we don't have an - * implementation in Mesa, we're guaranteed to access an Android object - * incorrectly. - */ - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { - return wsi_common_create_swapchain_image( - &pdev->wsi_device, pCreateInfo, swapchain_info->swapchain, pImage); - } -#endif + if (wsi_common_is_swapchain_image(pCreateInfo)) + return wsi_common_create_swapchain_image(&pdev->wsi_device, pCreateInfo, pImage); image = vk_zalloc2(&dev->vk.alloc, pAllocator, sizeof(*image), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); diff --git a/src/nouveau/vulkan/nvk_image.c b/src/nouveau/vulkan/nvk_image.c index 7dc9af6cf47..b373bcf4c80 100644 --- a/src/nouveau/vulkan/nvk_image.c +++ b/src/nouveau/vulkan/nvk_image.c @@ -1086,20 +1086,11 @@ nvk_CreateImage(VkDevice _device, struct nvk_image *image; VkResult result; -#ifdef NVK_USE_WSI_PLATFORM - /* Ignore swapchain creation info on Android. Since we don't have an - * implementation in Mesa, we're guaranteed to access an Android object - * incorrectly. - */ - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { + if (wsi_common_is_swapchain_image(pCreateInfo)) { return wsi_common_create_swapchain_image(&pdev->wsi_device, pCreateInfo, - swapchain_info->swapchain, pImage); } -#endif image = vk_zalloc2(&dev->vk.alloc, pAllocator, sizeof(*image), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); diff --git a/src/panfrost/vulkan/panvk_image.c b/src/panfrost/vulkan/panvk_image.c index c1a98e8f38a..92e795a7992 100644 --- a/src/panfrost/vulkan/panvk_image.c +++ b/src/panfrost/vulkan/panvk_image.c @@ -618,12 +618,9 @@ panvk_CreateImage(VkDevice device, const VkImageCreateInfo *pCreateInfo, pImage); } - const VkImageSwapchainCreateInfoKHR *swapchain_info = - vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); - if (swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE) { + if (wsi_common_is_swapchain_image(pCreateInfo)) { return wsi_common_create_swapchain_image(&phys_dev->wsi_device, pCreateInfo, - swapchain_info->swapchain, pImage); } diff --git a/src/virtio/vulkan/vn_image.c b/src/virtio/vulkan/vn_image.c index aa3cafacad7..36f80b64fc5 100644 --- a/src/virtio/vulkan/vn_image.c +++ b/src/virtio/vulkan/vn_image.c @@ -689,7 +689,7 @@ vn_CreateImage(VkDevice device, #else result = wsi_common_create_swapchain_image( &dev->physical_device->wsi_device, pCreateInfo, - swapchain_info->swapchain, (VkImage *)&img); + (VkImage *)&img); #endif } else { struct vn_image_create_info local_info; diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c index a23b6f6c6ee..b861bb75ed7 100644 --- a/src/vulkan/wsi/wsi_common.c +++ b/src/vulkan/wsi/wsi_common.c @@ -39,6 +39,7 @@ #include "vk_sync_dummy.h" #include "vk_util.h" +#include #include #include #include @@ -1838,10 +1839,13 @@ wsi_GetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkResult wsi_common_create_swapchain_image(const struct wsi_device *wsi, const VkImageCreateInfo *pCreateInfo, - VkSwapchainKHR _swapchain, VkImage *pImage) { - VK_FROM_HANDLE(wsi_swapchain, chain, _swapchain); + const VkImageSwapchainCreateInfoKHR *swapchain_info = + vk_find_struct_const(pCreateInfo->pNext, IMAGE_SWAPCHAIN_CREATE_INFO_KHR); + assert(swapchain_info); + + VK_FROM_HANDLE(wsi_swapchain, chain, swapchain_info->swapchain); #ifndef NDEBUG const VkImageCreateInfo *swcInfo = &chain->image_info.create; diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h index 940cc222d62..ae6b3f7b87c 100644 --- a/src/vulkan/wsi/wsi_common.h +++ b/src/vulkan/wsi/wsi_common.h @@ -309,7 +309,6 @@ wsi_common_is_swapchain_image(const VkImageCreateInfo *pCreateInfo) VkResult wsi_common_create_swapchain_image(const struct wsi_device *wsi, const VkImageCreateInfo *pCreateInfo, - VkSwapchainKHR _swapchain, VkImage *pImage); VkImageUsageFlags