diff --git a/.pick_status.json b/.pick_status.json index 03c5730d152..264ad5c91e3 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -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" }, diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c index 5c89e7ceb1f..10f98844098 100644 --- a/src/vulkan/wsi/wsi_common.c +++ b/src/vulkan/wsi/wsi_common.c @@ -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, };