Instruction.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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. Call,
  34. CallOutArgument,
  35. Ceiling,
  36. Clamp,
  37. ClampU32,
  38. Comment,
  39. CompareEqual,
  40. CompareGreater,
  41. CompareGreaterOrEqual,
  42. CompareGreaterOrEqualU32,
  43. CompareGreaterU32,
  44. CompareLess,
  45. CompareLessOrEqual,
  46. CompareLessOrEqualU32,
  47. CompareLessU32,
  48. CompareNotEqual,
  49. ConditionalSelect,
  50. ConvertFP32ToFP64,
  51. ConvertFP64ToFP32,
  52. ConvertFPToS32,
  53. ConvertFPToU32,
  54. ConvertS32ToFP,
  55. ConvertU32ToFP,
  56. Copy,
  57. Cosine,
  58. Ddx,
  59. Ddy,
  60. Discard,
  61. Divide,
  62. EmitVertex,
  63. EndPrimitive,
  64. ExponentB2,
  65. FindFirstSetS32,
  66. FindFirstSetU32,
  67. Floor,
  68. FusedMultiplyAdd,
  69. GroupMemoryBarrier,
  70. ImageLoad,
  71. ImageStore,
  72. IsNan,
  73. LoadAttribute,
  74. LoadConstant,
  75. LoadGlobal,
  76. LoadLocal,
  77. LoadShared,
  78. LoadStorage,
  79. Lod,
  80. LogarithmB2,
  81. LogicalAnd,
  82. LogicalExclusiveOr,
  83. LogicalNot,
  84. LogicalOr,
  85. LoopBreak,
  86. LoopContinue,
  87. MarkLabel,
  88. Maximum,
  89. MaximumU32,
  90. MemoryBarrier,
  91. Minimum,
  92. MinimumU32,
  93. Multiply,
  94. MultiplyHighS32,
  95. MultiplyHighU32,
  96. Negate,
  97. PackDouble2x32,
  98. PackHalf2x16,
  99. ReciprocalSquareRoot,
  100. Return,
  101. Round,
  102. ShiftLeft,
  103. ShiftRightS32,
  104. ShiftRightU32,
  105. Shuffle,
  106. ShuffleDown,
  107. ShuffleUp,
  108. ShuffleXor,
  109. Sine,
  110. SquareRoot,
  111. StoreGlobal,
  112. StoreLocal,
  113. StoreShared,
  114. StoreStorage,
  115. Subtract,
  116. SwizzleAdd,
  117. TextureSample,
  118. TextureSize,
  119. Truncate,
  120. UnpackDouble2x32,
  121. UnpackHalf2x16,
  122. VoteAll,
  123. VoteAllEqual,
  124. VoteAny,
  125. Count,
  126. FP32 = 1 << 16,
  127. FP64 = 1 << 17,
  128. MrShift = 18,
  129. MrGlobal = 0 << MrShift,
  130. MrShared = 1 << MrShift,
  131. MrStorage = 2 << MrShift,
  132. MrMask = 3 << MrShift,
  133. Mask = 0xffff
  134. }
  135. static class InstructionExtensions
  136. {
  137. public static bool IsAtomic(this Instruction inst)
  138. {
  139. switch (inst & Instruction.Mask)
  140. {
  141. case Instruction.AtomicAdd:
  142. case Instruction.AtomicAnd:
  143. case Instruction.AtomicCompareAndSwap:
  144. case Instruction.AtomicMaxS32:
  145. case Instruction.AtomicMaxU32:
  146. case Instruction.AtomicMinS32:
  147. case Instruction.AtomicMinU32:
  148. case Instruction.AtomicOr:
  149. case Instruction.AtomicSwap:
  150. case Instruction.AtomicXor:
  151. return true;
  152. }
  153. return false;
  154. }
  155. }
  156. }