From 225449b96ded5052cab1b246341ee339f5396c6e Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Fri, 27 Jun 2025 10:50:58 +0200 Subject: [PATCH] Cleanup: Vulkan: Enable extensions When the list of extensions is constructed for `vkCreateDevice` it uses a function that retrieves all extensions just to iterate to check a specific extension is supported. However there is already a list cached that is that is the subset of the desired extensions that are supported by the device. This cleanup will use that list instead of requiring all supported extensions. Pull Request: https://projects.blender.org/blender/blender/pulls/141074 --- intern/ghost/intern/GHOST_ContextVK.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/intern/ghost/intern/GHOST_ContextVK.cc b/intern/ghost/intern/GHOST_ContextVK.cc index bc3f6dfb452..c726cc0e5b9 100644 --- a/intern/ghost/intern/GHOST_ContextVK.cc +++ b/intern/ghost/intern/GHOST_ContextVK.cc @@ -259,7 +259,7 @@ class GHOST_DeviceVK { } /* Check if the given extension name will be enabled. */ - auto extension_requested = [=](const char *extension_name) { + auto extension_enabled = [=](const char *extension_name) { for (const char *device_extension_name : device_extensions) { if (strcmp(device_extension_name, extension_name) == 0) { return true; @@ -327,7 +327,7 @@ class GHOST_DeviceVK { VkPhysicalDeviceDynamicRenderingFeatures dynamic_rendering = {}; dynamic_rendering.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES; dynamic_rendering.dynamicRendering = VK_TRUE; - if (has_extensions({VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME})) { + if (extension_enabled(VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME)) { feature_struct_ptr.push_back(&dynamic_rendering); } @@ -336,7 +336,7 @@ class GHOST_DeviceVK { dynamic_rendering_unused_attachments.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT; dynamic_rendering_unused_attachments.dynamicRenderingUnusedAttachments = VK_TRUE; - if (has_extensions({VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_EXTENSION_NAME})) { + if (extension_enabled(VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_EXTENSION_NAME)) { feature_struct_ptr.push_back(&dynamic_rendering_unused_attachments); } @@ -344,14 +344,14 @@ class GHOST_DeviceVK { dynamic_rendering_local_read.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR; dynamic_rendering_local_read.dynamicRenderingLocalRead = VK_TRUE; - if (has_extensions({VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_EXTENSION_NAME})) { + if (extension_enabled(VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_EXTENSION_NAME)) { feature_struct_ptr.push_back(&dynamic_rendering_local_read); } /* VK_EXT_robustness2 */ VkPhysicalDeviceRobustness2FeaturesEXT robustness_2_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT}; - if (has_extensions({VK_EXT_ROBUSTNESS_2_EXTENSION_NAME})) { + if (extension_enabled(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME)) { robustness_2_features.nullDescriptor = features_robustness2.nullDescriptor; feature_struct_ptr.push_back(&robustness_2_features); } @@ -360,14 +360,14 @@ class GHOST_DeviceVK { VkPhysicalDeviceMaintenance4FeaturesKHR maintenance_4 = {}; maintenance_4.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR; maintenance_4.maintenance4 = VK_TRUE; - if (has_extensions({VK_KHR_MAINTENANCE_4_EXTENSION_NAME})) { + if (extension_enabled(VK_KHR_MAINTENANCE_4_EXTENSION_NAME)) { feature_struct_ptr.push_back(&maintenance_4); } /* Swap-chain maintenance 1 is optional. */ VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT swapchain_maintenance_1 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT, nullptr, VK_TRUE}; - if (extension_requested(VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME)) { + if (extension_enabled(VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME)) { feature_struct_ptr.push_back(&swapchain_maintenance_1); use_vk_ext_swapchain_maintenance_1 = true; } @@ -380,7 +380,7 @@ class GHOST_DeviceVK { VK_FALSE, VK_FALSE, VK_FALSE}; - if (extension_requested(VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME)) { + if (extension_enabled(VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME)) { feature_struct_ptr.push_back(&descriptor_buffer); }