regs.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. // Copyright 2015 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <algorithm>
  5. #include <iterator>
  6. #include <utility>
  7. #include "common/common_types.h"
  8. #include "video_core/regs.h"
  9. namespace Pica {
  10. static const std::pair<u16, const char*> register_names[] = {
  11. {0x010, "GPUREG_FINALIZE"},
  12. {0x040, "GPUREG_FACECULLING_CONFIG"},
  13. {0x041, "GPUREG_VIEWPORT_WIDTH"},
  14. {0x042, "GPUREG_VIEWPORT_INVW"},
  15. {0x043, "GPUREG_VIEWPORT_HEIGHT"},
  16. {0x044, "GPUREG_VIEWPORT_INVH"},
  17. {0x047, "GPUREG_FRAGOP_CLIP"},
  18. {0x048, "GPUREG_FRAGOP_CLIP_DATA0"},
  19. {0x049, "GPUREG_FRAGOP_CLIP_DATA1"},
  20. {0x04A, "GPUREG_FRAGOP_CLIP_DATA2"},
  21. {0x04B, "GPUREG_FRAGOP_CLIP_DATA3"},
  22. {0x04D, "GPUREG_DEPTHMAP_SCALE"},
  23. {0x04E, "GPUREG_DEPTHMAP_OFFSET"},
  24. {0x04F, "GPUREG_SH_OUTMAP_TOTAL"},
  25. {0x050, "GPUREG_SH_OUTMAP_O0"},
  26. {0x051, "GPUREG_SH_OUTMAP_O1"},
  27. {0x052, "GPUREG_SH_OUTMAP_O2"},
  28. {0x053, "GPUREG_SH_OUTMAP_O3"},
  29. {0x054, "GPUREG_SH_OUTMAP_O4"},
  30. {0x055, "GPUREG_SH_OUTMAP_O5"},
  31. {0x056, "GPUREG_SH_OUTMAP_O6"},
  32. {0x061, "GPUREG_EARLYDEPTH_FUNC"},
  33. {0x062, "GPUREG_EARLYDEPTH_TEST1"},
  34. {0x063, "GPUREG_EARLYDEPTH_CLEAR"},
  35. {0x064, "GPUREG_SH_OUTATTR_MODE"},
  36. {0x065, "GPUREG_SCISSORTEST_MODE"},
  37. {0x066, "GPUREG_SCISSORTEST_POS"},
  38. {0x067, "GPUREG_SCISSORTEST_DIM"},
  39. {0x068, "GPUREG_VIEWPORT_XY"},
  40. {0x06A, "GPUREG_EARLYDEPTH_DATA"},
  41. {0x06D, "GPUREG_DEPTHMAP_ENABLE"},
  42. {0x06E, "GPUREG_RENDERBUF_DIM"},
  43. {0x06F, "GPUREG_SH_OUTATTR_CLOCK"},
  44. {0x080, "GPUREG_TEXUNIT_CONFIG"},
  45. {0x081, "GPUREG_TEXUNIT0_BORDER_COLOR"},
  46. {0x082, "GPUREG_TEXUNIT0_DIM"},
  47. {0x083, "GPUREG_TEXUNIT0_PARAM"},
  48. {0x084, "GPUREG_TEXUNIT0_LOD"},
  49. {0x085, "GPUREG_TEXUNIT0_ADDR1"},
  50. {0x086, "GPUREG_TEXUNIT0_ADDR2"},
  51. {0x087, "GPUREG_TEXUNIT0_ADDR3"},
  52. {0x088, "GPUREG_TEXUNIT0_ADDR4"},
  53. {0x089, "GPUREG_TEXUNIT0_ADDR5"},
  54. {0x08A, "GPUREG_TEXUNIT0_ADDR6"},
  55. {0x08B, "GPUREG_TEXUNIT0_SHADOW"},
  56. {0x08E, "GPUREG_TEXUNIT0_TYPE"},
  57. {0x08F, "GPUREG_LIGHTING_ENABLE0"},
  58. {0x091, "GPUREG_TEXUNIT1_BORDER_COLOR"},
  59. {0x092, "GPUREG_TEXUNIT1_DIM"},
  60. {0x093, "GPUREG_TEXUNIT1_PARAM"},
  61. {0x094, "GPUREG_TEXUNIT1_LOD"},
  62. {0x095, "GPUREG_TEXUNIT1_ADDR"},
  63. {0x096, "GPUREG_TEXUNIT1_TYPE"},
  64. {0x099, "GPUREG_TEXUNIT2_BORDER_COLOR"},
  65. {0x09A, "GPUREG_TEXUNIT2_DIM"},
  66. {0x09B, "GPUREG_TEXUNIT2_PARAM"},
  67. {0x09C, "GPUREG_TEXUNIT2_LOD"},
  68. {0x09D, "GPUREG_TEXUNIT2_ADDR"},
  69. {0x09E, "GPUREG_TEXUNIT2_TYPE"},
  70. {0x0A8, "GPUREG_TEXUNIT3_PROCTEX0"},
  71. {0x0A9, "GPUREG_TEXUNIT3_PROCTEX1"},
  72. {0x0AA, "GPUREG_TEXUNIT3_PROCTEX2"},
  73. {0x0AB, "GPUREG_TEXUNIT3_PROCTEX3"},
  74. {0x0AC, "GPUREG_TEXUNIT3_PROCTEX4"},
  75. {0x0AD, "GPUREG_TEXUNIT3_PROCTEX5"},
  76. {0x0AF, "GPUREG_PROCTEX_LUT"},
  77. {0x0B0, "GPUREG_PROCTEX_LUT_DATA0"},
  78. {0x0B1, "GPUREG_PROCTEX_LUT_DATA1"},
  79. {0x0B2, "GPUREG_PROCTEX_LUT_DATA2"},
  80. {0x0B3, "GPUREG_PROCTEX_LUT_DATA3"},
  81. {0x0B4, "GPUREG_PROCTEX_LUT_DATA4"},
  82. {0x0B5, "GPUREG_PROCTEX_LUT_DATA5"},
  83. {0x0B6, "GPUREG_PROCTEX_LUT_DATA6"},
  84. {0x0B7, "GPUREG_PROCTEX_LUT_DATA7"},
  85. {0x0C0, "GPUREG_TEXENV0_SOURCE"},
  86. {0x0C1, "GPUREG_TEXENV0_OPERAND"},
  87. {0x0C2, "GPUREG_TEXENV0_COMBINER"},
  88. {0x0C3, "GPUREG_TEXENV0_COLOR"},
  89. {0x0C4, "GPUREG_TEXENV0_SCALE"},
  90. {0x0C8, "GPUREG_TEXENV1_SOURCE"},
  91. {0x0C9, "GPUREG_TEXENV1_OPERAND"},
  92. {0x0CA, "GPUREG_TEXENV1_COMBINER"},
  93. {0x0CB, "GPUREG_TEXENV1_COLOR"},
  94. {0x0CC, "GPUREG_TEXENV1_SCALE"},
  95. {0x0D0, "GPUREG_TEXENV2_SOURCE"},
  96. {0x0D1, "GPUREG_TEXENV2_OPERAND"},
  97. {0x0D2, "GPUREG_TEXENV2_COMBINER"},
  98. {0x0D3, "GPUREG_TEXENV2_COLOR"},
  99. {0x0D4, "GPUREG_TEXENV2_SCALE"},
  100. {0x0D8, "GPUREG_TEXENV3_SOURCE"},
  101. {0x0D9, "GPUREG_TEXENV3_OPERAND"},
  102. {0x0DA, "GPUREG_TEXENV3_COMBINER"},
  103. {0x0DB, "GPUREG_TEXENV3_COLOR"},
  104. {0x0DC, "GPUREG_TEXENV3_SCALE"},
  105. {0x0E0, "GPUREG_TEXENV_UPDATE_BUFFER"},
  106. {0x0E1, "GPUREG_FOG_COLOR"},
  107. {0x0E4, "GPUREG_GAS_ATTENUATION"},
  108. {0x0E5, "GPUREG_GAS_ACCMAX"},
  109. {0x0E6, "GPUREG_FOG_LUT_INDEX"},
  110. {0x0E8, "GPUREG_FOG_LUT_DATA0"},
  111. {0x0E9, "GPUREG_FOG_LUT_DATA1"},
  112. {0x0EA, "GPUREG_FOG_LUT_DATA2"},
  113. {0x0EB, "GPUREG_FOG_LUT_DATA3"},
  114. {0x0EC, "GPUREG_FOG_LUT_DATA4"},
  115. {0x0ED, "GPUREG_FOG_LUT_DATA5"},
  116. {0x0EE, "GPUREG_FOG_LUT_DATA6"},
  117. {0x0EF, "GPUREG_FOG_LUT_DATA7"},
  118. {0x0F0, "GPUREG_TEXENV4_SOURCE"},
  119. {0x0F1, "GPUREG_TEXENV4_OPERAND"},
  120. {0x0F2, "GPUREG_TEXENV4_COMBINER"},
  121. {0x0F3, "GPUREG_TEXENV4_COLOR"},
  122. {0x0F4, "GPUREG_TEXENV4_SCALE"},
  123. {0x0F8, "GPUREG_TEXENV5_SOURCE"},
  124. {0x0F9, "GPUREG_TEXENV5_OPERAND"},
  125. {0x0FA, "GPUREG_TEXENV5_COMBINER"},
  126. {0x0FB, "GPUREG_TEXENV5_COLOR"},
  127. {0x0FC, "GPUREG_TEXENV5_SCALE"},
  128. {0x0FD, "GPUREG_TEXENV_BUFFER_COLOR"},
  129. {0x100, "GPUREG_COLOR_OPERATION"},
  130. {0x101, "GPUREG_BLEND_FUNC"},
  131. {0x102, "GPUREG_LOGIC_OP"},
  132. {0x103, "GPUREG_BLEND_COLOR"},
  133. {0x104, "GPUREG_FRAGOP_ALPHA_TEST"},
  134. {0x105, "GPUREG_STENCIL_TEST"},
  135. {0x106, "GPUREG_STENCIL_OP"},
  136. {0x107, "GPUREG_DEPTH_COLOR_MASK"},
  137. {0x110, "GPUREG_FRAMEBUFFER_INVALIDATE"},
  138. {0x111, "GPUREG_FRAMEBUFFER_FLUSH"},
  139. {0x112, "GPUREG_COLORBUFFER_READ"},
  140. {0x113, "GPUREG_COLORBUFFER_WRITE"},
  141. {0x114, "GPUREG_DEPTHBUFFER_READ"},
  142. {0x115, "GPUREG_DEPTHBUFFER_WRITE"},
  143. {0x116, "GPUREG_DEPTHBUFFER_FORMAT"},
  144. {0x117, "GPUREG_COLORBUFFER_FORMAT"},
  145. {0x118, "GPUREG_EARLYDEPTH_TEST2"},
  146. {0x11B, "GPUREG_FRAMEBUFFER_BLOCK32"},
  147. {0x11C, "GPUREG_DEPTHBUFFER_LOC"},
  148. {0x11D, "GPUREG_COLORBUFFER_LOC"},
  149. {0x11E, "GPUREG_FRAMEBUFFER_DIM"},
  150. {0x120, "GPUREG_GAS_LIGHT_XY"},
  151. {0x121, "GPUREG_GAS_LIGHT_Z"},
  152. {0x122, "GPUREG_GAS_LIGHT_Z_COLOR"},
  153. {0x123, "GPUREG_GAS_LUT_INDEX"},
  154. {0x124, "GPUREG_GAS_LUT_DATA"},
  155. {0x126, "GPUREG_GAS_DELTAZ_DEPTH"},
  156. {0x130, "GPUREG_FRAGOP_SHADOW"},
  157. {0x140, "GPUREG_LIGHT0_SPECULAR0"},
  158. {0x141, "GPUREG_LIGHT0_SPECULAR1"},
  159. {0x142, "GPUREG_LIGHT0_DIFFUSE"},
  160. {0x143, "GPUREG_LIGHT0_AMBIENT"},
  161. {0x144, "GPUREG_LIGHT0_XY"},
  162. {0x145, "GPUREG_LIGHT0_Z"},
  163. {0x146, "GPUREG_LIGHT0_SPOTDIR_XY"},
  164. {0x147, "GPUREG_LIGHT0_SPOTDIR_Z"},
  165. {0x149, "GPUREG_LIGHT0_CONFIG"},
  166. {0x14A, "GPUREG_LIGHT0_ATTENUATION_BIAS"},
  167. {0x14B, "GPUREG_LIGHT0_ATTENUATION_SCALE"},
  168. {0x150, "GPUREG_LIGHT1_SPECULAR0"},
  169. {0x151, "GPUREG_LIGHT1_SPECULAR1"},
  170. {0x152, "GPUREG_LIGHT1_DIFFUSE"},
  171. {0x153, "GPUREG_LIGHT1_AMBIENT"},
  172. {0x154, "GPUREG_LIGHT1_XY"},
  173. {0x155, "GPUREG_LIGHT1_Z"},
  174. {0x156, "GPUREG_LIGHT1_SPOTDIR_XY"},
  175. {0x157, "GPUREG_LIGHT1_SPOTDIR_Z"},
  176. {0x159, "GPUREG_LIGHT1_CONFIG"},
  177. {0x15A, "GPUREG_LIGHT1_ATTENUATION_BIAS"},
  178. {0x15B, "GPUREG_LIGHT1_ATTENUATION_SCALE"},
  179. {0x160, "GPUREG_LIGHT2_SPECULAR0"},
  180. {0x161, "GPUREG_LIGHT2_SPECULAR1"},
  181. {0x162, "GPUREG_LIGHT2_DIFFUSE"},
  182. {0x163, "GPUREG_LIGHT2_AMBIENT"},
  183. {0x164, "GPUREG_LIGHT2_XY"},
  184. {0x165, "GPUREG_LIGHT2_Z"},
  185. {0x166, "GPUREG_LIGHT2_SPOTDIR_XY"},
  186. {0x167, "GPUREG_LIGHT2_SPOTDIR_Z"},
  187. {0x169, "GPUREG_LIGHT2_CONFIG"},
  188. {0x16A, "GPUREG_LIGHT2_ATTENUATION_BIAS"},
  189. {0x16B, "GPUREG_LIGHT2_ATTENUATION_SCALE"},
  190. {0x170, "GPUREG_LIGHT3_SPECULAR0"},
  191. {0x171, "GPUREG_LIGHT3_SPECULAR1"},
  192. {0x172, "GPUREG_LIGHT3_DIFFUSE"},
  193. {0x173, "GPUREG_LIGHT3_AMBIENT"},
  194. {0x174, "GPUREG_LIGHT3_XY"},
  195. {0x175, "GPUREG_LIGHT3_Z"},
  196. {0x176, "GPUREG_LIGHT3_SPOTDIR_XY"},
  197. {0x177, "GPUREG_LIGHT3_SPOTDIR_Z"},
  198. {0x179, "GPUREG_LIGHT3_CONFIG"},
  199. {0x17A, "GPUREG_LIGHT3_ATTENUATION_BIAS"},
  200. {0x17B, "GPUREG_LIGHT3_ATTENUATION_SCALE"},
  201. {0x180, "GPUREG_LIGHT4_SPECULAR0"},
  202. {0x181, "GPUREG_LIGHT4_SPECULAR1"},
  203. {0x182, "GPUREG_LIGHT4_DIFFUSE"},
  204. {0x183, "GPUREG_LIGHT4_AMBIENT"},
  205. {0x184, "GPUREG_LIGHT4_XY"},
  206. {0x185, "GPUREG_LIGHT4_Z"},
  207. {0x186, "GPUREG_LIGHT4_SPOTDIR_XY"},
  208. {0x187, "GPUREG_LIGHT4_SPOTDIR_Z"},
  209. {0x189, "GPUREG_LIGHT4_CONFIG"},
  210. {0x18A, "GPUREG_LIGHT4_ATTENUATION_BIAS"},
  211. {0x18B, "GPUREG_LIGHT4_ATTENUATION_SCALE"},
  212. {0x190, "GPUREG_LIGHT5_SPECULAR0"},
  213. {0x191, "GPUREG_LIGHT5_SPECULAR1"},
  214. {0x192, "GPUREG_LIGHT5_DIFFUSE"},
  215. {0x193, "GPUREG_LIGHT5_AMBIENT"},
  216. {0x194, "GPUREG_LIGHT5_XY"},
  217. {0x195, "GPUREG_LIGHT5_Z"},
  218. {0x196, "GPUREG_LIGHT5_SPOTDIR_XY"},
  219. {0x197, "GPUREG_LIGHT5_SPOTDIR_Z"},
  220. {0x199, "GPUREG_LIGHT5_CONFIG"},
  221. {0x19A, "GPUREG_LIGHT5_ATTENUATION_BIAS"},
  222. {0x19B, "GPUREG_LIGHT5_ATTENUATION_SCALE"},
  223. {0x1A0, "GPUREG_LIGHT6_SPECULAR0"},
  224. {0x1A1, "GPUREG_LIGHT6_SPECULAR1"},
  225. {0x1A2, "GPUREG_LIGHT6_DIFFUSE"},
  226. {0x1A3, "GPUREG_LIGHT6_AMBIENT"},
  227. {0x1A4, "GPUREG_LIGHT6_XY"},
  228. {0x1A5, "GPUREG_LIGHT6_Z"},
  229. {0x1A6, "GPUREG_LIGHT6_SPOTDIR_XY"},
  230. {0x1A7, "GPUREG_LIGHT6_SPOTDIR_Z"},
  231. {0x1A9, "GPUREG_LIGHT6_CONFIG"},
  232. {0x1AA, "GPUREG_LIGHT6_ATTENUATION_BIAS"},
  233. {0x1AB, "GPUREG_LIGHT6_ATTENUATION_SCALE"},
  234. {0x1B0, "GPUREG_LIGHT7_SPECULAR0"},
  235. {0x1B1, "GPUREG_LIGHT7_SPECULAR1"},
  236. {0x1B2, "GPUREG_LIGHT7_DIFFUSE"},
  237. {0x1B3, "GPUREG_LIGHT7_AMBIENT"},
  238. {0x1B4, "GPUREG_LIGHT7_XY"},
  239. {0x1B5, "GPUREG_LIGHT7_Z"},
  240. {0x1B6, "GPUREG_LIGHT7_SPOTDIR_XY"},
  241. {0x1B7, "GPUREG_LIGHT7_SPOTDIR_Z"},
  242. {0x1B9, "GPUREG_LIGHT7_CONFIG"},
  243. {0x1BA, "GPUREG_LIGHT7_ATTENUATION_BIAS"},
  244. {0x1BB, "GPUREG_LIGHT7_ATTENUATION_SCALE"},
  245. {0x1C0, "GPUREG_LIGHTING_AMBIENT"},
  246. {0x1C2, "GPUREG_LIGHTING_NUM_LIGHTS"},
  247. {0x1C3, "GPUREG_LIGHTING_CONFIG0"},
  248. {0x1C4, "GPUREG_LIGHTING_CONFIG1"},
  249. {0x1C5, "GPUREG_LIGHTING_LUT_INDEX"},
  250. {0x1C6, "GPUREG_LIGHTING_ENABLE1"},
  251. {0x1C8, "GPUREG_LIGHTING_LUT_DATA0"},
  252. {0x1C9, "GPUREG_LIGHTING_LUT_DATA1"},
  253. {0x1CA, "GPUREG_LIGHTING_LUT_DATA2"},
  254. {0x1CB, "GPUREG_LIGHTING_LUT_DATA3"},
  255. {0x1CC, "GPUREG_LIGHTING_LUT_DATA4"},
  256. {0x1CD, "GPUREG_LIGHTING_LUT_DATA5"},
  257. {0x1CE, "GPUREG_LIGHTING_LUT_DATA6"},
  258. {0x1CF, "GPUREG_LIGHTING_LUT_DATA7"},
  259. {0x1D0, "GPUREG_LIGHTING_LUTINPUT_ABS"},
  260. {0x1D1, "GPUREG_LIGHTING_LUTINPUT_SELECT"},
  261. {0x1D2, "GPUREG_LIGHTING_LUTINPUT_SCALE"},
  262. {0x1D9, "GPUREG_LIGHTING_LIGHT_PERMUTATION"},
  263. {0x200, "GPUREG_ATTRIBBUFFERS_LOC"},
  264. {0x201, "GPUREG_ATTRIBBUFFERS_FORMAT_LOW"},
  265. {0x202, "GPUREG_ATTRIBBUFFERS_FORMAT_HIGH"},
  266. {0x203, "GPUREG_ATTRIBBUFFER0_OFFSET"},
  267. {0x204, "GPUREG_ATTRIBBUFFER0_CONFIG1"},
  268. {0x205, "GPUREG_ATTRIBBUFFER0_CONFIG2"},
  269. {0x206, "GPUREG_ATTRIBBUFFER1_OFFSET"},
  270. {0x207, "GPUREG_ATTRIBBUFFER1_CONFIG1"},
  271. {0x208, "GPUREG_ATTRIBBUFFER1_CONFIG2"},
  272. {0x209, "GPUREG_ATTRIBBUFFER2_OFFSET"},
  273. {0x20A, "GPUREG_ATTRIBBUFFER2_CONFIG1"},
  274. {0x20B, "GPUREG_ATTRIBBUFFER2_CONFIG2"},
  275. {0x20C, "GPUREG_ATTRIBBUFFER3_OFFSET"},
  276. {0x20D, "GPUREG_ATTRIBBUFFER3_CONFIG1"},
  277. {0x20E, "GPUREG_ATTRIBBUFFER3_CONFIG2"},
  278. {0x20F, "GPUREG_ATTRIBBUFFER4_OFFSET"},
  279. {0x210, "GPUREG_ATTRIBBUFFER4_CONFIG1"},
  280. {0x211, "GPUREG_ATTRIBBUFFER4_CONFIG2"},
  281. {0x212, "GPUREG_ATTRIBBUFFER5_OFFSET"},
  282. {0x213, "GPUREG_ATTRIBBUFFER5_CONFIG1"},
  283. {0x214, "GPUREG_ATTRIBBUFFER5_CONFIG2"},
  284. {0x215, "GPUREG_ATTRIBBUFFER6_OFFSET"},
  285. {0x216, "GPUREG_ATTRIBBUFFER6_CONFIG1"},
  286. {0x217, "GPUREG_ATTRIBBUFFER6_CONFIG2"},
  287. {0x218, "GPUREG_ATTRIBBUFFER7_OFFSET"},
  288. {0x219, "GPUREG_ATTRIBBUFFER7_CONFIG1"},
  289. {0x21A, "GPUREG_ATTRIBBUFFER7_CONFIG2"},
  290. {0x21B, "GPUREG_ATTRIBBUFFER8_OFFSET"},
  291. {0x21C, "GPUREG_ATTRIBBUFFER8_CONFIG1"},
  292. {0x21D, "GPUREG_ATTRIBBUFFER8_CONFIG2"},
  293. {0x21E, "GPUREG_ATTRIBBUFFER9_OFFSET"},
  294. {0x21F, "GPUREG_ATTRIBBUFFER9_CONFIG1"},
  295. {0x220, "GPUREG_ATTRIBBUFFER9_CONFIG2"},
  296. {0x221, "GPUREG_ATTRIBBUFFER10_OFFSET"},
  297. {0x222, "GPUREG_ATTRIBBUFFER10_CONFIG1"},
  298. {0x223, "GPUREG_ATTRIBBUFFER10_CONFIG2"},
  299. {0x224, "GPUREG_ATTRIBBUFFER11_OFFSET"},
  300. {0x225, "GPUREG_ATTRIBBUFFER11_CONFIG1"},
  301. {0x226, "GPUREG_ATTRIBBUFFER11_CONFIG2"},
  302. {0x227, "GPUREG_INDEXBUFFER_CONFIG"},
  303. {0x228, "GPUREG_NUMVERTICES"},
  304. {0x229, "GPUREG_GEOSTAGE_CONFIG"},
  305. {0x22A, "GPUREG_VERTEX_OFFSET"},
  306. {0x22D, "GPUREG_POST_VERTEX_CACHE_NUM"},
  307. {0x22E, "GPUREG_DRAWARRAYS"},
  308. {0x22F, "GPUREG_DRAWELEMENTS"},
  309. {0x231, "GPUREG_VTX_FUNC"},
  310. {0x232, "GPUREG_FIXEDATTRIB_INDEX"},
  311. {0x233, "GPUREG_FIXEDATTRIB_DATA0"},
  312. {0x234, "GPUREG_FIXEDATTRIB_DATA1"},
  313. {0x235, "GPUREG_FIXEDATTRIB_DATA2"},
  314. {0x238, "GPUREG_CMDBUF_SIZE0"},
  315. {0x239, "GPUREG_CMDBUF_SIZE1"},
  316. {0x23A, "GPUREG_CMDBUF_ADDR0"},
  317. {0x23B, "GPUREG_CMDBUF_ADDR1"},
  318. {0x23C, "GPUREG_CMDBUF_JUMP0"},
  319. {0x23D, "GPUREG_CMDBUF_JUMP1"},
  320. {0x242, "GPUREG_VSH_NUM_ATTR"},
  321. {0x244, "GPUREG_VSH_COM_MODE"},
  322. {0x245, "GPUREG_START_DRAW_FUNC0"},
  323. {0x24A, "GPUREG_VSH_OUTMAP_TOTAL1"},
  324. {0x251, "GPUREG_VSH_OUTMAP_TOTAL2"},
  325. {0x252, "GPUREG_GSH_MISC0"},
  326. {0x253, "GPUREG_GEOSTAGE_CONFIG2"},
  327. {0x254, "GPUREG_GSH_MISC1"},
  328. {0x25E, "GPUREG_PRIMITIVE_CONFIG"},
  329. {0x25F, "GPUREG_RESTART_PRIMITIVE"},
  330. {0x280, "GPUREG_GSH_BOOLUNIFORM"},
  331. {0x281, "GPUREG_GSH_INTUNIFORM_I0"},
  332. {0x282, "GPUREG_GSH_INTUNIFORM_I1"},
  333. {0x283, "GPUREG_GSH_INTUNIFORM_I2"},
  334. {0x284, "GPUREG_GSH_INTUNIFORM_I3"},
  335. {0x289, "GPUREG_GSH_INPUTBUFFER_CONFIG"},
  336. {0x28A, "GPUREG_GSH_ENTRYPOINT"},
  337. {0x28B, "GPUREG_GSH_ATTRIBUTES_PERMUTATION_LOW"},
  338. {0x28C, "GPUREG_GSH_ATTRIBUTES_PERMUTATION_HIGH"},
  339. {0x28D, "GPUREG_GSH_OUTMAP_MASK"},
  340. {0x28F, "GPUREG_GSH_CODETRANSFER_END"},
  341. {0x290, "GPUREG_GSH_FLOATUNIFORM_INDEX"},
  342. {0x291, "GPUREG_GSH_FLOATUNIFORM_DATA0"},
  343. {0x292, "GPUREG_GSH_FLOATUNIFORM_DATA1"},
  344. {0x293, "GPUREG_GSH_FLOATUNIFORM_DATA2"},
  345. {0x294, "GPUREG_GSH_FLOATUNIFORM_DATA3"},
  346. {0x295, "GPUREG_GSH_FLOATUNIFORM_DATA4"},
  347. {0x296, "GPUREG_GSH_FLOATUNIFORM_DATA5"},
  348. {0x297, "GPUREG_GSH_FLOATUNIFORM_DATA6"},
  349. {0x298, "GPUREG_GSH_FLOATUNIFORM_DATA7"},
  350. {0x29B, "GPUREG_GSH_CODETRANSFER_INDEX"},
  351. {0x29C, "GPUREG_GSH_CODETRANSFER_DATA0"},
  352. {0x29D, "GPUREG_GSH_CODETRANSFER_DATA1"},
  353. {0x29E, "GPUREG_GSH_CODETRANSFER_DATA2"},
  354. {0x29F, "GPUREG_GSH_CODETRANSFER_DATA3"},
  355. {0x2A0, "GPUREG_GSH_CODETRANSFER_DATA4"},
  356. {0x2A1, "GPUREG_GSH_CODETRANSFER_DATA5"},
  357. {0x2A2, "GPUREG_GSH_CODETRANSFER_DATA6"},
  358. {0x2A3, "GPUREG_GSH_CODETRANSFER_DATA7"},
  359. {0x2A5, "GPUREG_GSH_OPDESCS_INDEX"},
  360. {0x2A6, "GPUREG_GSH_OPDESCS_DATA0"},
  361. {0x2A7, "GPUREG_GSH_OPDESCS_DATA1"},
  362. {0x2A8, "GPUREG_GSH_OPDESCS_DATA2"},
  363. {0x2A9, "GPUREG_GSH_OPDESCS_DATA3"},
  364. {0x2AA, "GPUREG_GSH_OPDESCS_DATA4"},
  365. {0x2AB, "GPUREG_GSH_OPDESCS_DATA5"},
  366. {0x2AC, "GPUREG_GSH_OPDESCS_DATA6"},
  367. {0x2AD, "GPUREG_GSH_OPDESCS_DATA7"},
  368. {0x2B0, "GPUREG_VSH_BOOLUNIFORM"},
  369. {0x2B1, "GPUREG_VSH_INTUNIFORM_I0"},
  370. {0x2B2, "GPUREG_VSH_INTUNIFORM_I1"},
  371. {0x2B3, "GPUREG_VSH_INTUNIFORM_I2"},
  372. {0x2B4, "GPUREG_VSH_INTUNIFORM_I3"},
  373. {0x2B9, "GPUREG_VSH_INPUTBUFFER_CONFIG"},
  374. {0x2BA, "GPUREG_VSH_ENTRYPOINT"},
  375. {0x2BB, "GPUREG_VSH_ATTRIBUTES_PERMUTATION_LOW"},
  376. {0x2BC, "GPUREG_VSH_ATTRIBUTES_PERMUTATION_HIGH"},
  377. {0x2BD, "GPUREG_VSH_OUTMAP_MASK"},
  378. {0x2BF, "GPUREG_VSH_CODETRANSFER_END"},
  379. {0x2C0, "GPUREG_VSH_FLOATUNIFORM_INDEX"},
  380. {0x2C1, "GPUREG_VSH_FLOATUNIFORM_DATA0"},
  381. {0x2C2, "GPUREG_VSH_FLOATUNIFORM_DATA1"},
  382. {0x2C3, "GPUREG_VSH_FLOATUNIFORM_DATA2"},
  383. {0x2C4, "GPUREG_VSH_FLOATUNIFORM_DATA3"},
  384. {0x2C5, "GPUREG_VSH_FLOATUNIFORM_DATA4"},
  385. {0x2C6, "GPUREG_VSH_FLOATUNIFORM_DATA5"},
  386. {0x2C7, "GPUREG_VSH_FLOATUNIFORM_DATA6"},
  387. {0x2C8, "GPUREG_VSH_FLOATUNIFORM_DATA7"},
  388. {0x2CB, "GPUREG_VSH_CODETRANSFER_INDEX"},
  389. {0x2CC, "GPUREG_VSH_CODETRANSFER_DATA0"},
  390. {0x2CD, "GPUREG_VSH_CODETRANSFER_DATA1"},
  391. {0x2CE, "GPUREG_VSH_CODETRANSFER_DATA2"},
  392. {0x2CF, "GPUREG_VSH_CODETRANSFER_DATA3"},
  393. {0x2D0, "GPUREG_VSH_CODETRANSFER_DATA4"},
  394. {0x2D1, "GPUREG_VSH_CODETRANSFER_DATA5"},
  395. {0x2D2, "GPUREG_VSH_CODETRANSFER_DATA6"},
  396. {0x2D3, "GPUREG_VSH_CODETRANSFER_DATA7"},
  397. {0x2D5, "GPUREG_VSH_OPDESCS_INDEX"},
  398. {0x2D6, "GPUREG_VSH_OPDESCS_DATA0"},
  399. {0x2D7, "GPUREG_VSH_OPDESCS_DATA1"},
  400. {0x2D8, "GPUREG_VSH_OPDESCS_DATA2"},
  401. {0x2D9, "GPUREG_VSH_OPDESCS_DATA3"},
  402. {0x2DA, "GPUREG_VSH_OPDESCS_DATA4"},
  403. {0x2DB, "GPUREG_VSH_OPDESCS_DATA5"},
  404. {0x2DC, "GPUREG_VSH_OPDESCS_DATA6"},
  405. {0x2DD, "GPUREG_VSH_OPDESCS_DATA7"},
  406. };
  407. const char* Regs::GetRegisterName(u16 index) {
  408. auto found = std::lower_bound(std::begin(register_names), std::end(register_names), index,
  409. [](auto p, auto i) { return p.first < i; });
  410. if (found->first == index) {
  411. return found->second;
  412. } else {
  413. // Return empty string if no match is found
  414. return "";
  415. }
  416. }
  417. } // namespace Pica