|
|
@ -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( |
|
|
std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties( |
|
|
vk::PhysicalDevice physical, const vk::InstanceDispatch& dld) { |
|
|
vk::PhysicalDevice physical, const vk::InstanceDispatch& dld) { |
|
|
static constexpr std::array formats{ |
|
|
static constexpr std::array formats{ |
|
|
@ -388,6 +403,15 @@ bool VKDevice::Create() { |
|
|
|
|
|
|
|
|
CollectTelemetryParameters(); |
|
|
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); |
|
|
graphics_queue = logical.GetQueue(graphics_family); |
|
|
present_queue = logical.GetQueue(present_family); |
|
|
present_queue = logical.GetQueue(present_family); |
|
|
|
|
|
|
|
|
|