mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-25 23:25:41 +00:00
VulkanDevice: Disable VK_KHR_dynamic_rendering_local_read on AMD
Like everything else on RDNA3, it appears to be broken and causes GPU hangs/resets.
This commit is contained in:
parent
0879dff93a
commit
f41c238c53
|
@ -417,6 +417,31 @@ bool VulkanDevice::SelectDeviceExtensions(ExtensionList* extension_list, bool en
|
|||
m_optional_extensions.vk_ext_full_screen_exclusive ? "supported" : "NOT supported");
|
||||
#endif
|
||||
|
||||
if (IsBrokenMobileDriver())
|
||||
{
|
||||
// Push descriptor is broken on Adreno v502.. don't want to think about dynamic rendending.
|
||||
if (m_optional_extensions.vk_khr_dynamic_rendering)
|
||||
{
|
||||
m_optional_extensions.vk_khr_dynamic_rendering = false;
|
||||
m_optional_extensions.vk_khr_dynamic_rendering_local_read = false;
|
||||
WARNING_LOG("Disabling VK_KHR_dynamic_rendering on broken mobile driver.");
|
||||
}
|
||||
if (m_optional_extensions.vk_khr_push_descriptor)
|
||||
{
|
||||
m_optional_extensions.vk_khr_push_descriptor = false;
|
||||
WARNING_LOG("Disabling VK_KHR_push_descriptor on broken mobile driver.");
|
||||
}
|
||||
}
|
||||
else if (IsDeviceAMD())
|
||||
{
|
||||
// VK_KHR_dynamic_rendering_local_read appears to be broken on RDNA3, like everything else...
|
||||
// Just causes GPU resets when you actually use a feedback loop. Assume Mesa is fine.
|
||||
#if defined(_WIN32) || defined(__ANDROID__)
|
||||
m_optional_extensions.vk_khr_dynamic_rendering_local_read = false;
|
||||
WARNING_LOG("Disabling VK_KHR_dynamic_rendering_local_read on broken AMD driver.");
|
||||
#endif
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -675,22 +700,6 @@ void VulkanDevice::ProcessDeviceExtensions()
|
|||
m_optional_extensions.vk_ext_external_memory_host &=
|
||||
(external_memory_host_properties.minImportedHostPointerAlignment == HOST_PAGE_SIZE);
|
||||
|
||||
if (IsBrokenMobileDriver())
|
||||
{
|
||||
// Push descriptor is broken on Adreno v502.. don't want to think about dynamic rendending.
|
||||
if (m_optional_extensions.vk_khr_dynamic_rendering)
|
||||
{
|
||||
m_optional_extensions.vk_khr_dynamic_rendering = false;
|
||||
m_optional_extensions.vk_khr_dynamic_rendering_local_read = false;
|
||||
WARNING_LOG("Disabling VK_KHR_dynamic_rendering on broken mobile driver.");
|
||||
}
|
||||
if (m_optional_extensions.vk_khr_push_descriptor)
|
||||
{
|
||||
m_optional_extensions.vk_khr_push_descriptor = false;
|
||||
WARNING_LOG("Disabling VK_KHR_push_descriptor on broken mobile driver.");
|
||||
}
|
||||
}
|
||||
|
||||
INFO_LOG("VK_EXT_memory_budget is {}", m_optional_extensions.vk_ext_memory_budget ? "supported" : "NOT supported");
|
||||
INFO_LOG("VK_EXT_rasterization_order_attachment_access is {}",
|
||||
m_optional_extensions.vk_ext_rasterization_order_attachment_access ? "supported" : "NOT supported");
|
||||
|
@ -1648,6 +1657,11 @@ bool VulkanDevice::IsDeviceNVIDIA() const
|
|||
return (m_device_properties.vendorID == 0x10DE);
|
||||
}
|
||||
|
||||
bool VulkanDevice::IsDeviceAMD() const
|
||||
{
|
||||
return (m_device_properties.vendorID == 0x1002);
|
||||
}
|
||||
|
||||
bool VulkanDevice::IsDeviceAdreno() const
|
||||
{
|
||||
// Assume turnip is fine...
|
||||
|
|
|
@ -305,6 +305,9 @@ private:
|
|||
/// Returns true if running on an NVIDIA GPU.
|
||||
bool IsDeviceNVIDIA() const;
|
||||
|
||||
/// Returns true if running on an AMD GPU.
|
||||
bool IsDeviceAMD() const;
|
||||
|
||||
// Vendor queries.
|
||||
bool IsDeviceAdreno() const;
|
||||
bool IsDeviceMali() const;
|
||||
|
|
Loading…
Reference in a new issue