diff options
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs')
-rw-r--r-- | Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs | 20 |
1 files changed, 12 insertions, 8 deletions
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 /// <param name="data">The raw guest transform feedback descriptors</param> /// <param name="header">The guest shader program header</param> /// <returns>The transform feedback descriptors read from guest</returns> - public static TransformFeedbackDescriptor[] ReadTransformationFeedbackInformations(ref ReadOnlySpan<byte> data, GuestShaderCacheHeader header) + public static TransformFeedbackDescriptor[] ReadTransformFeedbackInformation(ref ReadOnlySpan<byte> data, GuestShaderCacheHeader header) { if (header.TransformFeedbackCount != 0) { @@ -376,9 +376,11 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache /// <returns>Guest shader cahe entries from the runtime contexts</returns> public static GuestShaderCacheEntry[] CreateShaderCacheEntries(MemoryManager memoryManager, ReadOnlySpan<TranslatorContext> 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; |