diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_device.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_device.cpp b/src/video_core/renderer_vulkan/vk_device.cpp index 3d8d3213d..1f057b43b 100644 --- a/src/video_core/renderer_vulkan/vk_device.cpp +++ b/src/video_core/renderer_vulkan/vk_device.cpp | |||
| @@ -79,6 +79,21 @@ VkFormatFeatureFlags GetFormatFeatures(VkFormatProperties properties, FormatType | |||
| 79 | } | 79 | } |
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | [[nodiscard]] bool IsRDNA(std::string_view device_name, VkDriverIdKHR driver_id) { | ||
| 83 | static constexpr std::array RDNA_DEVICES{ | ||
| 84 | "5700", | ||
| 85 | "5600", | ||
| 86 | "5500", | ||
| 87 | "5300", | ||
| 88 | }; | ||
| 89 | if (driver_id != VK_DRIVER_ID_AMD_PROPRIETARY_KHR) { | ||
| 90 | return false; | ||
| 91 | } | ||
| 92 | return std::any_of(RDNA_DEVICES.begin(), RDNA_DEVICES.end(), [device_name](const char* name) { | ||
| 93 | return device_name.find(name) != std::string_view::npos; | ||
| 94 | }); | ||
| 95 | } | ||
| 96 | |||
| 82 | std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties( | 97 | std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties( |
| 83 | vk::PhysicalDevice physical, const vk::InstanceDispatch& dld) { | 98 | vk::PhysicalDevice physical, const vk::InstanceDispatch& dld) { |
| 84 | static constexpr std::array formats{ | 99 | static constexpr std::array formats{ |
| @@ -388,6 +403,15 @@ bool VKDevice::Create() { | |||
| 388 | 403 | ||
| 389 | CollectTelemetryParameters(); | 404 | CollectTelemetryParameters(); |
| 390 | 405 | ||
| 406 | if (ext_extended_dynamic_state && IsRDNA(properties.deviceName, driver_id)) { | ||
| 407 | // AMD's proprietary driver supports VK_EXT_extended_dynamic_state but on RDNA devices it | ||
| 408 | // seems to cause stability issues | ||
| 409 | LOG_WARNING( | ||
| 410 | Render_Vulkan, | ||
| 411 | "Blacklisting AMD proprietary on RDNA devices from VK_EXT_extended_dynamic_state"); | ||
| 412 | ext_extended_dynamic_state = false; | ||
| 413 | } | ||
| 414 | |||
| 391 | graphics_queue = logical.GetQueue(graphics_family); | 415 | graphics_queue = logical.GetQueue(graphics_family); |
| 392 | present_queue = logical.GetQueue(present_family); | 416 | present_queue = logical.GetQueue(present_family); |
| 393 | 417 | ||