OpCodeTexture.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Ryujinx.Graphics.Shader.Instructions;
  2. namespace Ryujinx.Graphics.Shader.Decoders
  3. {
  4. class OpCodeTexture : OpCodeTextureBase, 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 TextureLodMode LodMode { get; protected set; }
  13. public bool HasOffset { get; protected set; }
  14. public bool HasDepthCompare { get; protected set; }
  15. public bool IsMultisample { get; protected set; }
  16. public new static OpCode Create(InstEmitter emitter, ulong address, long opCode) => new OpCodeTexture(emitter, address, opCode);
  17. public OpCodeTexture(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
  18. {
  19. Rd = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
  20. Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);
  21. Rb = new Register(opCode.Extract(20, 8), RegisterType.Gpr);
  22. IsArray = opCode.Extract(28);
  23. Dimensions = (TextureDimensions)opCode.Extract(29, 2);
  24. ComponentMask = opCode.Extract(31, 4);
  25. LodMode = (TextureLodMode)opCode.Extract(55, 3);
  26. }
  27. }
  28. }