diff options
Diffstat (limited to 'Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs')
-rw-r--r-- | Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs | 352 |
1 files changed, 176 insertions, 176 deletions
diff --git a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs index cd602db7..0a2b4232 100644 --- a/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs +++ b/Ryujinx.Graphics/Gal/Shader/ShaderDecodeMove.cs @@ -25,400 +25,400 @@ namespace Ryujinx.Graphics.Gal.Shader F64 = 3 } - public static void F2f_C(ShaderIrBlock Block, long OpCode, int Position) + public static void F2f_C(ShaderIrBlock block, long opCode, int position) { - EmitF2f(Block, OpCode, ShaderOper.CR); + EmitF2F(block, opCode, ShaderOper.Cr); } - public static void F2f_I(ShaderIrBlock Block, long OpCode, int Position) + public static void F2f_I(ShaderIrBlock block, long opCode, int position) { - EmitF2f(Block, OpCode, ShaderOper.Immf); + EmitF2F(block, opCode, ShaderOper.Immf); } - public static void F2f_R(ShaderIrBlock Block, long OpCode, int Position) + public static void F2f_R(ShaderIrBlock block, long opCode, int position) { - EmitF2f(Block, OpCode, ShaderOper.RR); + EmitF2F(block, opCode, ShaderOper.Rr); } - public static void F2i_C(ShaderIrBlock Block, long OpCode, int Position) + public static void F2i_C(ShaderIrBlock block, long opCode, int position) { - EmitF2i(Block, OpCode, ShaderOper.CR); + EmitF2I(block, opCode, ShaderOper.Cr); } - public static void F2i_I(ShaderIrBlock Block, long OpCode, int Position) + public static void F2i_I(ShaderIrBlock block, long opCode, int position) { - EmitF2i(Block, OpCode, ShaderOper.Immf); + EmitF2I(block, opCode, ShaderOper.Immf); } - public static void F2i_R(ShaderIrBlock Block, long OpCode, int Position) + public static void F2i_R(ShaderIrBlock block, long opCode, int position) { - EmitF2i(Block, OpCode, ShaderOper.RR); + EmitF2I(block, opCode, ShaderOper.Rr); } - public static void I2f_C(ShaderIrBlock Block, long OpCode, int Position) + public static void I2f_C(ShaderIrBlock block, long opCode, int position) { - EmitI2f(Block, OpCode, ShaderOper.CR); + EmitI2F(block, opCode, ShaderOper.Cr); } - public static void I2f_I(ShaderIrBlock Block, long OpCode, int Position) + public static void I2f_I(ShaderIrBlock block, long opCode, int position) { - EmitI2f(Block, OpCode, ShaderOper.Imm); + EmitI2F(block, opCode, ShaderOper.Imm); } - public static void I2f_R(ShaderIrBlock Block, long OpCode, int Position) + public static void I2f_R(ShaderIrBlock block, long opCode, int position) { - EmitI2f(Block, OpCode, ShaderOper.RR); + EmitI2F(block, opCode, ShaderOper.Rr); } - public static void I2i_C(ShaderIrBlock Block, long OpCode, int Position) + public static void I2i_C(ShaderIrBlock block, long opCode, int position) { - EmitI2i(Block, OpCode, ShaderOper.CR); + EmitI2I(block, opCode, ShaderOper.Cr); } - public static void I2i_I(ShaderIrBlock Block, long OpCode, int Position) + public static void I2i_I(ShaderIrBlock block, long opCode, int position) { - EmitI2i(Block, OpCode, ShaderOper.Imm); + EmitI2I(block, opCode, ShaderOper.Imm); } - public static void I2i_R(ShaderIrBlock Block, long OpCode, int Position) + public static void I2i_R(ShaderIrBlock block, long opCode, int position) { - EmitI2i(Block, OpCode, ShaderOper.RR); + EmitI2I(block, opCode, ShaderOper.Rr); } - public static void Isberd(ShaderIrBlock Block, long OpCode, int Position) + public static void Isberd(ShaderIrBlock block, long opCode, int position) { //This instruction seems to be used to translate from an address to a vertex index in a GS //Stub it as such - Block.AddNode(new ShaderIrCmnt("Stubbed.")); + block.AddNode(new ShaderIrCmnt("Stubbed.")); - Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), OpCode.Gpr8()))); + block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), opCode.Gpr8()))); } - public static void Mov_C(ShaderIrBlock Block, long OpCode, int Position) + public static void Mov_C(ShaderIrBlock block, long opCode, int position) { - ShaderIrOperCbuf Cbuf = OpCode.Cbuf34(); + ShaderIrOperCbuf cbuf = opCode.Cbuf34(); - Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Cbuf))); + block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), cbuf))); } - public static void Mov_I(ShaderIrBlock Block, long OpCode, int Position) + public static void Mov_I(ShaderIrBlock block, long opCode, int position) { - ShaderIrOperImm Imm = OpCode.Imm19_20(); + ShaderIrOperImm imm = opCode.Imm19_20(); - Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Imm))); + block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), imm))); } - public static void Mov_I32(ShaderIrBlock Block, long OpCode, int Position) + public static void Mov_I32(ShaderIrBlock block, long opCode, int position) { - ShaderIrOperImm Imm = OpCode.Imm32_20(); + ShaderIrOperImm imm = opCode.Imm32_20(); - Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Imm))); + block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), imm))); } - public static void Mov_R(ShaderIrBlock Block, long OpCode, int Position) + public static void Mov_R(ShaderIrBlock block, long opCode, int position) { - ShaderIrOperGpr Gpr = OpCode.Gpr20(); + ShaderIrOperGpr gpr = opCode.Gpr20(); - Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Gpr))); + block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), gpr))); } - public static void Sel_C(ShaderIrBlock Block, long OpCode, int Position) + public static void Sel_C(ShaderIrBlock block, long opCode, int position) { - EmitSel(Block, OpCode, ShaderOper.CR); + EmitSel(block, opCode, ShaderOper.Cr); } - public static void Sel_I(ShaderIrBlock Block, long OpCode, int Position) + public static void Sel_I(ShaderIrBlock block, long opCode, int position) { - EmitSel(Block, OpCode, ShaderOper.Imm); + EmitSel(block, opCode, ShaderOper.Imm); } - public static void Sel_R(ShaderIrBlock Block, long OpCode, int Position) + public static void Sel_R(ShaderIrBlock block, long opCode, int position) { - EmitSel(Block, OpCode, ShaderOper.RR); + EmitSel(block, opCode, ShaderOper.Rr); } - public static void Mov_S(ShaderIrBlock Block, long OpCode, int Position) + public static void Mov_S(ShaderIrBlock block, long opCode, int position) { - Block.AddNode(new ShaderIrCmnt("Stubbed.")); + block.AddNode(new ShaderIrCmnt("Stubbed.")); //Zero is used as a special number to get a valid "0 * 0 + VertexIndex" in a GS - ShaderIrNode Source = new ShaderIrOperImm(0); + ShaderIrNode source = new ShaderIrOperImm(0); - Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Source))); + block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), source))); } - private static void EmitF2f(ShaderIrBlock Block, long OpCode, ShaderOper Oper) + private static void EmitF2F(ShaderIrBlock block, long opCode, ShaderOper oper) { - bool NegA = OpCode.Read(45); - bool AbsA = OpCode.Read(49); + bool negA = opCode.Read(45); + bool absA = opCode.Read(49); - ShaderIrNode OperA; + ShaderIrNode operA; - switch (Oper) + switch (oper) { - case ShaderOper.CR: OperA = OpCode.Cbuf34(); break; - case ShaderOper.Immf: OperA = OpCode.Immf19_20(); break; - case ShaderOper.RR: OperA = OpCode.Gpr20(); break; + case ShaderOper.Cr: operA = opCode.Cbuf34(); break; + case ShaderOper.Immf: operA = opCode.Immf19_20(); break; + case ShaderOper.Rr: operA = opCode.Gpr20(); break; - default: throw new ArgumentException(nameof(Oper)); + default: throw new ArgumentException(nameof(oper)); } - OperA = GetAluFabsFneg(OperA, AbsA, NegA); + operA = GetAluFabsFneg(operA, absA, negA); - ShaderIrInst RoundInst = GetRoundInst(OpCode); + ShaderIrInst roundInst = GetRoundInst(opCode); - if (RoundInst != ShaderIrInst.Invalid) + if (roundInst != ShaderIrInst.Invalid) { - OperA = new ShaderIrOp(RoundInst, OperA); + operA = new ShaderIrOp(roundInst, operA); } - Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), OperA))); + block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), operA))); } - private static void EmitF2i(ShaderIrBlock Block, long OpCode, ShaderOper Oper) + private static void EmitF2I(ShaderIrBlock block, long opCode, ShaderOper oper) { - IntType Type = GetIntType(OpCode); + IntType type = GetIntType(opCode); - if (Type == IntType.U64 || - Type == IntType.S64) + if (type == IntType.U64 || + type == IntType.S64) { //TODO: 64-bits support. //Note: GLSL doesn't support 64-bits integers. throw new NotImplementedException(); } - bool NegA = OpCode.Read(45); - bool AbsA = OpCode.Read(49); + bool negA = opCode.Read(45); + bool absA = opCode.Read(49); - ShaderIrNode OperA; + ShaderIrNode operA; - switch (Oper) + switch (oper) { - case ShaderOper.CR: OperA = OpCode.Cbuf34(); break; - case ShaderOper.Immf: OperA = OpCode.Immf19_20(); break; - case ShaderOper.RR: OperA = OpCode.Gpr20(); break; + case ShaderOper.Cr: operA = opCode.Cbuf34(); break; + case ShaderOper.Immf: operA = opCode.Immf19_20(); break; + case ShaderOper.Rr: operA = opCode.Gpr20(); break; - default: throw new ArgumentException(nameof(Oper)); + default: throw new ArgumentException(nameof(oper)); } - OperA = GetAluFabsFneg(OperA, AbsA, NegA); + operA = GetAluFabsFneg(operA, absA, negA); - ShaderIrInst RoundInst = GetRoundInst(OpCode); + ShaderIrInst roundInst = GetRoundInst(opCode); - if (RoundInst != ShaderIrInst.Invalid) + if (roundInst != ShaderIrInst.Invalid) { - OperA = new ShaderIrOp(RoundInst, OperA); + operA = new ShaderIrOp(roundInst, operA); } - bool Signed = Type >= IntType.S8; + bool signed = type >= IntType.S8; - int Size = 8 << ((int)Type & 3); + int size = 8 << ((int)type & 3); - if (Size < 32) + if (size < 32) { - uint Mask = uint.MaxValue >> (32 - Size); + uint mask = uint.MaxValue >> (32 - size); - float CMin = 0; - float CMax = Mask; + float cMin = 0; + float cMax = mask; - if (Signed) + if (signed) { - uint HalfMask = Mask >> 1; + uint halfMask = mask >> 1; - CMin -= HalfMask + 1; - CMax = HalfMask; + cMin -= halfMask + 1; + cMax = halfMask; } - ShaderIrOperImmf IMin = new ShaderIrOperImmf(CMin); - ShaderIrOperImmf IMax = new ShaderIrOperImmf(CMax); + ShaderIrOperImmf min = new ShaderIrOperImmf(cMin); + ShaderIrOperImmf max = new ShaderIrOperImmf(cMax); - OperA = new ShaderIrOp(ShaderIrInst.Fclamp, OperA, IMin, IMax); + operA = new ShaderIrOp(ShaderIrInst.Fclamp, operA, min, max); } - ShaderIrInst Inst = Signed + ShaderIrInst inst = signed ? ShaderIrInst.Ftos : ShaderIrInst.Ftou; - ShaderIrNode Op = new ShaderIrOp(Inst, OperA); + ShaderIrNode op = new ShaderIrOp(inst, operA); - Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op))); + block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op))); } - private static void EmitI2f(ShaderIrBlock Block, long OpCode, ShaderOper Oper) + private static void EmitI2F(ShaderIrBlock block, long opCode, ShaderOper oper) { - IntType Type = GetIntType(OpCode); + IntType type = GetIntType(opCode); - if (Type == IntType.U64 || - Type == IntType.S64) + if (type == IntType.U64 || + type == IntType.S64) { //TODO: 64-bits support. //Note: GLSL doesn't support 64-bits integers. throw new NotImplementedException(); } - int Sel = OpCode.Read(41, 3); + int sel = opCode.Read(41, 3); - bool NegA = OpCode.Read(45); - bool AbsA = OpCode.Read(49); + bool negA = opCode.Read(45); + bool absA = opCode.Read(49); - ShaderIrNode OperA; + ShaderIrNode operA; - switch (Oper) + switch (oper) { - case ShaderOper.CR: OperA = OpCode.Cbuf34(); break; - case ShaderOper.Imm: OperA = OpCode.Imm19_20(); break; - case ShaderOper.RR: OperA = OpCode.Gpr20(); break; + case ShaderOper.Cr: operA = opCode.Cbuf34(); break; + case ShaderOper.Imm: operA = opCode.Imm19_20(); break; + case ShaderOper.Rr: operA = opCode.Gpr20(); break; - default: throw new ArgumentException(nameof(Oper)); + default: throw new ArgumentException(nameof(oper)); } - OperA = GetAluIabsIneg(OperA, AbsA, NegA); + operA = GetAluIabsIneg(operA, absA, negA); - bool Signed = Type >= IntType.S8; + bool signed = type >= IntType.S8; - int Shift = Sel * 8; + int shift = sel * 8; - int Size = 8 << ((int)Type & 3); + int size = 8 << ((int)type & 3); - if (Shift != 0) + if (shift != 0) { - OperA = new ShaderIrOp(ShaderIrInst.Asr, OperA, new ShaderIrOperImm(Shift)); + operA = new ShaderIrOp(ShaderIrInst.Asr, operA, new ShaderIrOperImm(shift)); } - if (Size < 32) + if (size < 32) { - OperA = ExtendTo32(OperA, Signed, Size); + operA = ExtendTo32(operA, signed, size); } - ShaderIrInst Inst = Signed + ShaderIrInst inst = signed ? ShaderIrInst.Stof : ShaderIrInst.Utof; - ShaderIrNode Op = new ShaderIrOp(Inst, OperA); + ShaderIrNode op = new ShaderIrOp(inst, operA); - Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Op))); + block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), op))); } - private static void EmitI2i(ShaderIrBlock Block, long OpCode, ShaderOper Oper) + private static void EmitI2I(ShaderIrBlock block, long opCode, ShaderOper oper) { - IntType Type = GetIntType(OpCode); + IntType type = GetIntType(opCode); - if (Type == IntType.U64 || - Type == IntType.S64) + if (type == IntType.U64 || + type == IntType.S64) { //TODO: 64-bits support. //Note: GLSL doesn't support 64-bits integers. throw new NotImplementedException(); } - int Sel = OpCode.Read(41, 3); + int sel = opCode.Read(41, 3); - bool NegA = OpCode.Read(45); - bool AbsA = OpCode.Read(49); - bool SatA = OpCode.Read(50); + bool negA = opCode.Read(45); + bool absA = opCode.Read(49); + bool satA = opCode.Read(50); - ShaderIrNode OperA; + ShaderIrNode operA; - switch (Oper) + switch (oper) { - case ShaderOper.CR: OperA = OpCode.Cbuf34(); break; - case ShaderOper.Immf: OperA = OpCode.Immf19_20(); break; - case ShaderOper.RR: OperA = OpCode.Gpr20(); break; + case ShaderOper.Cr: operA = opCode.Cbuf34(); break; + case ShaderOper.Immf: operA = opCode.Immf19_20(); break; + case ShaderOper.Rr: operA = opCode.Gpr20(); break; - default: throw new ArgumentException(nameof(Oper)); + default: throw new ArgumentException(nameof(oper)); } - OperA = GetAluIabsIneg(OperA, AbsA, NegA); + operA = GetAluIabsIneg(operA, absA, negA); - bool Signed = Type >= IntType.S8; + bool signed = type >= IntType.S8; - int Shift = Sel * 8; + int shift = sel * 8; - int Size = 8 << ((int)Type & 3); + int size = 8 << ((int)type & 3); - if (Shift != 0) + if (shift != 0) { - OperA = new ShaderIrOp(ShaderIrInst.Asr, OperA, new ShaderIrOperImm(Shift)); + operA = new ShaderIrOp(ShaderIrInst.Asr, operA, new ShaderIrOperImm(shift)); } - if (Size < 32) + if (size < 32) { - uint Mask = uint.MaxValue >> (32 - Size); + uint mask = uint.MaxValue >> (32 - size); - if (SatA) + if (satA) { - uint CMin = 0; - uint CMax = Mask; + uint cMin = 0; + uint cMax = mask; - if (Signed) + if (signed) { - uint HalfMask = Mask >> 1; + uint halfMask = mask >> 1; - CMin -= HalfMask + 1; - CMax = HalfMask; + cMin -= halfMask + 1; + cMax = halfMask; } - ShaderIrOperImm IMin = new ShaderIrOperImm((int)CMin); - ShaderIrOperImm IMax = new ShaderIrOperImm((int)CMax); + ShaderIrOperImm min = new ShaderIrOperImm((int)cMin); + ShaderIrOperImm max = new ShaderIrOperImm((int)cMax); - OperA = new ShaderIrOp(Signed + operA = new ShaderIrOp(signed ? ShaderIrInst.Clamps - : ShaderIrInst.Clampu, OperA, IMin, IMax); + : ShaderIrInst.Clampu, operA, min, max); } else { - OperA = ExtendTo32(OperA, Signed, Size); + operA = ExtendTo32(operA, signed, size); } } - Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), OperA))); + block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), operA))); } - private static void EmitSel(ShaderIrBlock Block, long OpCode, ShaderOper Oper) + private static void EmitSel(ShaderIrBlock block, long opCode, ShaderOper oper) { - ShaderIrOperGpr Dst = OpCode.Gpr0(); - ShaderIrNode Pred = OpCode.Pred39N(); + ShaderIrOperGpr dst = opCode.Gpr0(); + ShaderIrNode pred = opCode.Pred39N(); - ShaderIrNode ResultA = OpCode.Gpr8(); - ShaderIrNode ResultB; + ShaderIrNode resultA = opCode.Gpr8(); + ShaderIrNode resultB; - switch (Oper) + switch (oper) { - case ShaderOper.CR: ResultB = OpCode.Cbuf34(); break; - case ShaderOper.Imm: ResultB = OpCode.Imm19_20(); break; - case ShaderOper.RR: ResultB = OpCode.Gpr20(); break; + case ShaderOper.Cr: resultB = opCode.Cbuf34(); break; + case ShaderOper.Imm: resultB = opCode.Imm19_20(); break; + case ShaderOper.Rr: resultB = opCode.Gpr20(); break; - default: throw new ArgumentException(nameof(Oper)); + default: throw new ArgumentException(nameof(oper)); } - Block.AddNode(OpCode.PredNode(new ShaderIrCond(Pred, new ShaderIrAsg(Dst, ResultA), false))); + block.AddNode(opCode.PredNode(new ShaderIrCond(pred, new ShaderIrAsg(dst, resultA), false))); - Block.AddNode(OpCode.PredNode(new ShaderIrCond(Pred, new ShaderIrAsg(Dst, ResultB), true))); + block.AddNode(opCode.PredNode(new ShaderIrCond(pred, new ShaderIrAsg(dst, resultB), true))); } - private static IntType GetIntType(long OpCode) + private static IntType GetIntType(long opCode) { - bool Signed = OpCode.Read(13); + bool signed = opCode.Read(13); - IntType Type = (IntType)(OpCode.Read(10, 3)); + IntType type = (IntType)(opCode.Read(10, 3)); - if (Signed) + if (signed) { - Type += (int)IntType.S8; + type += (int)IntType.S8; } - return Type; + return type; } - private static FloatType GetFloatType(long OpCode) + private static FloatType GetFloatType(long opCode) { - return (FloatType)(OpCode.Read(8, 3)); + return (FloatType)(opCode.Read(8, 3)); } - private static ShaderIrInst GetRoundInst(long OpCode) + private static ShaderIrInst GetRoundInst(long opCode) { - switch (OpCode.Read(39, 3)) + switch (opCode.Read(39, 3)) { case 1: return ShaderIrInst.Floor; case 2: return ShaderIrInst.Ceil; |