diff options
author | bunnei <bunneidev@gmail.com> | 2020-10-15 02:51:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-15 02:51:39 +0200 |
commit | d47ac3ce09cd89d92536b2f5a095daf291ce35c9 (patch) | |
tree | 995b24488618fb528816da84061fcb3502a41922 | |
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 yuzu-d47ac3ce09cd89d92536b2f5a095daf291ce35c9.tar.gz yuzu-d47ac3ce09cd89d92536b2f5a095daf291ce35c9.tar.bz2 yuzu-d47ac3ce09cd89d92536b2f5a095daf291ce35c9.tar.lz yuzu-d47ac3ce09cd89d92536b2f5a095daf291ce35c9.tar.xz yuzu-d47ac3ce09cd89d92536b2f5a095daf291ce35c9.tar.zst yuzu-d47ac3ce09cd89d92536b2f5a095daf291ce35c9.zip |
-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 } } +[[nodiscard]] bool IsRDNA(std::string_view device_name, VkDriverIdKHR driver_id) { + static constexpr std::array RDNA_DEVICES{ + "5700", + "5600", + "5500", + "5300", + }; + if (driver_id != VK_DRIVER_ID_AMD_PROPRIETARY_KHR) { + return false; + } + return std::any_of(RDNA_DEVICES.begin(), RDNA_DEVICES.end(), [device_name](const char* name) { + return device_name.find(name) != std::string_view::npos; + }); +} + std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties( vk::PhysicalDevice physical, const vk::InstanceDispatch& dld) { static constexpr std::array formats{ @@ -388,6 +403,15 @@ bool VKDevice::Create() { CollectTelemetryParameters(); + if (ext_extended_dynamic_state && IsRDNA(properties.deviceName, driver_id)) { + // AMD's proprietary driver supports VK_EXT_extended_dynamic_state but on RDNA devices it + // seems to cause stability issues + LOG_WARNING( + Render_Vulkan, + "Blacklisting AMD proprietary on RDNA devices from VK_EXT_extended_dynamic_state"); + ext_extended_dynamic_state = false; + } + graphics_queue = logical.GetQueue(graphics_family); present_queue = logical.GetQueue(present_family); |