mirror of https://github.com/PCSX2/pcsx2.git
GS/Vulkan: Always issue first barrier on RDNA3
It turns out *not* doing this causes GPU resets on RDNA3, specifically Windows drivers. Despite the layout changing enforcing the execution dependency between previous draws and the first input attachment read, it still wants the region/fragment-local barrier...
This commit is contained in:
parent
4cc4a6561c
commit
ba7096c9fa
pcsx2/GS/Renderers/Vulkan
|
@ -5750,8 +5750,13 @@ void GSDeviceVK::RenderHW(GSHWDrawConfig& config)
|
||||||
// We don't need the very first barrier if this is the first draw after switching to feedback loop,
|
// We don't need the very first barrier if this is the first draw after switching to feedback loop,
|
||||||
// because the layout change in itself enforces the execution dependency. HDR needs a barrier between
|
// because the layout change in itself enforces the execution dependency. HDR needs a barrier between
|
||||||
// setup and the first draw to read it. TODO: Make HDR use subpasses instead.
|
// setup and the first draw to read it. TODO: Make HDR use subpasses instead.
|
||||||
|
|
||||||
|
// However, it turns out *not* doing this causes GPU resets on RDNA3, specifically Windows drivers.
|
||||||
|
// Despite the layout changing enforcing the execution dependency between previous draws and the first
|
||||||
|
// input attachment read, it still wants the region/fragment-local barrier...
|
||||||
|
|
||||||
const bool skip_first_barrier =
|
const bool skip_first_barrier =
|
||||||
(draw_rt && draw_rt->GetLayout() != GSTextureVK::Layout::FeedbackLoop && !pipe.ps.hdr);
|
(draw_rt && draw_rt->GetLayout() != GSTextureVK::Layout::FeedbackLoop && !pipe.ps.hdr && !IsDeviceAMD());
|
||||||
|
|
||||||
OMSetRenderTargets(draw_rt, draw_ds, config.scissor, static_cast<FeedbackLoopFlag>(pipe.feedback_loop_flags));
|
OMSetRenderTargets(draw_rt, draw_ds, config.scissor, static_cast<FeedbackLoopFlag>(pipe.feedback_loop_flags));
|
||||||
if (pipe.IsRTFeedbackLoop())
|
if (pipe.IsRTFeedbackLoop())
|
||||||
|
|
|
@ -68,6 +68,9 @@ public:
|
||||||
/// Returns true if running on an NVIDIA GPU.
|
/// Returns true if running on an NVIDIA GPU.
|
||||||
__fi bool IsDeviceNVIDIA() const { return (m_device_properties.vendorID == 0x10DE); }
|
__fi bool IsDeviceNVIDIA() const { return (m_device_properties.vendorID == 0x10DE); }
|
||||||
|
|
||||||
|
/// Returns true if running on an AMD GPU.
|
||||||
|
__fi bool IsDeviceAMD() const { return (m_device_properties.vendorID == 0x1002); }
|
||||||
|
|
||||||
// Creates a simple render pass.
|
// Creates a simple render pass.
|
||||||
VkRenderPass GetRenderPass(VkFormat color_format, VkFormat depth_format,
|
VkRenderPass GetRenderPass(VkFormat color_format, VkFormat depth_format,
|
||||||
VkAttachmentLoadOp color_load_op = VK_ATTACHMENT_LOAD_OP_LOAD,
|
VkAttachmentLoadOp color_load_op = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||||
|
|
Loading…
Reference in New Issue