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.
This commit is contained in:
parent
7166e82c3c
commit
48f6570557
57 changed files with 3589 additions and 396 deletions
|
@ -12,7 +12,7 @@ namespace Ryujinx.Graphics.Shader.Decoders
|
|||
|
||||
int ComponentMask { get; }
|
||||
|
||||
int Immediate { get; }
|
||||
int HandleOffset { get; }
|
||||
|
||||
TextureLodMode LodMode { get; }
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
14
Ryujinx.Graphics.Shader/Decoders/OpCodeTextureBase.cs
Normal file
14
Ryujinx.Graphics.Shader/Decoders/OpCodeTextureBase.cs
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue