From 884ee76d7ccd25d8fcde7fb816be9d04f20d33bd Mon Sep 17 00:00:00 2001 From: riperiperi Date: Fri, 13 May 2022 23:07:07 +0100 Subject: [PATCH] Update guest cache to v1.1 (due to specialization state changes) This will explode your shader cache from earlier vulkan build, but it must be done. :pensive: --- .../Shader/DiskCache/DiskCacheGuestStorage.cs | 2 +- Ryujinx.Graphics.Vulkan/HelperShader.cs | 6 +++--- Ryujinx.Graphics.Vulkan/PipelineBase.cs | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs b/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs index b31428281..01034b495 100644 --- a/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs +++ b/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache private const uint TocMagic = (byte)'T' | ((byte)'O' << 8) | ((byte)'C' << 16) | ((byte)'G' << 24); private const ushort VersionMajor = 1; - private const ushort VersionMinor = 0; + private const ushort VersionMinor = 1; private const uint VersionPacked = ((uint)VersionMajor << 16) | VersionMinor; private const string TocFileName = "guest.toc"; diff --git a/Ryujinx.Graphics.Vulkan/HelperShader.cs b/Ryujinx.Graphics.Vulkan/HelperShader.cs index 9615d8a48..4f33e676a 100644 --- a/Ryujinx.Graphics.Vulkan/HelperShader.cs +++ b/Ryujinx.Graphics.Vulkan/HelperShader.cs @@ -254,7 +254,7 @@ void main() _pipeline.ClearRenderTargetColor(0, new ColorF(0f, 0f, 0f, 1f)); } - _pipeline.SetViewports(0, viewports); + _pipeline.SetViewports(0, viewports, false); _pipeline.SetPrimitiveTopology(GAL.PrimitiveTopology.TriangleStrip); _pipeline.Draw(4, 1, 0, 0); _pipeline.Finish(); @@ -308,7 +308,7 @@ void main() _pipeline.SetProgram(_programColorClear); _pipeline.SetRenderTarget(dst, (uint)dstWidth, (uint)dstHeight, false, dstFormat); _pipeline.SetRenderTargetColorMasks(new uint[] { componentMask }); - _pipeline.SetViewports(0, viewports); + _pipeline.SetViewports(0, viewports, false); _pipeline.SetScissors(scissors); _pipeline.SetPrimitiveTopology(GAL.PrimitiveTopology.TriangleStrip); _pipeline.Draw(4, 1, 0, 0); @@ -380,7 +380,7 @@ void main() Span> scissors = stackalloc Rectangle[1]; pipeline.SetProgram(_programColorBlit); - pipeline.SetViewports(0, viewports); + pipeline.SetViewports(0, viewports, false); pipeline.SetPrimitiveTopology(GAL.PrimitiveTopology.TriangleStrip); pipeline.Draw(4, 1, 0, 0); diff --git a/Ryujinx.Graphics.Vulkan/PipelineBase.cs b/Ryujinx.Graphics.Vulkan/PipelineBase.cs index 85a7f4791..ea6320ffd 100644 --- a/Ryujinx.Graphics.Vulkan/PipelineBase.cs +++ b/Ryujinx.Graphics.Vulkan/PipelineBase.cs @@ -829,7 +829,7 @@ namespace Ryujinx.Graphics.Vulkan } // TODO: Remove first parameter. - public void SetViewports(int first, ReadOnlySpan viewports) + public void SetViewports(int first, ReadOnlySpan viewports, bool disableTransform) { int count = Math.Min(Constants.MaxViewports, viewports.Length); @@ -872,6 +872,19 @@ namespace Ryujinx.Graphics.Vulkan } } + float disableTransformF = disableTransform ? 1.0f : 0.0f; + if (SupportBufferUpdater.Data.ViewportInverse.W != disableTransformF || disableTransform) + { + float scale = _renderScale[0].X; + SupportBufferUpdater.UpdateViewportInverse(new Vector4 + { + X = scale * 2f / viewports[first].Region.Width, + Y = scale * 2f / viewports[first].Region.Height, + Z = 1, + W = disableTransformF + }); + } + _newState.ViewportsCount = (uint)count; SignalStateChange(); }