attribute.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. // Copyright 2021 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <fmt/format.h>
  6. #include "common/common_types.h"
  7. namespace Shader::IR {
  8. enum class Attribute : u64 {
  9. PrimitiveId = 24,
  10. Layer = 25,
  11. ViewportIndex = 26,
  12. PointSize = 27,
  13. PositionX = 28,
  14. PositionY = 29,
  15. PositionZ = 30,
  16. PositionW = 31,
  17. Generic0X = 32,
  18. Generic0Y = 33,
  19. Generic0Z = 34,
  20. Generic0W = 35,
  21. Generic1X = 36,
  22. Generic1Y = 37,
  23. Generic1Z = 38,
  24. Generic1W = 39,
  25. Generic2X = 40,
  26. Generic2Y = 41,
  27. Generic2Z = 42,
  28. Generic2W = 43,
  29. Generic3X = 44,
  30. Generic3Y = 45,
  31. Generic3Z = 46,
  32. Generic3W = 47,
  33. Generic4X = 48,
  34. Generic4Y = 49,
  35. Generic4Z = 50,
  36. Generic4W = 51,
  37. Generic5X = 52,
  38. Generic5Y = 53,
  39. Generic5Z = 54,
  40. Generic5W = 55,
  41. Generic6X = 56,
  42. Generic6Y = 57,
  43. Generic6Z = 58,
  44. Generic6W = 59,
  45. Generic7X = 60,
  46. Generic7Y = 61,
  47. Generic7Z = 62,
  48. Generic7W = 63,
  49. Generic8X = 64,
  50. Generic8Y = 65,
  51. Generic8Z = 66,
  52. Generic8W = 67,
  53. Generic9X = 68,
  54. Generic9Y = 69,
  55. Generic9Z = 70,
  56. Generic9W = 71,
  57. Generic10X = 72,
  58. Generic10Y = 73,
  59. Generic10Z = 74,
  60. Generic10W = 75,
  61. Generic11X = 76,
  62. Generic11Y = 77,
  63. Generic11Z = 78,
  64. Generic11W = 79,
  65. Generic12X = 80,
  66. Generic12Y = 81,
  67. Generic12Z = 82,
  68. Generic12W = 83,
  69. Generic13X = 84,
  70. Generic13Y = 85,
  71. Generic13Z = 86,
  72. Generic13W = 87,
  73. Generic14X = 88,
  74. Generic14Y = 89,
  75. Generic14Z = 90,
  76. Generic14W = 91,
  77. Generic15X = 92,
  78. Generic15Y = 93,
  79. Generic15Z = 94,
  80. Generic15W = 95,
  81. Generic16X = 96,
  82. Generic16Y = 97,
  83. Generic16Z = 98,
  84. Generic16W = 99,
  85. Generic17X = 100,
  86. Generic17Y = 101,
  87. Generic17Z = 102,
  88. Generic17W = 103,
  89. Generic18X = 104,
  90. Generic18Y = 105,
  91. Generic18Z = 106,
  92. Generic18W = 107,
  93. Generic19X = 108,
  94. Generic19Y = 109,
  95. Generic19Z = 110,
  96. Generic19W = 111,
  97. Generic20X = 112,
  98. Generic20Y = 113,
  99. Generic20Z = 114,
  100. Generic20W = 115,
  101. Generic21X = 116,
  102. Generic21Y = 117,
  103. Generic21Z = 118,
  104. Generic21W = 119,
  105. Generic22X = 120,
  106. Generic22Y = 121,
  107. Generic22Z = 122,
  108. Generic22W = 123,
  109. Generic23X = 124,
  110. Generic23Y = 125,
  111. Generic23Z = 126,
  112. Generic23W = 127,
  113. Generic24X = 128,
  114. Generic24Y = 129,
  115. Generic24Z = 130,
  116. Generic24W = 131,
  117. Generic25X = 132,
  118. Generic25Y = 133,
  119. Generic25Z = 134,
  120. Generic25W = 135,
  121. Generic26X = 136,
  122. Generic26Y = 137,
  123. Generic26Z = 138,
  124. Generic26W = 139,
  125. Generic27X = 140,
  126. Generic27Y = 141,
  127. Generic27Z = 142,
  128. Generic27W = 143,
  129. Generic28X = 144,
  130. Generic28Y = 145,
  131. Generic28Z = 146,
  132. Generic28W = 147,
  133. Generic29X = 148,
  134. Generic29Y = 149,
  135. Generic29Z = 150,
  136. Generic29W = 151,
  137. Generic30X = 152,
  138. Generic30Y = 153,
  139. Generic30Z = 154,
  140. Generic30W = 155,
  141. Generic31X = 156,
  142. Generic31Y = 157,
  143. Generic31Z = 158,
  144. Generic31W = 159,
  145. ColorFrontDiffuseR = 160,
  146. ColorFrontDiffuseG = 161,
  147. ColorFrontDiffuseB = 162,
  148. ColorFrontDiffuseA = 163,
  149. ColorFrontSpecularR = 164,
  150. ColorFrontSpecularG = 165,
  151. ColorFrontSpecularB = 166,
  152. ColorFrontSpecularA = 167,
  153. ColorBackDiffuseR = 168,
  154. ColorBackDiffuseG = 169,
  155. ColorBackDiffuseB = 170,
  156. ColorBackDiffuseA = 171,
  157. ColorBackSpecularR = 172,
  158. ColorBackSpecularG = 173,
  159. ColorBackSpecularB = 174,
  160. ColorBackSpecularA = 175,
  161. ClipDistance0 = 176,
  162. ClipDistance1 = 177,
  163. ClipDistance2 = 178,
  164. ClipDistance3 = 179,
  165. ClipDistance4 = 180,
  166. ClipDistance5 = 181,
  167. ClipDistance6 = 182,
  168. ClipDistance7 = 183,
  169. PointSpriteS = 184,
  170. PointSpriteT = 185,
  171. FogCoordinate = 186,
  172. TessellationEvaluationPointU = 188,
  173. TessellationEvaluationPointV = 189,
  174. InstanceId = 190,
  175. VertexId = 191,
  176. FixedFncTexture0S = 192,
  177. FixedFncTexture0T = 193,
  178. FixedFncTexture0R = 194,
  179. FixedFncTexture0Q = 195,
  180. FixedFncTexture1S = 196,
  181. FixedFncTexture1T = 197,
  182. FixedFncTexture1R = 198,
  183. FixedFncTexture1Q = 199,
  184. FixedFncTexture2S = 200,
  185. FixedFncTexture2T = 201,
  186. FixedFncTexture2R = 202,
  187. FixedFncTexture2Q = 203,
  188. FixedFncTexture3S = 204,
  189. FixedFncTexture3T = 205,
  190. FixedFncTexture3R = 206,
  191. FixedFncTexture3Q = 207,
  192. FixedFncTexture4S = 208,
  193. FixedFncTexture4T = 209,
  194. FixedFncTexture4R = 210,
  195. FixedFncTexture4Q = 211,
  196. FixedFncTexture5S = 212,
  197. FixedFncTexture5T = 213,
  198. FixedFncTexture5R = 214,
  199. FixedFncTexture5Q = 215,
  200. FixedFncTexture6S = 216,
  201. FixedFncTexture6T = 217,
  202. FixedFncTexture6R = 218,
  203. FixedFncTexture6Q = 219,
  204. FixedFncTexture7S = 220,
  205. FixedFncTexture7T = 221,
  206. FixedFncTexture7R = 222,
  207. FixedFncTexture7Q = 223,
  208. FixedFncTexture8S = 224,
  209. FixedFncTexture8T = 225,
  210. FixedFncTexture8R = 226,
  211. FixedFncTexture8Q = 227,
  212. FixedFncTexture9S = 228,
  213. FixedFncTexture9T = 229,
  214. FixedFncTexture9R = 230,
  215. FixedFncTexture9Q = 231,
  216. ViewportMask = 232,
  217. FrontFace = 255,
  218. };
  219. constexpr size_t NUM_GENERICS = 32;
  220. [[nodiscard]] bool IsGeneric(Attribute attribute) noexcept;
  221. [[nodiscard]] u32 GenericAttributeIndex(Attribute attribute);
  222. [[nodiscard]] u32 GenericAttributeElement(Attribute attribute);
  223. [[nodiscard]] std::string NameOf(Attribute attribute);
  224. [[nodiscard]] constexpr IR::Attribute operator+(IR::Attribute attribute, size_t value) noexcept {
  225. return static_cast<IR::Attribute>(static_cast<size_t>(attribute) + value);
  226. }
  227. } // namespace Shader::IR
  228. template <>
  229. struct fmt::formatter<Shader::IR::Attribute> {
  230. constexpr auto parse(format_parse_context& ctx) {
  231. return ctx.begin();
  232. }
  233. template <typename FormatContext>
  234. auto format(const Shader::IR::Attribute& attribute, FormatContext& ctx) {
  235. return fmt::format_to(ctx.out(), "{}", Shader::IR::NameOf(attribute));
  236. }
  237. };