OpCodeTexture.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Ryujinx.Graphics.Shader.Instructions;
  2. namespace Ryujinx.Graphics.Shader.Decoders
  3. {
  4. class OpCodeTexture : OpCode, IOpCodeTexture
  5. {
  6. public Register Rd { get; }
  7. public Register Ra { get; }
  8. public Register Rb { get; }
  9. public bool IsArray { get; }
  10. public TextureDimensions Dimensions { get; }
  11. public int ComponentMask { get; }
  12. public int Immediate { get; }
  13. public TextureLodMode LodMode { get; protected set; }
  14. public bool HasOffset { get; protected set; }
  15. public bool HasDepthCompare { get; protected set; }
  16. public bool IsMultisample { get; protected set; }
  17. public new static OpCode Create(InstEmitter emitter, ulong address, long opCode) => new OpCodeTexture(emitter, address, opCode);
  18. public OpCodeTexture(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
  19. {
  20. Rd = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
  21. Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);
  22. Rb = new Register(opCode.Extract(20, 8), RegisterType.Gpr);
  23. IsArray = opCode.Extract(28);
  24. Dimensions = (TextureDimensions)opCode.Extract(29, 2);
  25. ComponentMask = opCode.Extract(31, 4);
  26. Immediate = opCode.Extract(36, 13);
  27. LodMode = (TextureLodMode)opCode.Extract(55, 3);
  28. }
  29. }
  30. }