Vulkan: Make Maintenance4 Extension Optional
`VK_KHR_maintenance4` extension is core in Vulkan 1.3. As Blender should support Vulkan 1.2 we should not enable this extension when it isn't available.This fixes issue to run Vulkan backend on some platforms (Intel Iris Plus). Maintenance4 is used to relax the interface matching rules to allow a larger output vector to match with a smaller input vector, with additional values being discarded. When Maintenance4 isn't enabled a few shaders might run a tiny bit slower as it triggers a performance notice. Users won't notice the performance slowdown. Pull Request: https://projects.blender.org/blender/blender/pulls/113239
This commit is contained in:
parent
8860dc9910
commit
6e18bb4e3e
|
@ -179,7 +179,7 @@ class GHOST_DeviceVK {
|
|||
}
|
||||
}
|
||||
|
||||
bool extensions_support(const vector<const char *> &required_extensions)
|
||||
bool has_extensions(const vector<const char *> &required_extensions)
|
||||
{
|
||||
uint32_t ext_count;
|
||||
vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &ext_count, nullptr);
|
||||
|
@ -238,18 +238,23 @@ class GHOST_DeviceVK {
|
|||
|
||||
VkPhysicalDeviceMaintenance4FeaturesKHR maintenance_4 = {};
|
||||
maintenance_4.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR;
|
||||
maintenance_4.pNext = &device_12_features;
|
||||
maintenance_4.maintenance4 = VK_TRUE;
|
||||
/* Mainenance4 is core in Vulkan 1.3 so we need to query for availability. */
|
||||
if (has_extensions({VK_KHR_MAINTENANCE_4_EXTENSION_NAME})) {
|
||||
maintenance_4.pNext = device_12_features.pNext;
|
||||
device_12_features.pNext = &maintenance_4;
|
||||
}
|
||||
|
||||
/* Enable shader draw parameters on logical device when supported on physical device. */
|
||||
VkPhysicalDeviceShaderDrawParametersFeatures shader_draw_parameters = {};
|
||||
shader_draw_parameters.sType =
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES;
|
||||
shader_draw_parameters.shaderDrawParameters = features_11.shaderDrawParameters;
|
||||
shader_draw_parameters.pNext = &maintenance_4;
|
||||
shader_draw_parameters.pNext = device_12_features.pNext;
|
||||
device_12_features.pNext = &shader_draw_parameters;
|
||||
|
||||
VkDeviceCreateInfo device_create_info = {};
|
||||
device_create_info.pNext = &shader_draw_parameters;
|
||||
device_create_info.pNext = &device_12_features;
|
||||
device_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||
device_create_info.queueCreateInfoCount = uint32_t(queue_create_infos.size());
|
||||
device_create_info.pQueueCreateInfos = queue_create_infos.data();
|
||||
|
@ -320,7 +325,7 @@ static GHOST_TSuccess ensure_vulkan_device(VkInstance vk_instance,
|
|||
for (const auto &physical_device : physical_devices) {
|
||||
GHOST_DeviceVK device_vk(vk_instance, physical_device);
|
||||
|
||||
if (!device_vk.extensions_support(required_extensions)) {
|
||||
if (!device_vk.has_extensions(required_extensions)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -950,8 +955,6 @@ GHOST_TSuccess GHOST_ContextVK::initializeDrawingContext()
|
|||
}
|
||||
extensions_device.push_back("VK_KHR_dedicated_allocation");
|
||||
extensions_device.push_back("VK_KHR_get_memory_requirements2");
|
||||
/* Allow relaxed interface matching between shader stages. */
|
||||
extensions_device.push_back("VK_KHR_maintenance4");
|
||||
/* Enable MoltenVK required instance extensions. */
|
||||
#ifdef VK_MVK_MOLTENVK_EXTENSION_NAME
|
||||
requireExtension(
|
||||
|
@ -1042,7 +1045,7 @@ GHOST_TSuccess GHOST_ContextVK::initializeDrawingContext()
|
|||
/* According to the Vulkan specs, when `VK_KHR_portability_subset` is available it should be
|
||||
* enabled. See
|
||||
* https://vulkan.lunarg.com/doc/view/1.2.198.1/mac/1.2-extensions/vkspec.html#VUID-VkDeviceCreateInfo-pProperties-04451*/
|
||||
if (vulkan_device->extensions_support({VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME})) {
|
||||
if (vulkan_device->has_extensions({VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME})) {
|
||||
extensions_device.push_back(VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME);
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue