Implement ATOM shader instruction (#1687)
* Implement ATOM shader instruction * Fix reduction type decoding
This commit is contained in:
parent
934a78005e
commit
c3d62bd078
5 changed files with 45 additions and 22 deletions
|
@ -10,6 +10,7 @@ namespace Ryujinx.Graphics.Shader.Decoders
|
|||
BitwiseAnd = 5,
|
||||
BitwiseOr = 6,
|
||||
BitwiseExclusiveOr = 7,
|
||||
Swap = 8
|
||||
Swap = 8,
|
||||
SafeAdd = 10 // Only supported by ATOM.
|
||||
}
|
||||
}
|
|
@ -8,10 +8,6 @@ namespace Ryujinx.Graphics.Shader.Decoders
|
|||
public Register Ra { get; }
|
||||
public Register Rb { get; }
|
||||
|
||||
public ReductionType Type { get; }
|
||||
|
||||
public int Offset { get; }
|
||||
|
||||
public bool Extended { get; }
|
||||
|
||||
public AtomicOp AtomicOp { get; }
|
||||
|
@ -24,15 +20,6 @@ namespace Ryujinx.Graphics.Shader.Decoders
|
|||
Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);
|
||||
Rb = new Register(opCode.Extract(20, 8), RegisterType.Gpr);
|
||||
|
||||
Type = (ReductionType)opCode.Extract(28, 2);
|
||||
|
||||
if (Type == ReductionType.FP32FtzRn)
|
||||
{
|
||||
Type = ReductionType.S64;
|
||||
}
|
||||
|
||||
Offset = opCode.Extract(30, 22);
|
||||
|
||||
Extended = opCode.Extract(48);
|
||||
|
||||
AtomicOp = (AtomicOp)opCode.Extract(52, 4);
|
||||
|
|
|
@ -34,6 +34,7 @@ namespace Ryujinx.Graphics.Shader.Decoders
|
|||
#region Instructions
|
||||
Set("1110111111011x", InstEmit.Ald, OpCodeAttribute.Create);
|
||||
Set("1110111111110x", InstEmit.Ast, OpCodeAttribute.Create);
|
||||
Set("11101101xxxxxx", InstEmit.Atom, OpCodeAtom.Create);
|
||||
Set("11101100xxxxxx", InstEmit.Atoms, OpCodeAtom.Create);
|
||||
Set("1111000010101x", InstEmit.Bar, OpCodeBarrier.Create);
|
||||
Set("0100110000000x", InstEmit.Bfe, OpCodeAluCbuf.Create);
|
||||
|
|
|
@ -2,11 +2,11 @@ namespace Ryujinx.Graphics.Shader.Decoders
|
|||
{
|
||||
enum ReductionType
|
||||
{
|
||||
U32 = 0,
|
||||
S32 = 1,
|
||||
U64 = 2,
|
||||
FP32FtzRn = 3,
|
||||
U128 = 4,
|
||||
S64 = 5
|
||||
U32 = 0,
|
||||
S32 = 1,
|
||||
U64 = 2,
|
||||
FP32FtzRn = 3,
|
||||
FP16x2FtzRn = 4,
|
||||
S64 = 5
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue