diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index f8db023331..4a7ec0bc51 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -1051,11 +1051,12 @@ bool Device::GetSuitability(bool requires_swapchain) { // Vulkan 1.2 and 1.3 features if (instance_version >= VK_API_VERSION_1_2) { features_1_2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES; - features_1_3.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES; + SetNext(next, features_1_2); - features_1_2.pNext = &features_1_3; - - *next = &features_1_2; + if (instance_version >= VK_API_VERSION_1_3) { + features_1_3.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES; + SetNext(next, features_1_3); + } } // Test all features we know about. If the feature is not available in core at our diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index f1674e32a1..a0342b55ea 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -771,10 +771,11 @@ public: /// Returns the minimum supported version of SPIR-V. u32 SupportedSpirvVersion() const { - if (instance_version >= VK_API_VERSION_1_3) { + const bool has_float_controls = extensions.shader_float_controls; + if (instance_version >= VK_API_VERSION_1_3 && has_float_controls) { return 0x00010600U; } - if (extensions.spirv_1_4) { + if (extensions.spirv_1_4 && has_float_controls) { return 0x00010400U; } return 0x00010300U;