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:
parent
e6706d230e
commit
85a94be0fe
|
@ -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,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue