From d7a1bd94fb907570fb0c666db1a6395f97e17618 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 8 Jan 2021 07:59:51 -0500 Subject: [PATCH] zink: check descriptor layout support before creating it Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_descriptors.c | 11 +++++++++++ src/gallium/drivers/zink/zink_device_info.py | 1 + src/gallium/drivers/zink/zink_screen.c | 3 +++ src/gallium/drivers/zink/zink_screen.h | 2 ++ 4 files changed, 17 insertions(+) diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c index 0bc410c2ec3..0d5c0a01061 100644 --- a/src/gallium/drivers/zink/zink_descriptors.c +++ b/src/gallium/drivers/zink/zink_descriptors.c @@ -191,6 +191,17 @@ descriptor_layout_create(struct zink_screen *screen, VkDescriptorSetLayoutBindin dcslci.flags = 0; dcslci.bindingCount = num_bindings; dcslci.pBindings = bindings; + VkDescriptorSetLayoutSupport supp; + supp.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT; + supp.pNext = NULL; + supp.supported = VK_FALSE; + if (screen->vk_GetDescriptorSetLayoutSupport) { + screen->vk_GetDescriptorSetLayoutSupport(screen->dev, &dcslci, &supp); + if (supp.supported == VK_FALSE) { + debug_printf("vkGetDescriptorSetLayoutSupport claims layout is unsupported\n"); + return VK_NULL_HANDLE; + } + } if (vkCreateDescriptorSetLayout(screen->dev, &dcslci, 0, &dsl) != VK_SUCCESS) debug_printf("vkCreateDescriptorSetLayout failed\n"); return dsl; diff --git a/src/gallium/drivers/zink/zink_device_info.py b/src/gallium/drivers/zink/zink_device_info.py index 785e0ca91c9..eeef50df321 100644 --- a/src/gallium/drivers/zink/zink_device_info.py +++ b/src/gallium/drivers/zink/zink_device_info.py @@ -62,6 +62,7 @@ EXTENSIONS = [ Extension("VK_KHR_maintenance1", required=True), Extension("VK_KHR_maintenance2"), + Extension("VK_KHR_maintenance3"), Extension("VK_KHR_external_memory"), Extension("VK_KHR_external_memory_fd"), Extension("VK_EXT_provoking_vertex", diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index ed445881d51..77ac64d3de5 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -1215,6 +1215,9 @@ load_device_extensions(struct zink_screen *screen) if (screen->info.have_KHR_timeline_semaphore) GET_PROC_ADDR_KHR(WaitSemaphores); + if (screen->info.have_KHR_maintenance3) + GET_PROC_ADDR_KHR(GetDescriptorSetLayoutSupport); + screen->have_triangle_fans = true; #if defined(VK_EXTX_PORTABILITY_SUBSET_EXTENSION_NAME) if (screen->info.have_EXTX_portability_subset) { diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h index a49355a5ce4..8a45f3cab81 100644 --- a/src/gallium/drivers/zink/zink_screen.h +++ b/src/gallium/drivers/zink/zink_screen.h @@ -116,6 +116,8 @@ struct zink_screen { PFN_vkWaitSemaphores vk_WaitSemaphores; + PFN_vkGetDescriptorSetLayoutSupport vk_GetDescriptorSetLayoutSupport; + PFN_vkGetMemoryFdKHR vk_GetMemoryFdKHR; PFN_vkCmdBeginConditionalRenderingEXT vk_CmdBeginConditionalRenderingEXT; PFN_vkCmdEndConditionalRenderingEXT vk_CmdEndConditionalRenderingEXT;