|
|
|
@ -9,6 +9,7 @@ |
|
|
|
#include <chrono>
|
|
|
|
#include <optional>
|
|
|
|
#include <thread>
|
|
|
|
#include <type_traits>
|
|
|
|
#include <unordered_set>
|
|
|
|
#include <utility>
|
|
|
|
#include <vector>
|
|
|
|
@ -597,17 +598,25 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR |
|
|
|
VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); |
|
|
|
} |
|
|
|
} |
|
|
|
if (extensions.extended_dynamic_state3 && is_radv && !force_extensions) { |
|
|
|
if (extensions.extended_dynamic_state3 && is_radv) { |
|
|
|
LOG_WARNING(Render_Vulkan, "RADV has broken extendedDynamicState3ColorBlendEquation"); |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = true; |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEquation = true; |
|
|
|
dynamic_state3_blending = false; |
|
|
|
if (!force_extensions) { |
|
|
|
LOG_WARNING(Render_Vulkan, |
|
|
|
"AMD and Samsung drivers have broken extendedDynamicState3ColorBlendEquation"); |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false; |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEquation = false; |
|
|
|
dynamic_state3_blending = false; |
|
|
|
} else if (force_extensions) { |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = true; |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEquation = true; |
|
|
|
dynamic_state3_blending = true; |
|
|
|
} |
|
|
|
|
|
|
|
const u32 version = (properties.properties.driverVersion << 3) >> 3; |
|
|
|
if (version < VK_MAKE_API_VERSION(0, 23, 1, 0) && !force_extensions) { |
|
|
|
LOG_WARNING(Render_Vulkan, |
|
|
|
"RADV versions older than 23.1.0 have broken depth clamp dynamic state"); |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3DepthClampEnable = true; |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3DepthClampEnable = false; |
|
|
|
dynamic_state3_enables = false; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -636,13 +645,19 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR |
|
|
|
} |
|
|
|
} |
|
|
|
if (extensions.extended_dynamic_state3 && |
|
|
|
(is_amd_driver || driver_id == VK_DRIVER_ID_SAMSUNG_PROPRIETARY) && !force_extensions) { |
|
|
|
(is_amd_driver || driver_id == VK_DRIVER_ID_SAMSUNG_PROPRIETARY)) { |
|
|
|
// AMD and Samsung drivers have broken extendedDynamicState3ColorBlendEquation
|
|
|
|
LOG_WARNING(Render_Vulkan, |
|
|
|
"AMD and Samsung drivers have broken extendedDynamicState3ColorBlendEquation"); |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = true; |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEquation = true; |
|
|
|
dynamic_state3_blending = false; |
|
|
|
if (!force_extensions) { |
|
|
|
LOG_WARNING(Render_Vulkan, |
|
|
|
"AMD and Samsung drivers have broken extendedDynamicState3ColorBlendEquation"); |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false; |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEquation = false; |
|
|
|
dynamic_state3_blending = false; |
|
|
|
} else if (force_extensions) { |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = true; |
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEquation = true; |
|
|
|
dynamic_state3_blending = true; |
|
|
|
} |
|
|
|
} |
|
|
|
if (extensions.vertex_input_dynamic_state && is_qualcomm && !force_extensions) { |
|
|
|
// Qualcomm drivers do not properly support vertex_input_dynamic_state.
|
|
|
|
|