Initial support for image stores, support texture sample on compute
This commit is contained in:
parent
717ace6f6e
commit
1b7d955195
44 changed files with 1053 additions and 497 deletions
48
Ryujinx.Graphics.Shader/Decoders/OpCodeImage.cs
Normal file
48
Ryujinx.Graphics.Shader/Decoders/OpCodeImage.cs
Normal file
|
@ -0,0 +1,48 @@
|
|||
using Ryujinx.Graphics.Shader.Instructions;
|
||||
|
||||
namespace Ryujinx.Graphics.Shader.Decoders
|
||||
{
|
||||
class OpCodeImage : OpCode
|
||||
{
|
||||
public Register Ra { get; }
|
||||
public Register Rb { get; }
|
||||
public Register Rc { get; }
|
||||
|
||||
public ImageComponents Components { get; }
|
||||
public IntegerSize Size { get; }
|
||||
|
||||
public bool ByteAddress { get; }
|
||||
|
||||
public ImageDimensions Dimensions { get; }
|
||||
|
||||
public int Immediate { get; }
|
||||
|
||||
public bool UseComponents { get; }
|
||||
public bool IsBindless { get; }
|
||||
|
||||
public OpCodeImage(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
|
||||
{
|
||||
Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);
|
||||
Rb = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
|
||||
Rc = new Register(opCode.Extract(39, 8), RegisterType.Gpr);
|
||||
|
||||
UseComponents = !opCode.Extract(52);
|
||||
|
||||
if (UseComponents)
|
||||
{
|
||||
Components = (ImageComponents)opCode.Extract(20, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
Size = (IntegerSize)opCode.Extract(20, 4);
|
||||
}
|
||||
|
||||
ByteAddress = !opCode.Extract(23);
|
||||
|
||||
Dimensions = (ImageDimensions)opCode.Extract(33, 3);
|
||||
|
||||
Immediate = opCode.Extract(36, 13);
|
||||
IsBindless = !opCode.Extract(51);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue