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
This commit is contained in:
Jeroen Bakker
2025-06-27 10:50:58 +02:00
parent 5f28ef5574
commit 225449b96d

View File

@@ -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);
}