Instruction.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System;
  2. namespace Ryujinx.Graphics.Shader.IntermediateRepresentation
  3. {
  4. [Flags]
  5. enum Instruction
  6. {
  7. Absolute = 1,
  8. Add,
  9. AtomicAdd,
  10. AtomicAnd,
  11. AtomicCompareAndSwap,
  12. AtomicMinS32,
  13. AtomicMinU32,
  14. AtomicMaxS32,
  15. AtomicMaxU32,
  16. AtomicOr,
  17. AtomicSwap,
  18. AtomicXor,
  19. Ballot,
  20. Barrier,
  21. BitCount,
  22. BitfieldExtractS32,
  23. BitfieldExtractU32,
  24. BitfieldInsert,
  25. BitfieldReverse,
  26. BitwiseAnd,
  27. BitwiseExclusiveOr,
  28. BitwiseNot,
  29. BitwiseOr,
  30. Branch,
  31. BranchIfFalse,
  32. BranchIfTrue,
  33. Ceiling,
  34. Clamp,
  35. ClampU32,
  36. Comment,
  37. CompareEqual,
  38. CompareGreater,
  39. CompareGreaterOrEqual,
  40. CompareGreaterOrEqualU32,
  41. CompareGreaterU32,
  42. CompareLess,
  43. CompareLessOrEqual,
  44. CompareLessOrEqualU32,
  45. CompareLessU32,
  46. CompareNotEqual,
  47. ConditionalSelect,
  48. ConvertFPToS32,
  49. ConvertFPToU32,
  50. ConvertS32ToFP,
  51. ConvertU32ToFP,
  52. Copy,
  53. Cosine,
  54. Ddx,
  55. Ddy,
  56. Discard,
  57. Divide,
  58. EmitVertex,
  59. EndPrimitive,
  60. ExponentB2,
  61. FindFirstSetS32,
  62. FindFirstSetU32,
  63. Floor,
  64. FusedMultiplyAdd,
  65. GroupMemoryBarrier,
  66. ImageLoad,
  67. ImageStore,
  68. IsNan,
  69. LoadAttribute,
  70. LoadConstant,
  71. LoadGlobal,
  72. LoadLocal,
  73. LoadShared,
  74. LoadStorage,
  75. Lod,
  76. LogarithmB2,
  77. LogicalAnd,
  78. LogicalExclusiveOr,
  79. LogicalNot,
  80. LogicalOr,
  81. LoopBreak,
  82. LoopContinue,
  83. MarkLabel,
  84. Maximum,
  85. MaximumU32,
  86. MemoryBarrier,
  87. Minimum,
  88. MinimumU32,
  89. Multiply,
  90. MultiplyHighS32,
  91. MultiplyHighU32,
  92. Negate,
  93. PackDouble2x32,
  94. PackHalf2x16,
  95. ReciprocalSquareRoot,
  96. Return,
  97. Round,
  98. ShiftLeft,
  99. ShiftRightS32,
  100. ShiftRightU32,
  101. Shuffle,
  102. ShuffleDown,
  103. ShuffleUp,
  104. ShuffleXor,
  105. Sine,
  106. SquareRoot,
  107. StoreGlobal,
  108. StoreLocal,
  109. StoreShared,
  110. StoreStorage,
  111. Subtract,
  112. SwizzleAdd,
  113. TextureSample,
  114. TextureSize,
  115. Truncate,
  116. UnpackDouble2x32,
  117. UnpackHalf2x16,
  118. VoteAll,
  119. VoteAllEqual,
  120. VoteAny,
  121. Count,
  122. FP = 1 << 16,
  123. MrShift = 17,
  124. MrGlobal = 0 << MrShift,
  125. MrShared = 1 << MrShift,
  126. MrStorage = 2 << MrShift,
  127. MrMask = 3 << MrShift,
  128. Mask = 0xffff
  129. }
  130. static class InstructionExtensions
  131. {
  132. public static bool IsAtomic(this Instruction inst)
  133. {
  134. switch (inst & Instruction.Mask)
  135. {
  136. case Instruction.AtomicAdd:
  137. case Instruction.AtomicAnd:
  138. case Instruction.AtomicCompareAndSwap:
  139. case Instruction.AtomicMaxS32:
  140. case Instruction.AtomicMaxU32:
  141. case Instruction.AtomicMinS32:
  142. case Instruction.AtomicMinU32:
  143. case Instruction.AtomicOr:
  144. case Instruction.AtomicSwap:
  145. case Instruction.AtomicXor:
  146. return true;
  147. }
  148. return false;
  149. }
  150. }
  151. }