From d7f90f9f1f6f003e5c3b3d2871f09606c05f2238 Mon Sep 17 00:00:00 2001 From: KeatonTheBot Date: Wed, 18 Mar 2026 18:23:12 -0500 Subject: [PATCH] Tweak feedback loop restriction logic --- src/Ryujinx.Graphics.Vulkan/PipelineBase.cs | 26 ++++++++----------- src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | 7 +++-- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs index 71af096b3..cea2d9c55 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs @@ -1532,24 +1532,20 @@ namespace Ryujinx.Graphics.Vulkan private bool ChangeFeedbackLoop(FeedbackLoopAspects aspects) { - // AMD RDNA 3 GPUs + Qualcomm SoCs only - if (Gd.IsAmdRdna3 || Gd.Vendor == Vendor.Qualcomm) + if (_feedbackLoop != aspects) { - if (_feedbackLoop != aspects) + if (Gd.Capabilities.SupportsDynamicAttachmentFeedbackLoop) { - if (Gd.Capabilities.SupportsDynamicAttachmentFeedbackLoop) - { - DynamicState.SetFeedbackLoop(aspects); - } - else - { - _newState.FeedbackLoopAspects = aspects; - } - - _feedbackLoop = aspects; - - return true; + DynamicState.SetFeedbackLoop(aspects); } + else + { + _newState.FeedbackLoopAspects = aspects; + } + + _feedbackLoop = aspects; + + return true; } return false; diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs index 5a50dd6c3..64fd1a5fd 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs @@ -91,6 +91,7 @@ namespace Ryujinx.Graphics.Vulkan internal bool IsIntelLinux { get; private set; } internal bool IsAmdGcn { get; private set; } internal bool IsAmdRdna3 { get; private set; } + internal bool IsFeedbackLoopDevice { get; private set; } internal bool IsNvidiaPreTuring { get; private set; } internal bool IsIntelArc { get; private set; } internal bool IsQualcommProprietary { get; private set; } @@ -376,6 +377,8 @@ namespace Ryujinx.Graphics.Vulkan // ROG Ally (X) Device IDs || properties.DeviceID is 0x15BF or 0x15C8 or 0x150E); + IsFeedbackLoopDevice = IsAmdRdna3; + if (Vendor == Vendor.Nvidia) { var match = VendorUtils.NvidiaConsumerClassRegex().Match(GpuRenderer); @@ -439,8 +442,8 @@ namespace Ryujinx.Graphics.Vulkan _physicalDevice.IsDeviceExtensionPresent("VK_NV_viewport_array2"), _physicalDevice.IsDeviceExtensionPresent(ExtExternalMemoryHost.ExtensionName), supportsDepthClipControl && featuresDepthClipControl.DepthClipControl, - supportsAttachmentFeedbackLoop && featuresAttachmentFeedbackLoop.AttachmentFeedbackLoopLayout, - supportsDynamicAttachmentFeedbackLoop && featuresDynamicAttachmentFeedbackLoop.AttachmentFeedbackLoopDynamicState, + supportsAttachmentFeedbackLoop && featuresAttachmentFeedbackLoop.AttachmentFeedbackLoopLayout && IsFeedbackLoopDevice, + supportsDynamicAttachmentFeedbackLoop && featuresDynamicAttachmentFeedbackLoop.AttachmentFeedbackLoopDynamicState && IsFeedbackLoopDevice, propertiesSubgroup.SubgroupSize, supportedSampleCounts, portabilityFlags,