mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-04 10:40:36 +01:00
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> (cherry picked from commit85a94be0fe)
This commit is contained in:
parent
d45ccc05f1
commit
238b018789
2 changed files with 18 additions and 14 deletions
|
|
@ -1228,7 +1228,7 @@
|
|||
"description": "vulkan/wsi: keep allocate queue families in image, just don't fill them",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "48b3ef625e1909c1be31fbe10adb53734af38eb4"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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…
Add table
Reference in a new issue