summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-10-15 02:51:39 +0200
committerGitHub <noreply@github.com>2020-10-15 02:51:39 +0200
commitd47ac3ce09cd89d92536b2f5a095daf291ce35c9 (patch)
tree995b24488618fb528816da84061fcb3502a41922
parentMerge pull request #4787 from lioncash/conversion (diff)
parentvk_device: Block VK_EXT_extended_dynamic_state for RDNA devices (diff)
downloadyuzu-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.cpp24
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);