From 1c01ad1b804a6c46d22775c1622de412eec50fa3 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 28 Dec 2020 15:39:18 -0500 Subject: [PATCH] zink: add KHR_draw_indirect_count detection this is a vk 1.2 feature Reviewed-by: Hoe Hao Cheng Part-of: --- src/gallium/drivers/zink/zink_instance.py | 1 + src/gallium/drivers/zink/zink_screen.c | 11 +++++++++++ src/gallium/drivers/zink/zink_screen.h | 3 +++ 3 files changed, 15 insertions(+) diff --git a/src/gallium/drivers/zink/zink_instance.py b/src/gallium/drivers/zink/zink_instance.py index 27b72eea948..d0745d810cf 100644 --- a/src/gallium/drivers/zink/zink_instance.py +++ b/src/gallium/drivers/zink/zink_instance.py @@ -7,6 +7,7 @@ EXTENSIONS = [ Extension("VK_EXT_debug_utils"), Extension("VK_KHR_maintenance2"), Extension("VK_KHR_get_physical_device_properties2"), + Extension("VK_KHR_draw_indirect_count"), Extension("VK_KHR_external_memory_capabilities"), Extension("VK_MVK_moltenvk"), ] diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 3e08734c3b4..9cdfc821cf9 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -834,6 +834,17 @@ load_instance_extensions(struct zink_screen *screen) GET_PROC_ADDR_INSTANCE(GetPhysicalDeviceProperties2); } + if (screen->instance_info.have_KHR_draw_indirect_count) { + GET_PROC_ADDR_INSTANCE_LOCAL(screen->instance, CmdDrawIndirectCountKHR); + GET_PROC_ADDR_INSTANCE_LOCAL(screen->instance, CmdDrawIndexedIndirectCountKHR); + screen->vk_CmdDrawIndirectCount = vk_CmdDrawIndirectCountKHR; + screen->vk_CmdDrawIndexedIndirectCount = vk_CmdDrawIndexedIndirectCountKHR; + } else if (VK_MAKE_VERSION(1,1,0) <= screen->loader_version) { + // Get Vk 1.1+ Instance functions + GET_PROC_ADDR_INSTANCE(CmdDrawIndirectCount); + GET_PROC_ADDR_INSTANCE(CmdDrawIndexedIndirectCount); + } + return true; } diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h index 2bf407b92da..d47d9028208 100644 --- a/src/gallium/drivers/zink/zink_screen.h +++ b/src/gallium/drivers/zink/zink_screen.h @@ -78,6 +78,9 @@ struct zink_screen { PFN_vkGetPhysicalDeviceFeatures2 vk_GetPhysicalDeviceFeatures2; PFN_vkGetPhysicalDeviceProperties2 vk_GetPhysicalDeviceProperties2; + PFN_vkCmdDrawIndirectCount vk_CmdDrawIndirectCount; + PFN_vkCmdDrawIndexedIndirectCount vk_CmdDrawIndexedIndirectCount; + PFN_vkGetMemoryFdKHR vk_GetMemoryFdKHR; PFN_vkCmdBeginConditionalRenderingEXT vk_CmdBeginConditionalRenderingEXT; PFN_vkCmdEndConditionalRenderingEXT vk_CmdEndConditionalRenderingEXT;