Mesa (main): vulkan/wsi: keep allocate queue families in image, just don't fill them
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Apr 29 01:20:02 UTC 2022
Module: Mesa
Branch: main
Commit: 85a94be0fec1dad9b22ee346383a4abb46a6e990
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=85a94be0fec1dad9b22ee346383a4abb46a6e990
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Mar 14 05:54:20 2022 +1000
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: 48b3ef625e19 ("vulkan/wsi: handle queue families properly for non-concurrent sharing mode.")
Acked-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Acked-by: Jason Ekstrand <jason.ekstrand at collabora.com>
Tested-by: Mike Lothian <mike at fireburn.co.uk>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15331>
---
src/vulkan/wsi/wsi_common.c | 34 +++++++++++++++++++---------------
1 file changed, 19 insertions(+), 15 deletions(-)
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;
-
- 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;
-
+ uint32_t queue_family_count = 1;
+
+ 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,
};
More information about the mesa-commit
mailing list