ShaderIrBlock.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System.Collections.Generic;
  2. namespace Ryujinx.Graphics.Gal.Shader
  3. {
  4. class ShaderIrBlock
  5. {
  6. private List<ShaderIrNode> Nodes;
  7. private Dictionary<int, ShaderIrLabel> LabelsToInsert;
  8. public int Position;
  9. public ShaderIrBlock()
  10. {
  11. Nodes = new List<ShaderIrNode>();
  12. LabelsToInsert = new Dictionary<int, ShaderIrLabel>();
  13. }
  14. public void AddNode(ShaderIrNode Node)
  15. {
  16. Nodes.Add(Node);
  17. }
  18. public ShaderIrLabel GetLabel(int Position)
  19. {
  20. if (LabelsToInsert.TryGetValue(Position, out ShaderIrLabel Label))
  21. {
  22. return Label;
  23. }
  24. Label = new ShaderIrLabel();
  25. LabelsToInsert.Add(Position, Label);
  26. return Label;
  27. }
  28. public void MarkLabel(int Position)
  29. {
  30. if (LabelsToInsert.TryGetValue(Position, out ShaderIrLabel Label))
  31. {
  32. Nodes.Add(Label);
  33. }
  34. }
  35. public ShaderIrNode[] GetNodes()
  36. {
  37. return Nodes.ToArray();
  38. }
  39. public ShaderIrNode GetLastNode()
  40. {
  41. if (Nodes.Count > 0)
  42. {
  43. return Nodes[Nodes.Count - 1];
  44. }
  45. return null;
  46. }
  47. }
  48. }