vulkan/wsi: keep allocate queue families in image, just don't fill them

This changes the code so that it only looks at the passed in families
when concurrent, otherwise it always allocates one.

Fixes: 48b3ef625e ("vulkan/wsi: handle queue families properly for non-concurrent sharing mode.")
Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Acked-by: Jason Ekstrand <jason.ekstrand@collabora.com>
Tested-by: Mike Lothian <mike@fireburn.co.uk>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15331>
This commit is contained in:
Dave Airlie 2022-03-14 05:54:20 +10:00
parent e6706d230e
commit 85a94be0fe
1 changed files with 17 additions and 13 deletions

View File

@ -362,22 +362,26 @@ wsi_configure_image(const struct wsi_swapchain *chain,
struct wsi_image_info *info)
{
memset(info, 0, sizeof(*info));
uint32_t *queue_family_indices;
uint32_t queue_family_count = 1;
if (pCreateInfo->imageSharingMode == VK_SHARING_MODE_CONCURRENT) {
queue_family_indices =
vk_alloc(&chain->alloc,
sizeof(*queue_family_indices) *
pCreateInfo->queueFamilyIndexCount,
8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
if (!queue_family_indices)
goto err_oom;
if (pCreateInfo->imageSharingMode == VK_SHARING_MODE_CONCURRENT)
queue_family_count = pCreateInfo->queueFamilyIndexCount;
/*
* TODO: there should be no reason to allocate this, but
* 15331 shows that games crashed without doing this.
*/
uint32_t *queue_family_indices =
vk_alloc(&chain->alloc,
sizeof(*queue_family_indices) *
queue_family_count,
8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
if (!queue_family_indices)
goto err_oom;
if (pCreateInfo->imageSharingMode == VK_SHARING_MODE_CONCURRENT)
for (uint32_t i = 0; i < pCreateInfo->queueFamilyIndexCount; i++)
queue_family_indices[i] = pCreateInfo->pQueueFamilyIndices[i];
} else {
queue_family_indices = NULL;
}
info->create = (VkImageCreateInfo) {
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
@ -395,7 +399,7 @@ wsi_configure_image(const struct wsi_swapchain *chain,
.tiling = VK_IMAGE_TILING_OPTIMAL,
.usage = pCreateInfo->imageUsage,
.sharingMode = pCreateInfo->imageSharingMode,
.queueFamilyIndexCount = pCreateInfo->queueFamilyIndexCount,
.queueFamilyIndexCount = queue_family_count,
.pQueueFamilyIndices = queue_family_indices,
.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
};