From 32aa106363fa6c1217da39ef733025a6d9669cd9 Mon Sep 17 00:00:00 2001 From: Gabriel A Date: Mon, 21 Aug 2023 19:39:25 -0300 Subject: [PATCH] Extend Adreno binding workaround to buffer textures --- src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs index 47e96abce..58daa1f4a 100644 --- a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs +++ b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs @@ -116,10 +116,10 @@ namespace Ryujinx.Graphics.Vulkan Stages = stages; - bool hasBatchedTextureSamplerBug = gd.Vendor == Vendor.Qualcomm; + bool hasBatchedTextureBug = gd.Vendor == Vendor.Qualcomm; ClearSegments = BuildClearSegments(resourceLayout.Sets); - BindingSegments = BuildBindingSegments(resourceLayout.SetUsages, hasBatchedTextureSamplerBug); + BindingSegments = BuildBindingSegments(resourceLayout.SetUsages, hasBatchedTextureBug); _compileTask = Task.CompletedTask; _firstBackgroundUse = false; @@ -191,7 +191,7 @@ namespace Ryujinx.Graphics.Vulkan return segments; } - private static ResourceBindingSegment[][] BuildBindingSegments(ReadOnlyCollection setUsages, bool hasBatchedTextureSamplerBug) + private static ResourceBindingSegment[][] BuildBindingSegments(ReadOnlyCollection setUsages, bool hasBatchedTextureBug) { ResourceBindingSegment[][] segments = new ResourceBindingSegment[setUsages.Count][]; @@ -208,7 +208,7 @@ namespace Ryujinx.Graphics.Vulkan if (currentUsage.Binding + currentCount != usage.Binding || currentUsage.Type != usage.Type || - (currentUsage.Type == ResourceType.TextureAndSampler && hasBatchedTextureSamplerBug) || + (IsReadOnlyTexture(currentUsage.Type) && hasBatchedTextureBug) || currentUsage.Stages != usage.Stages || currentUsage.Access != usage.Access) { @@ -245,6 +245,11 @@ namespace Ryujinx.Graphics.Vulkan return segments; } + private static bool IsReadOnlyTexture(ResourceType resourceType) + { + return resourceType == ResourceType.TextureAndSampler || resourceType == ResourceType.BufferTexture; + } + private async Task BackgroundCompilation() { await Task.WhenAll(_shaders.Select(shader => shader.CompileTask));