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