aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/Decoders
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-07-03 20:48:44 -0300
committerGitHub <noreply@github.com>2020-07-04 01:48:44 +0200
commite13154c83d52d9e1c26c55bc5655a5df641e26a9 (patch)
tree302fcc3171027124bec9cc154ef482fd491cf7e9 /Ryujinx.Graphics.Shader/Decoders
parent76e5af967a39879187214f0973d226eba126e93f (diff)
Implement shader LEA instruction and improve bindless image load/store (#1355)
Diffstat (limited to 'Ryujinx.Graphics.Shader/Decoders')
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/BitfieldExtensions.cs4
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/OpCodeTable.cs3
2 files changed, 5 insertions, 2 deletions
diff --git a/Ryujinx.Graphics.Shader/Decoders/BitfieldExtensions.cs b/Ryujinx.Graphics.Shader/Decoders/BitfieldExtensions.cs
index 3bb9bc1f..d902fc86 100644
--- a/Ryujinx.Graphics.Shader/Decoders/BitfieldExtensions.cs
+++ b/Ryujinx.Graphics.Shader/Decoders/BitfieldExtensions.cs
@@ -4,12 +4,12 @@ namespace Ryujinx.Graphics.Shader.Decoders
{
public static bool Extract(this int value, int lsb)
{
- return ((int)(value >> lsb) & 1) != 0;
+ return ((value >> lsb) & 1) != 0;
}
public static int Extract(this int value, int lsb, int length)
{
- return (int)(value >> lsb) & (int)(uint.MaxValue >> (32 - length));
+ return (value >> lsb) & (int)(uint.MaxValue >> (32 - length));
}
public static bool Extract(this long value, int lsb)
diff --git a/Ryujinx.Graphics.Shader/Decoders/OpCodeTable.cs b/Ryujinx.Graphics.Shader/Decoders/OpCodeTable.cs
index be93f137..eef36a95 100644
--- a/Ryujinx.Graphics.Shader/Decoders/OpCodeTable.cs
+++ b/Ryujinx.Graphics.Shader/Decoders/OpCodeTable.cs
@@ -176,6 +176,9 @@ namespace Ryujinx.Graphics.Shader.Decoders
Set("1110111110010x", InstEmit.Ldc, typeof(OpCodeLdc));
Set("1110111011010x", InstEmit.Ldg, typeof(OpCodeMemory));
Set("1110111101001x", InstEmit.Lds, typeof(OpCodeMemory));
+ Set("010010111101xx", InstEmit.Lea, typeof(OpCodeAluCbuf));
+ Set("0011011x11010x", InstEmit.Lea, typeof(OpCodeAluImm));
+ Set("0101101111010x", InstEmit.Lea, typeof(OpCodeAluReg));
Set("0100110001000x", InstEmit.Lop, typeof(OpCodeLopCbuf));
Set("0011100001000x", InstEmit.Lop, typeof(OpCodeLopImm));
Set("000001xxxxxxxx", InstEmit.Lop, typeof(OpCodeLopImm32));