diff options
| author | 2020-10-14 17:51:39 -0700 | |
|---|---|---|
| committer | 2020-10-14 17:51:39 -0700 | |
| commit | d47ac3ce09cd89d92536b2f5a095daf291ce35c9 (patch) | |
| tree | 995b24488618fb528816da84061fcb3502a41922 /src | |
| parent | Merge pull request #4787 from lioncash/conversion (diff) | |
| parent | vk_device: Block VK_EXT_extended_dynamic_state for RDNA devices (diff) | |
| download | yuzu-d47ac3ce09cd89d92536b2f5a095daf291ce35c9.tar.gz yuzu-d47ac3ce09cd89d92536b2f5a095daf291ce35c9.tar.xz yuzu-d47ac3ce09cd89d92536b2f5a095daf291ce35c9.zip | |
Merge pull request #4772 from goldenx86/block-rdna
vk_device: Block VK_EXT_extended_dynamic_state for RDNA devices
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 | ||