From 21a78f173ec67b77da221813cbf049c3d3eb23e0 Mon Sep 17 00:00:00 2001 From: Gabriel A Date: Wed, 5 Jul 2023 21:17:59 -0300 Subject: [PATCH] Add work around for Adreno batched texture + sampler descriptor updates bug --- src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs index 0d6da0391..42dc45e0b 100644 --- a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs +++ b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs @@ -117,8 +117,10 @@ namespace Ryujinx.Graphics.Vulkan Stages = stages; + bool hasBatchedTextureSamplerBug = gd.Vendor == Vendor.Qualcomm; + ClearSegments = BuildClearSegments(resourceLayout.Sets); - BindingSegments = BuildBindingSegments(resourceLayout.SetUsages); + BindingSegments = BuildBindingSegments(resourceLayout.SetUsages, hasBatchedTextureSamplerBug); Templates = BuildTemplates(); _compileTask = Task.CompletedTask; @@ -191,7 +193,7 @@ namespace Ryujinx.Graphics.Vulkan return segments; } - private static ResourceBindingSegment[][] BuildBindingSegments(ReadOnlyCollection setUsages) + private static ResourceBindingSegment[][] BuildBindingSegments(ReadOnlyCollection setUsages, bool hasBatchedTextureSamplerBug) { ResourceBindingSegment[][] segments = new ResourceBindingSegment[setUsages.Count][]; @@ -208,7 +210,9 @@ namespace Ryujinx.Graphics.Vulkan if (currentUsage.Binding + currentCount != usage.Binding || currentUsage.Type != usage.Type || - currentUsage.Stages != usage.Stages) + (currentUsage.Type == ResourceType.TextureAndSampler && hasBatchedTextureSamplerBug) || + currentUsage.Stages != usage.Stages || + currentUsage.Access != usage.Access) { if (currentCount != 0) {