OpCodeSured.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Ryujinx.Graphics.Shader.Instructions;
  2. namespace Ryujinx.Graphics.Shader.Decoders
  3. {
  4. enum ClampMode
  5. {
  6. Ignore = 0,
  7. Trap = 2
  8. }
  9. class OpCodeSured : OpCodeTextureBase
  10. {
  11. public Register Ra { get; }
  12. public Register Rb { get; }
  13. public Register Rc { get; }
  14. public ReductionType Type { get; }
  15. public AtomicOp AtomicOp { get; }
  16. public ImageDimensions Dimensions { get; }
  17. public ClampMode ClampMode { get; }
  18. public bool UseType { get; }
  19. public bool IsBindless { get; }
  20. public bool ByteAddress { get; }
  21. public new static OpCode Create(InstEmitter emitter, ulong address, long opCode) => new OpCodeSured(emitter, address, opCode);
  22. public OpCodeSured(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
  23. {
  24. Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);
  25. Rb = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
  26. Rc = new Register(opCode.Extract(39, 8), RegisterType.Gpr);
  27. Type = (ReductionType)opCode.Extract(20, 3);
  28. ByteAddress = opCode.Extract(23);
  29. AtomicOp = (AtomicOp)opCode.Extract(24, 3);
  30. Dimensions = (ImageDimensions)opCode.Extract(33, 3);
  31. ClampMode = (ClampMode)opCode.Extract(49, 2);
  32. IsBindless = !opCode.Extract(51);
  33. UseType = opCode.Extract(52);
  34. }
  35. }
  36. }