aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/Decoders
diff options
context:
space:
mode:
authorMary <me@thog.eu>2020-11-13 00:15:34 +0100
committerGitHub <noreply@github.com>2020-11-13 00:15:34 +0100
commit48f6570557fc76496936514d94e3ccddf55ec633 (patch)
treece455833899cb33a312e5853a7a3d191bb5d18d9 /Ryujinx.Graphics.Shader/Decoders
parent7166e82c3cf1fd8cf2fce3281017ee88122684d8 (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')
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/IOpCodeTexture.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/OpCodeImage.cs5
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/OpCodeTexture.cs6
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/OpCodeTextureBase.cs14
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/OpCodeTextureScalar.cs6
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);