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. 😔
This commit is contained in:
riperiperi 2022-05-13 23:07:07 +01:00
parent f21761555c
commit 884ee76d7c
3 changed files with 18 additions and 5 deletions

View file

@ -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 uint TocMagic = (byte)'T' | ((byte)'O' << 8) | ((byte)'C' << 16) | ((byte)'G' << 24);
private const ushort VersionMajor = 1; 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 uint VersionPacked = ((uint)VersionMajor << 16) | VersionMinor;
private const string TocFileName = "guest.toc"; private const string TocFileName = "guest.toc";

View file

@ -254,7 +254,7 @@ void main()
_pipeline.ClearRenderTargetColor(0, new ColorF(0f, 0f, 0f, 1f)); _pipeline.ClearRenderTargetColor(0, new ColorF(0f, 0f, 0f, 1f));
} }
_pipeline.SetViewports(0, viewports); _pipeline.SetViewports(0, viewports, false);
_pipeline.SetPrimitiveTopology(GAL.PrimitiveTopology.TriangleStrip); _pipeline.SetPrimitiveTopology(GAL.PrimitiveTopology.TriangleStrip);
_pipeline.Draw(4, 1, 0, 0); _pipeline.Draw(4, 1, 0, 0);
_pipeline.Finish(); _pipeline.Finish();
@ -308,7 +308,7 @@ void main()
_pipeline.SetProgram(_programColorClear); _pipeline.SetProgram(_programColorClear);
_pipeline.SetRenderTarget(dst, (uint)dstWidth, (uint)dstHeight, false, dstFormat); _pipeline.SetRenderTarget(dst, (uint)dstWidth, (uint)dstHeight, false, dstFormat);
_pipeline.SetRenderTargetColorMasks(new uint[] { componentMask }); _pipeline.SetRenderTargetColorMasks(new uint[] { componentMask });
_pipeline.SetViewports(0, viewports); _pipeline.SetViewports(0, viewports, false);
_pipeline.SetScissors(scissors); _pipeline.SetScissors(scissors);
_pipeline.SetPrimitiveTopology(GAL.PrimitiveTopology.TriangleStrip); _pipeline.SetPrimitiveTopology(GAL.PrimitiveTopology.TriangleStrip);
_pipeline.Draw(4, 1, 0, 0); _pipeline.Draw(4, 1, 0, 0);
@ -380,7 +380,7 @@ void main()
Span<Rectangle<int>> scissors = stackalloc Rectangle<int>[1]; Span<Rectangle<int>> scissors = stackalloc Rectangle<int>[1];
pipeline.SetProgram(_programColorBlit); pipeline.SetProgram(_programColorBlit);
pipeline.SetViewports(0, viewports); pipeline.SetViewports(0, viewports, false);
pipeline.SetPrimitiveTopology(GAL.PrimitiveTopology.TriangleStrip); pipeline.SetPrimitiveTopology(GAL.PrimitiveTopology.TriangleStrip);
pipeline.Draw(4, 1, 0, 0); pipeline.Draw(4, 1, 0, 0);

View file

@ -829,7 +829,7 @@ namespace Ryujinx.Graphics.Vulkan
} }
// TODO: Remove first parameter. // TODO: Remove first parameter.
public void SetViewports(int first, ReadOnlySpan<GAL.Viewport> viewports) public void SetViewports(int first, ReadOnlySpan<GAL.Viewport> viewports, bool disableTransform)
{ {
int count = Math.Min(Constants.MaxViewports, viewports.Length); 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<float>
{
X = scale * 2f / viewports[first].Region.Width,
Y = scale * 2f / viewports[first].Region.Height,
Z = 1,
W = disableTransformF
});
}
_newState.ViewportsCount = (uint)count; _newState.ViewportsCount = (uint)count;
SignalStateChange(); SignalStateChange();
} }