Implement BFI, BRK, FLO, FSWZADD, PBK, SHFL and TXD shader instructions, misc. fixes
This commit is contained in:
parent
d786d8d2b9
commit
278a4c317c
38 changed files with 972 additions and 166 deletions
|
@ -27,6 +27,9 @@ namespace Ryujinx.Graphics.Shader.Instructions
|
|||
|
||||
switch (sysReg)
|
||||
{
|
||||
// TODO: Use value from Y direction GPU register.
|
||||
case SystemRegister.YDirection: src = ConstF(1); break;
|
||||
|
||||
case SystemRegister.ThreadId:
|
||||
{
|
||||
Operand tidX = Attribute(AttributeConsts.ThreadIdX);
|
||||
|
@ -67,5 +70,37 @@ namespace Ryujinx.Graphics.Shader.Instructions
|
|||
|
||||
context.Copy(GetDest(context), res);
|
||||
}
|
||||
|
||||
public static void Shfl(EmitterContext context)
|
||||
{
|
||||
OpCodeShuffle op = (OpCodeShuffle)context.CurrOp;
|
||||
|
||||
Operand pred = Register(op.Predicate48);
|
||||
|
||||
Operand srcA = GetSrcA(context);
|
||||
|
||||
Operand srcB = op.IsBImmediate ? Const(op.ImmediateB) : Register(op.Rb);
|
||||
Operand srcC = op.IsCImmediate ? Const(op.ImmediateC) : Register(op.Rc);
|
||||
|
||||
Operand res = null;
|
||||
|
||||
switch (op.ShuffleType)
|
||||
{
|
||||
case ShuffleType.Indexed:
|
||||
res = context.Shuffle(srcA, srcB, srcC);
|
||||
break;
|
||||
case ShuffleType.Up:
|
||||
res = context.ShuffleUp(srcA, srcB, srcC);
|
||||
break;
|
||||
case ShuffleType.Down:
|
||||
res = context.ShuffleDown(srcA, srcB, srcC);
|
||||
break;
|
||||
case ShuffleType.Butterfly:
|
||||
res = context.ShuffleXor(srcA, srcB, srcC);
|
||||
break;
|
||||
}
|
||||
|
||||
context.Copy(GetDest(context), res);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue