diff options
| author | Mary <me@thog.eu> | 2020-11-13 00:15:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-13 00:15:34 +0100 |
| commit | 48f6570557fc76496936514d94e3ccddf55ec633 (patch) | |
| tree | ce455833899cb33a312e5853a7a3d191bb5d18d9 /Ryujinx.Graphics.Shader/Decoders | |
| parent | 7166e82c3cf1fd8cf2fce3281017ee88122684d8 (diff) | |
Salieri: shader cache (#1701)
Here come Salieri, my implementation of a disk shader cache!
"I'm sure you know why I named it that."
"It doesn't really mean anything."
This implementation collects shaders at runtime and cache them to be later compiled when starting a game.
Diffstat (limited to 'Ryujinx.Graphics.Shader/Decoders')
5 files changed, 18 insertions, 15 deletions
diff --git a/Ryujinx.Graphics.Shader/Decoders/IOpCodeTexture.cs b/Ryujinx.Graphics.Shader/Decoders/IOpCodeTexture.cs index 55d1225a..eb835449 100644 --- a/Ryujinx.Graphics.Shader/Decoders/IOpCodeTexture.cs +++ b/Ryujinx.Graphics.Shader/Decoders/IOpCodeTexture.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Graphics.Shader.Decoders int ComponentMask { get; } - int Immediate { get; } + int HandleOffset { get; } TextureLodMode LodMode { get; } diff --git a/Ryujinx.Graphics.Shader/Decoders/OpCodeImage.cs b/Ryujinx.Graphics.Shader/Decoders/OpCodeImage.cs index 5b2f8063..36f0b164 100644 --- a/Ryujinx.Graphics.Shader/Decoders/OpCodeImage.cs +++ b/Ryujinx.Graphics.Shader/Decoders/OpCodeImage.cs @@ -2,7 +2,7 @@ using Ryujinx.Graphics.Shader.Instructions; namespace Ryujinx.Graphics.Shader.Decoders { - class OpCodeImage : OpCode + class OpCodeImage : OpCodeTextureBase { public Register Ra { get; } public Register Rb { get; } @@ -15,8 +15,6 @@ namespace Ryujinx.Graphics.Shader.Decoders public ImageDimensions Dimensions { get; } - public int Immediate { get; } - public bool UseComponents { get; } public bool IsBindless { get; } @@ -43,7 +41,6 @@ namespace Ryujinx.Graphics.Shader.Decoders Dimensions = (ImageDimensions)opCode.Extract(33, 3); - Immediate = opCode.Extract(36, 13); IsBindless = !opCode.Extract(51); } } diff --git a/Ryujinx.Graphics.Shader/Decoders/OpCodeTexture.cs b/Ryujinx.Graphics.Shader/Decoders/OpCodeTexture.cs index f19f7dad..55e66f41 100644 --- a/Ryujinx.Graphics.Shader/Decoders/OpCodeTexture.cs +++ b/Ryujinx.Graphics.Shader/Decoders/OpCodeTexture.cs @@ -2,7 +2,7 @@ using Ryujinx.Graphics.Shader.Instructions; namespace Ryujinx.Graphics.Shader.Decoders { - class OpCodeTexture : OpCode, IOpCodeTexture + class OpCodeTexture : OpCodeTextureBase, IOpCodeTexture { public Register Rd { get; } public Register Ra { get; } @@ -14,8 +14,6 @@ namespace Ryujinx.Graphics.Shader.Decoders public int ComponentMask { get; } - public int Immediate { get; } - public TextureLodMode LodMode { get; protected set; } public bool HasOffset { get; protected set; } @@ -36,8 +34,6 @@ namespace Ryujinx.Graphics.Shader.Decoders ComponentMask = opCode.Extract(31, 4); - Immediate = opCode.Extract(36, 13); - LodMode = (TextureLodMode)opCode.Extract(55, 3); } } diff --git a/Ryujinx.Graphics.Shader/Decoders/OpCodeTextureBase.cs b/Ryujinx.Graphics.Shader/Decoders/OpCodeTextureBase.cs new file mode 100644 index 00000000..0da1ca76 --- /dev/null +++ b/Ryujinx.Graphics.Shader/Decoders/OpCodeTextureBase.cs @@ -0,0 +1,14 @@ +using Ryujinx.Graphics.Shader.Instructions; + +namespace Ryujinx.Graphics.Shader.Decoders +{ + class OpCodeTextureBase : OpCode + { + public int HandleOffset { get; } + + public OpCodeTextureBase(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode) + { + HandleOffset = opCode.Extract(36, 13); + } + } +} diff --git a/Ryujinx.Graphics.Shader/Decoders/OpCodeTextureScalar.cs b/Ryujinx.Graphics.Shader/Decoders/OpCodeTextureScalar.cs index 3ccd185c..be33a6f0 100644 --- a/Ryujinx.Graphics.Shader/Decoders/OpCodeTextureScalar.cs +++ b/Ryujinx.Graphics.Shader/Decoders/OpCodeTextureScalar.cs @@ -3,7 +3,7 @@ using Ryujinx.Graphics.Shader.Instructions; namespace Ryujinx.Graphics.Shader.Decoders { - class OpCodeTextureScalar : OpCode + class OpCodeTextureScalar : OpCodeTextureBase { #region "Component mask LUT" private const int ____ = 0x0; @@ -33,8 +33,6 @@ namespace Ryujinx.Graphics.Shader.Decoders public Register Rb { get; } public Register Rd1 { get; } - public int Immediate { get; } - public int ComponentMask { get; protected set; } protected int RawType; @@ -50,8 +48,6 @@ namespace Ryujinx.Graphics.Shader.Decoders Rb = new Register(opCode.Extract(20, 8), RegisterType.Gpr); Rd1 = new Register(opCode.Extract(28, 8), RegisterType.Gpr); - Immediate = opCode.Extract(36, 13); - int compSel = opCode.Extract(50, 3); RawType = opCode.Extract(53, 4); |
