vulkan/wsi: handle queue families properly for non-concurrent sharing mode.
"queueFamilyIndexCount is the number of queue families having access to the image(s) of the
swapchain when imageSharingMode is VK_SHARING_MODE_CONCURRENT.
pQueueFamilyIndices is a pointer to an array of queue family indices having access to the
images(s) of the swapchain when imageSharingMode is VK_SHARING_MODE_CONCURRENT."
If the type isn't concurrent, don't attempt to access the arrays.
dEQP-VK.wsi.xlib.swapchain.create.exclusive_nonzero_queues on lavapipe.
Fixes: 5b13d74583 ("vulkan/wsi/drm: Break create_native_image in pieces")
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15101>
This commit is contained in:
@@ -362,16 +362,22 @@ wsi_configure_image(const struct wsi_swapchain *chain,
|
|||||||
struct wsi_image_info *info)
|
struct wsi_image_info *info)
|
||||||
{
|
{
|
||||||
memset(info, 0, sizeof(*info));
|
memset(info, 0, sizeof(*info));
|
||||||
|
uint32_t *queue_family_indices;
|
||||||
|
|
||||||
uint32_t *queue_family_indices =
|
if (pCreateInfo->imageSharingMode == VK_SHARING_MODE_CONCURRENT) {
|
||||||
vk_alloc(&chain->alloc,
|
queue_family_indices =
|
||||||
sizeof(*queue_family_indices) *
|
vk_alloc(&chain->alloc,
|
||||||
pCreateInfo->queueFamilyIndexCount,
|
sizeof(*queue_family_indices) *
|
||||||
8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
pCreateInfo->queueFamilyIndexCount,
|
||||||
if (!queue_family_indices)
|
8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||||
goto err_oom;
|
if (!queue_family_indices)
|
||||||
for (uint32_t i = 0; i < pCreateInfo->queueFamilyIndexCount; i++)
|
goto err_oom;
|
||||||
queue_family_indices[i] = pCreateInfo->pQueueFamilyIndices[i];
|
|
||||||
|
for (uint32_t i = 0; i < pCreateInfo->queueFamilyIndexCount; i++)
|
||||||
|
queue_family_indices[i] = pCreateInfo->pQueueFamilyIndices[i];
|
||||||
|
} else {
|
||||||
|
queue_family_indices = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
info->create = (VkImageCreateInfo) {
|
info->create = (VkImageCreateInfo) {
|
||||||
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
|
||||||
|
|||||||
Reference in New Issue
Block a user