attribute.h 5.9 KB

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