From 4047477866a8ed7e375c0ebe5de254d61860936d Mon Sep 17 00:00:00 2001 From: gdkchan Date: Sun, 7 Feb 2021 20:42:17 -0300 Subject: Simplify handling of shader vertex A (#1999) * Simplify handling of shader vertex A * Theres no transformation feedback, its transform * Merge TextureHandlesForCache --- Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs') diff --git a/Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs b/Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs index d109f1cd..1ec4ab74 100644 --- a/Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs +++ b/Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs @@ -280,7 +280,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache } } - // Transformation feedback + // Transform feedback if (tfd != null) { foreach (TransformFeedbackDescriptor transform in tfd) @@ -311,7 +311,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache /// The raw guest transform feedback descriptors /// The guest shader program header /// The transform feedback descriptors read from guest - public static TransformFeedbackDescriptor[] ReadTransformationFeedbackInformations(ref ReadOnlySpan data, GuestShaderCacheHeader header) + public static TransformFeedbackDescriptor[] ReadTransformFeedbackInformation(ref ReadOnlySpan data, GuestShaderCacheHeader header) { if (header.TransformFeedbackCount != 0) { @@ -376,9 +376,11 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache /// Guest shader cahe entries from the runtime contexts public static GuestShaderCacheEntry[] CreateShaderCacheEntries(MemoryManager memoryManager, ReadOnlySpan shaderContexts) { - GuestShaderCacheEntry[] entries = new GuestShaderCacheEntry[shaderContexts.Length]; + int startIndex = shaderContexts.Length > 1 ? 1 : 0; - for (int i = 0; i < shaderContexts.Length; i++) + GuestShaderCacheEntry[] entries = new GuestShaderCacheEntry[shaderContexts.Length - startIndex]; + + for (int i = startIndex; i < shaderContexts.Length; i++) { TranslatorContext context = shaderContexts[i]; @@ -387,15 +389,17 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache continue; } - int sizeA = context.AddressA == 0 ? 0 : context.SizeA; + TranslatorContext translatorContext2 = i == 1 ? shaderContexts[0] : null; + + int sizeA = translatorContext2 != null ? translatorContext2.Size : 0; byte[] code = new byte[context.Size + sizeA]; memoryManager.GetSpan(context.Address, context.Size).CopyTo(code); - if (context.AddressA != 0) + if (translatorContext2 != null) { - memoryManager.GetSpan(context.AddressA, context.SizeA).CopyTo(code.AsSpan().Slice(context.Size, context.SizeA)); + memoryManager.GetSpan(translatorContext2.Address, sizeA).CopyTo(code.AsSpan().Slice(context.Size, sizeA)); } GuestGpuAccessorHeader gpuAccessorHeader = CreateGuestGpuAccessorCache(context.GpuAccessor); @@ -421,7 +425,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache } } - entries[i] = entry; + entries[i - startIndex] = entry; } return entries; -- cgit v1.2.3