VideoCore: Move Regs to its own file
This commit is contained in:
		| @@ -18,8 +18,8 @@ | |||||||
| #include "citra_qt/util/util.h" | #include "citra_qt/util/util.h" | ||||||
| #include "common/vector_math.h" | #include "common/vector_math.h" | ||||||
| #include "video_core/debug_utils/debug_utils.h" | #include "video_core/debug_utils/debug_utils.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
| #include "video_core/texture/texture_decode.h" | #include "video_core/texture/texture_decode.h" | ||||||
|  |  | ||||||
| namespace { | namespace { | ||||||
|   | |||||||
| @@ -16,8 +16,8 @@ | |||||||
| #include "common/color.h" | #include "common/color.h" | ||||||
| #include "core/hw/gpu.h" | #include "core/hw/gpu.h" | ||||||
| #include "core/memory.h" | #include "core/memory.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
| #include "video_core/texture/texture_decode.h" | #include "video_core/texture/texture_decode.h" | ||||||
| #include "video_core/utils.h" | #include "video_core/utils.h" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -18,7 +18,6 @@ | |||||||
| #include "core/hw/lcd.h" | #include "core/hw/lcd.h" | ||||||
| #include "core/tracer/recorder.h" | #include "core/tracer/recorder.h" | ||||||
| #include "nihstro/float24.h" | #include "nihstro/float24.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
|  |  | ||||||
| GraphicsTracingWidget::GraphicsTracingWidget(std::shared_ptr<Pica::DebugContext> debug_context, | GraphicsTracingWidget::GraphicsTracingWidget(std::shared_ptr<Pica::DebugContext> debug_context, | ||||||
|   | |||||||
| @@ -16,7 +16,6 @@ | |||||||
| #include <QTreeView> | #include <QTreeView> | ||||||
| #include "citra_qt/debugger/graphics/graphics_vertex_shader.h" | #include "citra_qt/debugger/graphics/graphics_vertex_shader.h" | ||||||
| #include "citra_qt/util/util.h" | #include "citra_qt/util/util.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
| #include "video_core/shader/debug_data.h" | #include "video_core/shader/debug_data.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ set(SRCS | |||||||
|             pica.cpp |             pica.cpp | ||||||
|             primitive_assembly.cpp |             primitive_assembly.cpp | ||||||
|             rasterizer.cpp |             rasterizer.cpp | ||||||
|  |             regs.cpp | ||||||
|             renderer_base.cpp |             renderer_base.cpp | ||||||
|             renderer_opengl/gl_rasterizer.cpp |             renderer_opengl/gl_rasterizer.cpp | ||||||
|             renderer_opengl/gl_rasterizer_cache.cpp |             renderer_opengl/gl_rasterizer_cache.cpp | ||||||
| @@ -32,6 +33,7 @@ set(HEADERS | |||||||
|             primitive_assembly.h |             primitive_assembly.h | ||||||
|             rasterizer.h |             rasterizer.h | ||||||
|             rasterizer_interface.h |             rasterizer_interface.h | ||||||
|  |             regs.h | ||||||
|             regs_framebuffer.h |             regs_framebuffer.h | ||||||
|             regs_lighting.h |             regs_lighting.h | ||||||
|             regs_pipeline.h |             regs_pipeline.h | ||||||
|   | |||||||
| @@ -12,10 +12,10 @@ | |||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "common/vector_math.h" | #include "common/vector_math.h" | ||||||
| #include "video_core/clipper.h" | #include "video_core/clipper.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
| #include "video_core/pica_types.h" | #include "video_core/pica_types.h" | ||||||
| #include "video_core/rasterizer.h" | #include "video_core/rasterizer.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
|  |  | ||||||
| using Pica::Rasterizer::Vertex; | using Pica::Rasterizer::Vertex; | ||||||
|   | |||||||
| @@ -16,11 +16,11 @@ | |||||||
| #include "core/tracer/recorder.h" | #include "core/tracer/recorder.h" | ||||||
| #include "video_core/command_processor.h" | #include "video_core/command_processor.h" | ||||||
| #include "video_core/debug_utils/debug_utils.h" | #include "video_core/debug_utils/debug_utils.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
| #include "video_core/pica_types.h" | #include "video_core/pica_types.h" | ||||||
| #include "video_core/primitive_assembly.h" | #include "video_core/primitive_assembly.h" | ||||||
| #include "video_core/rasterizer_interface.h" | #include "video_core/rasterizer_interface.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
| #include "video_core/renderer_base.h" | #include "video_core/renderer_base.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
| #include "video_core/vertex_loader.h" | #include "video_core/vertex_loader.h" | ||||||
|   | |||||||
| @@ -29,10 +29,10 @@ | |||||||
| #include "common/math_util.h" | #include "common/math_util.h" | ||||||
| #include "common/vector_math.h" | #include "common/vector_math.h" | ||||||
| #include "video_core/debug_utils/debug_utils.h" | #include "video_core/debug_utils/debug_utils.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
| #include "video_core/pica_types.h" | #include "video_core/pica_types.h" | ||||||
| #include "video_core/rasterizer_interface.h" | #include "video_core/rasterizer_interface.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
| #include "video_core/renderer_base.h" | #include "video_core/renderer_base.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
| #include "video_core/texture/texture_decode.h" | #include "video_core/texture/texture_decode.h" | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ | |||||||
| #include <vector> | #include <vector> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/vector_math.h" | #include "common/vector_math.h" | ||||||
| #include "video_core/pica.h" | #include "video_core/regs.h" | ||||||
|  |  | ||||||
| namespace CiTrace { | namespace CiTrace { | ||||||
| class Recorder; | class Recorder; | ||||||
|   | |||||||
| @@ -3,497 +3,14 @@ | |||||||
| // Refer to the license.txt file included. | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
| #include <cstring> | #include <cstring> | ||||||
| #include <iterator> |  | ||||||
| #include <unordered_map> |  | ||||||
| #include <utility> |  | ||||||
| #include "video_core/pica.h" | #include "video_core/pica.h" | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
| #include "video_core/primitive_assembly.h" | #include "video_core/regs.h" | ||||||
| #include "video_core/shader/shader.h" |  | ||||||
|  |  | ||||||
| namespace Pica { | namespace Pica { | ||||||
|  |  | ||||||
| State g_state; | State g_state; | ||||||
|  |  | ||||||
| static const std::pair<u16, const char*> register_names[] = { |  | ||||||
|     {0x010, "GPUREG_FINALIZE"}, |  | ||||||
|  |  | ||||||
|     {0x040, "GPUREG_FACECULLING_CONFIG"}, |  | ||||||
|     {0x041, "GPUREG_VIEWPORT_WIDTH"}, |  | ||||||
|     {0x042, "GPUREG_VIEWPORT_INVW"}, |  | ||||||
|     {0x043, "GPUREG_VIEWPORT_HEIGHT"}, |  | ||||||
|     {0x044, "GPUREG_VIEWPORT_INVH"}, |  | ||||||
|  |  | ||||||
|     {0x047, "GPUREG_FRAGOP_CLIP"}, |  | ||||||
|     {0x048, "GPUREG_FRAGOP_CLIP_DATA0"}, |  | ||||||
|     {0x049, "GPUREG_FRAGOP_CLIP_DATA1"}, |  | ||||||
|     {0x04A, "GPUREG_FRAGOP_CLIP_DATA2"}, |  | ||||||
|     {0x04B, "GPUREG_FRAGOP_CLIP_DATA3"}, |  | ||||||
|  |  | ||||||
|     {0x04D, "GPUREG_DEPTHMAP_SCALE"}, |  | ||||||
|     {0x04E, "GPUREG_DEPTHMAP_OFFSET"}, |  | ||||||
|     {0x04F, "GPUREG_SH_OUTMAP_TOTAL"}, |  | ||||||
|     {0x050, "GPUREG_SH_OUTMAP_O0"}, |  | ||||||
|     {0x051, "GPUREG_SH_OUTMAP_O1"}, |  | ||||||
|     {0x052, "GPUREG_SH_OUTMAP_O2"}, |  | ||||||
|     {0x053, "GPUREG_SH_OUTMAP_O3"}, |  | ||||||
|     {0x054, "GPUREG_SH_OUTMAP_O4"}, |  | ||||||
|     {0x055, "GPUREG_SH_OUTMAP_O5"}, |  | ||||||
|     {0x056, "GPUREG_SH_OUTMAP_O6"}, |  | ||||||
|  |  | ||||||
|     {0x061, "GPUREG_EARLYDEPTH_FUNC"}, |  | ||||||
|     {0x062, "GPUREG_EARLYDEPTH_TEST1"}, |  | ||||||
|     {0x063, "GPUREG_EARLYDEPTH_CLEAR"}, |  | ||||||
|     {0x064, "GPUREG_SH_OUTATTR_MODE"}, |  | ||||||
|     {0x065, "GPUREG_SCISSORTEST_MODE"}, |  | ||||||
|     {0x066, "GPUREG_SCISSORTEST_POS"}, |  | ||||||
|     {0x067, "GPUREG_SCISSORTEST_DIM"}, |  | ||||||
|     {0x068, "GPUREG_VIEWPORT_XY"}, |  | ||||||
|  |  | ||||||
|     {0x06A, "GPUREG_EARLYDEPTH_DATA"}, |  | ||||||
|  |  | ||||||
|     {0x06D, "GPUREG_DEPTHMAP_ENABLE"}, |  | ||||||
|     {0x06E, "GPUREG_RENDERBUF_DIM"}, |  | ||||||
|     {0x06F, "GPUREG_SH_OUTATTR_CLOCK"}, |  | ||||||
|  |  | ||||||
|     {0x080, "GPUREG_TEXUNIT_CONFIG"}, |  | ||||||
|     {0x081, "GPUREG_TEXUNIT0_BORDER_COLOR"}, |  | ||||||
|     {0x082, "GPUREG_TEXUNIT0_DIM"}, |  | ||||||
|     {0x083, "GPUREG_TEXUNIT0_PARAM"}, |  | ||||||
|     {0x084, "GPUREG_TEXUNIT0_LOD"}, |  | ||||||
|     {0x085, "GPUREG_TEXUNIT0_ADDR1"}, |  | ||||||
|     {0x086, "GPUREG_TEXUNIT0_ADDR2"}, |  | ||||||
|     {0x087, "GPUREG_TEXUNIT0_ADDR3"}, |  | ||||||
|     {0x088, "GPUREG_TEXUNIT0_ADDR4"}, |  | ||||||
|     {0x089, "GPUREG_TEXUNIT0_ADDR5"}, |  | ||||||
|     {0x08A, "GPUREG_TEXUNIT0_ADDR6"}, |  | ||||||
|     {0x08B, "GPUREG_TEXUNIT0_SHADOW"}, |  | ||||||
|  |  | ||||||
|     {0x08E, "GPUREG_TEXUNIT0_TYPE"}, |  | ||||||
|     {0x08F, "GPUREG_LIGHTING_ENABLE0"}, |  | ||||||
|  |  | ||||||
|     {0x091, "GPUREG_TEXUNIT1_BORDER_COLOR"}, |  | ||||||
|     {0x092, "GPUREG_TEXUNIT1_DIM"}, |  | ||||||
|     {0x093, "GPUREG_TEXUNIT1_PARAM"}, |  | ||||||
|     {0x094, "GPUREG_TEXUNIT1_LOD"}, |  | ||||||
|     {0x095, "GPUREG_TEXUNIT1_ADDR"}, |  | ||||||
|     {0x096, "GPUREG_TEXUNIT1_TYPE"}, |  | ||||||
|  |  | ||||||
|     {0x099, "GPUREG_TEXUNIT2_BORDER_COLOR"}, |  | ||||||
|     {0x09A, "GPUREG_TEXUNIT2_DIM"}, |  | ||||||
|     {0x09B, "GPUREG_TEXUNIT2_PARAM"}, |  | ||||||
|     {0x09C, "GPUREG_TEXUNIT2_LOD"}, |  | ||||||
|     {0x09D, "GPUREG_TEXUNIT2_ADDR"}, |  | ||||||
|     {0x09E, "GPUREG_TEXUNIT2_TYPE"}, |  | ||||||
|  |  | ||||||
|     {0x0A8, "GPUREG_TEXUNIT3_PROCTEX0"}, |  | ||||||
|     {0x0A9, "GPUREG_TEXUNIT3_PROCTEX1"}, |  | ||||||
|     {0x0AA, "GPUREG_TEXUNIT3_PROCTEX2"}, |  | ||||||
|     {0x0AB, "GPUREG_TEXUNIT3_PROCTEX3"}, |  | ||||||
|     {0x0AC, "GPUREG_TEXUNIT3_PROCTEX4"}, |  | ||||||
|     {0x0AD, "GPUREG_TEXUNIT3_PROCTEX5"}, |  | ||||||
|  |  | ||||||
|     {0x0AF, "GPUREG_PROCTEX_LUT"}, |  | ||||||
|     {0x0B0, "GPUREG_PROCTEX_LUT_DATA0"}, |  | ||||||
|     {0x0B1, "GPUREG_PROCTEX_LUT_DATA1"}, |  | ||||||
|     {0x0B2, "GPUREG_PROCTEX_LUT_DATA2"}, |  | ||||||
|     {0x0B3, "GPUREG_PROCTEX_LUT_DATA3"}, |  | ||||||
|     {0x0B4, "GPUREG_PROCTEX_LUT_DATA4"}, |  | ||||||
|     {0x0B5, "GPUREG_PROCTEX_LUT_DATA5"}, |  | ||||||
|     {0x0B6, "GPUREG_PROCTEX_LUT_DATA6"}, |  | ||||||
|     {0x0B7, "GPUREG_PROCTEX_LUT_DATA7"}, |  | ||||||
|  |  | ||||||
|     {0x0C0, "GPUREG_TEXENV0_SOURCE"}, |  | ||||||
|     {0x0C1, "GPUREG_TEXENV0_OPERAND"}, |  | ||||||
|     {0x0C2, "GPUREG_TEXENV0_COMBINER"}, |  | ||||||
|     {0x0C3, "GPUREG_TEXENV0_COLOR"}, |  | ||||||
|     {0x0C4, "GPUREG_TEXENV0_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x0C8, "GPUREG_TEXENV1_SOURCE"}, |  | ||||||
|     {0x0C9, "GPUREG_TEXENV1_OPERAND"}, |  | ||||||
|     {0x0CA, "GPUREG_TEXENV1_COMBINER"}, |  | ||||||
|     {0x0CB, "GPUREG_TEXENV1_COLOR"}, |  | ||||||
|     {0x0CC, "GPUREG_TEXENV1_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x0D0, "GPUREG_TEXENV2_SOURCE"}, |  | ||||||
|     {0x0D1, "GPUREG_TEXENV2_OPERAND"}, |  | ||||||
|     {0x0D2, "GPUREG_TEXENV2_COMBINER"}, |  | ||||||
|     {0x0D3, "GPUREG_TEXENV2_COLOR"}, |  | ||||||
|     {0x0D4, "GPUREG_TEXENV2_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x0D8, "GPUREG_TEXENV3_SOURCE"}, |  | ||||||
|     {0x0D9, "GPUREG_TEXENV3_OPERAND"}, |  | ||||||
|     {0x0DA, "GPUREG_TEXENV3_COMBINER"}, |  | ||||||
|     {0x0DB, "GPUREG_TEXENV3_COLOR"}, |  | ||||||
|     {0x0DC, "GPUREG_TEXENV3_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x0E0, "GPUREG_TEXENV_UPDATE_BUFFER"}, |  | ||||||
|     {0x0E1, "GPUREG_FOG_COLOR"}, |  | ||||||
|  |  | ||||||
|     {0x0E4, "GPUREG_GAS_ATTENUATION"}, |  | ||||||
|     {0x0E5, "GPUREG_GAS_ACCMAX"}, |  | ||||||
|     {0x0E6, "GPUREG_FOG_LUT_INDEX"}, |  | ||||||
|  |  | ||||||
|     {0x0E8, "GPUREG_FOG_LUT_DATA0"}, |  | ||||||
|     {0x0E9, "GPUREG_FOG_LUT_DATA1"}, |  | ||||||
|     {0x0EA, "GPUREG_FOG_LUT_DATA2"}, |  | ||||||
|     {0x0EB, "GPUREG_FOG_LUT_DATA3"}, |  | ||||||
|     {0x0EC, "GPUREG_FOG_LUT_DATA4"}, |  | ||||||
|     {0x0ED, "GPUREG_FOG_LUT_DATA5"}, |  | ||||||
|     {0x0EE, "GPUREG_FOG_LUT_DATA6"}, |  | ||||||
|     {0x0EF, "GPUREG_FOG_LUT_DATA7"}, |  | ||||||
|     {0x0F0, "GPUREG_TEXENV4_SOURCE"}, |  | ||||||
|     {0x0F1, "GPUREG_TEXENV4_OPERAND"}, |  | ||||||
|     {0x0F2, "GPUREG_TEXENV4_COMBINER"}, |  | ||||||
|     {0x0F3, "GPUREG_TEXENV4_COLOR"}, |  | ||||||
|     {0x0F4, "GPUREG_TEXENV4_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x0F8, "GPUREG_TEXENV5_SOURCE"}, |  | ||||||
|     {0x0F9, "GPUREG_TEXENV5_OPERAND"}, |  | ||||||
|     {0x0FA, "GPUREG_TEXENV5_COMBINER"}, |  | ||||||
|     {0x0FB, "GPUREG_TEXENV5_COLOR"}, |  | ||||||
|     {0x0FC, "GPUREG_TEXENV5_SCALE"}, |  | ||||||
|     {0x0FD, "GPUREG_TEXENV_BUFFER_COLOR"}, |  | ||||||
|  |  | ||||||
|     {0x100, "GPUREG_COLOR_OPERATION"}, |  | ||||||
|     {0x101, "GPUREG_BLEND_FUNC"}, |  | ||||||
|     {0x102, "GPUREG_LOGIC_OP"}, |  | ||||||
|     {0x103, "GPUREG_BLEND_COLOR"}, |  | ||||||
|     {0x104, "GPUREG_FRAGOP_ALPHA_TEST"}, |  | ||||||
|     {0x105, "GPUREG_STENCIL_TEST"}, |  | ||||||
|     {0x106, "GPUREG_STENCIL_OP"}, |  | ||||||
|     {0x107, "GPUREG_DEPTH_COLOR_MASK"}, |  | ||||||
|  |  | ||||||
|     {0x110, "GPUREG_FRAMEBUFFER_INVALIDATE"}, |  | ||||||
|     {0x111, "GPUREG_FRAMEBUFFER_FLUSH"}, |  | ||||||
|     {0x112, "GPUREG_COLORBUFFER_READ"}, |  | ||||||
|     {0x113, "GPUREG_COLORBUFFER_WRITE"}, |  | ||||||
|     {0x114, "GPUREG_DEPTHBUFFER_READ"}, |  | ||||||
|     {0x115, "GPUREG_DEPTHBUFFER_WRITE"}, |  | ||||||
|     {0x116, "GPUREG_DEPTHBUFFER_FORMAT"}, |  | ||||||
|     {0x117, "GPUREG_COLORBUFFER_FORMAT"}, |  | ||||||
|     {0x118, "GPUREG_EARLYDEPTH_TEST2"}, |  | ||||||
|  |  | ||||||
|     {0x11B, "GPUREG_FRAMEBUFFER_BLOCK32"}, |  | ||||||
|     {0x11C, "GPUREG_DEPTHBUFFER_LOC"}, |  | ||||||
|     {0x11D, "GPUREG_COLORBUFFER_LOC"}, |  | ||||||
|     {0x11E, "GPUREG_FRAMEBUFFER_DIM"}, |  | ||||||
|  |  | ||||||
|     {0x120, "GPUREG_GAS_LIGHT_XY"}, |  | ||||||
|     {0x121, "GPUREG_GAS_LIGHT_Z"}, |  | ||||||
|     {0x122, "GPUREG_GAS_LIGHT_Z_COLOR"}, |  | ||||||
|     {0x123, "GPUREG_GAS_LUT_INDEX"}, |  | ||||||
|     {0x124, "GPUREG_GAS_LUT_DATA"}, |  | ||||||
|  |  | ||||||
|     {0x126, "GPUREG_GAS_DELTAZ_DEPTH"}, |  | ||||||
|  |  | ||||||
|     {0x130, "GPUREG_FRAGOP_SHADOW"}, |  | ||||||
|  |  | ||||||
|     {0x140, "GPUREG_LIGHT0_SPECULAR0"}, |  | ||||||
|     {0x141, "GPUREG_LIGHT0_SPECULAR1"}, |  | ||||||
|     {0x142, "GPUREG_LIGHT0_DIFFUSE"}, |  | ||||||
|     {0x143, "GPUREG_LIGHT0_AMBIENT"}, |  | ||||||
|     {0x144, "GPUREG_LIGHT0_XY"}, |  | ||||||
|     {0x145, "GPUREG_LIGHT0_Z"}, |  | ||||||
|     {0x146, "GPUREG_LIGHT0_SPOTDIR_XY"}, |  | ||||||
|     {0x147, "GPUREG_LIGHT0_SPOTDIR_Z"}, |  | ||||||
|  |  | ||||||
|     {0x149, "GPUREG_LIGHT0_CONFIG"}, |  | ||||||
|     {0x14A, "GPUREG_LIGHT0_ATTENUATION_BIAS"}, |  | ||||||
|     {0x14B, "GPUREG_LIGHT0_ATTENUATION_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x150, "GPUREG_LIGHT1_SPECULAR0"}, |  | ||||||
|     {0x151, "GPUREG_LIGHT1_SPECULAR1"}, |  | ||||||
|     {0x152, "GPUREG_LIGHT1_DIFFUSE"}, |  | ||||||
|     {0x153, "GPUREG_LIGHT1_AMBIENT"}, |  | ||||||
|     {0x154, "GPUREG_LIGHT1_XY"}, |  | ||||||
|     {0x155, "GPUREG_LIGHT1_Z"}, |  | ||||||
|     {0x156, "GPUREG_LIGHT1_SPOTDIR_XY"}, |  | ||||||
|     {0x157, "GPUREG_LIGHT1_SPOTDIR_Z"}, |  | ||||||
|  |  | ||||||
|     {0x159, "GPUREG_LIGHT1_CONFIG"}, |  | ||||||
|     {0x15A, "GPUREG_LIGHT1_ATTENUATION_BIAS"}, |  | ||||||
|     {0x15B, "GPUREG_LIGHT1_ATTENUATION_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x160, "GPUREG_LIGHT2_SPECULAR0"}, |  | ||||||
|     {0x161, "GPUREG_LIGHT2_SPECULAR1"}, |  | ||||||
|     {0x162, "GPUREG_LIGHT2_DIFFUSE"}, |  | ||||||
|     {0x163, "GPUREG_LIGHT2_AMBIENT"}, |  | ||||||
|     {0x164, "GPUREG_LIGHT2_XY"}, |  | ||||||
|     {0x165, "GPUREG_LIGHT2_Z"}, |  | ||||||
|     {0x166, "GPUREG_LIGHT2_SPOTDIR_XY"}, |  | ||||||
|     {0x167, "GPUREG_LIGHT2_SPOTDIR_Z"}, |  | ||||||
|  |  | ||||||
|     {0x169, "GPUREG_LIGHT2_CONFIG"}, |  | ||||||
|     {0x16A, "GPUREG_LIGHT2_ATTENUATION_BIAS"}, |  | ||||||
|     {0x16B, "GPUREG_LIGHT2_ATTENUATION_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x170, "GPUREG_LIGHT3_SPECULAR0"}, |  | ||||||
|     {0x171, "GPUREG_LIGHT3_SPECULAR1"}, |  | ||||||
|     {0x172, "GPUREG_LIGHT3_DIFFUSE"}, |  | ||||||
|     {0x173, "GPUREG_LIGHT3_AMBIENT"}, |  | ||||||
|     {0x174, "GPUREG_LIGHT3_XY"}, |  | ||||||
|     {0x175, "GPUREG_LIGHT3_Z"}, |  | ||||||
|     {0x176, "GPUREG_LIGHT3_SPOTDIR_XY"}, |  | ||||||
|     {0x177, "GPUREG_LIGHT3_SPOTDIR_Z"}, |  | ||||||
|  |  | ||||||
|     {0x179, "GPUREG_LIGHT3_CONFIG"}, |  | ||||||
|     {0x17A, "GPUREG_LIGHT3_ATTENUATION_BIAS"}, |  | ||||||
|     {0x17B, "GPUREG_LIGHT3_ATTENUATION_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x180, "GPUREG_LIGHT4_SPECULAR0"}, |  | ||||||
|     {0x181, "GPUREG_LIGHT4_SPECULAR1"}, |  | ||||||
|     {0x182, "GPUREG_LIGHT4_DIFFUSE"}, |  | ||||||
|     {0x183, "GPUREG_LIGHT4_AMBIENT"}, |  | ||||||
|     {0x184, "GPUREG_LIGHT4_XY"}, |  | ||||||
|     {0x185, "GPUREG_LIGHT4_Z"}, |  | ||||||
|     {0x186, "GPUREG_LIGHT4_SPOTDIR_XY"}, |  | ||||||
|     {0x187, "GPUREG_LIGHT4_SPOTDIR_Z"}, |  | ||||||
|  |  | ||||||
|     {0x189, "GPUREG_LIGHT4_CONFIG"}, |  | ||||||
|     {0x18A, "GPUREG_LIGHT4_ATTENUATION_BIAS"}, |  | ||||||
|     {0x18B, "GPUREG_LIGHT4_ATTENUATION_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x190, "GPUREG_LIGHT5_SPECULAR0"}, |  | ||||||
|     {0x191, "GPUREG_LIGHT5_SPECULAR1"}, |  | ||||||
|     {0x192, "GPUREG_LIGHT5_DIFFUSE"}, |  | ||||||
|     {0x193, "GPUREG_LIGHT5_AMBIENT"}, |  | ||||||
|     {0x194, "GPUREG_LIGHT5_XY"}, |  | ||||||
|     {0x195, "GPUREG_LIGHT5_Z"}, |  | ||||||
|     {0x196, "GPUREG_LIGHT5_SPOTDIR_XY"}, |  | ||||||
|     {0x197, "GPUREG_LIGHT5_SPOTDIR_Z"}, |  | ||||||
|  |  | ||||||
|     {0x199, "GPUREG_LIGHT5_CONFIG"}, |  | ||||||
|     {0x19A, "GPUREG_LIGHT5_ATTENUATION_BIAS"}, |  | ||||||
|     {0x19B, "GPUREG_LIGHT5_ATTENUATION_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x1A0, "GPUREG_LIGHT6_SPECULAR0"}, |  | ||||||
|     {0x1A1, "GPUREG_LIGHT6_SPECULAR1"}, |  | ||||||
|     {0x1A2, "GPUREG_LIGHT6_DIFFUSE"}, |  | ||||||
|     {0x1A3, "GPUREG_LIGHT6_AMBIENT"}, |  | ||||||
|     {0x1A4, "GPUREG_LIGHT6_XY"}, |  | ||||||
|     {0x1A5, "GPUREG_LIGHT6_Z"}, |  | ||||||
|     {0x1A6, "GPUREG_LIGHT6_SPOTDIR_XY"}, |  | ||||||
|     {0x1A7, "GPUREG_LIGHT6_SPOTDIR_Z"}, |  | ||||||
|  |  | ||||||
|     {0x1A9, "GPUREG_LIGHT6_CONFIG"}, |  | ||||||
|     {0x1AA, "GPUREG_LIGHT6_ATTENUATION_BIAS"}, |  | ||||||
|     {0x1AB, "GPUREG_LIGHT6_ATTENUATION_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x1B0, "GPUREG_LIGHT7_SPECULAR0"}, |  | ||||||
|     {0x1B1, "GPUREG_LIGHT7_SPECULAR1"}, |  | ||||||
|     {0x1B2, "GPUREG_LIGHT7_DIFFUSE"}, |  | ||||||
|     {0x1B3, "GPUREG_LIGHT7_AMBIENT"}, |  | ||||||
|     {0x1B4, "GPUREG_LIGHT7_XY"}, |  | ||||||
|     {0x1B5, "GPUREG_LIGHT7_Z"}, |  | ||||||
|     {0x1B6, "GPUREG_LIGHT7_SPOTDIR_XY"}, |  | ||||||
|     {0x1B7, "GPUREG_LIGHT7_SPOTDIR_Z"}, |  | ||||||
|  |  | ||||||
|     {0x1B9, "GPUREG_LIGHT7_CONFIG"}, |  | ||||||
|     {0x1BA, "GPUREG_LIGHT7_ATTENUATION_BIAS"}, |  | ||||||
|     {0x1BB, "GPUREG_LIGHT7_ATTENUATION_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x1C0, "GPUREG_LIGHTING_AMBIENT"}, |  | ||||||
|  |  | ||||||
|     {0x1C2, "GPUREG_LIGHTING_NUM_LIGHTS"}, |  | ||||||
|     {0x1C3, "GPUREG_LIGHTING_CONFIG0"}, |  | ||||||
|     {0x1C4, "GPUREG_LIGHTING_CONFIG1"}, |  | ||||||
|     {0x1C5, "GPUREG_LIGHTING_LUT_INDEX"}, |  | ||||||
|     {0x1C6, "GPUREG_LIGHTING_ENABLE1"}, |  | ||||||
|  |  | ||||||
|     {0x1C8, "GPUREG_LIGHTING_LUT_DATA0"}, |  | ||||||
|     {0x1C9, "GPUREG_LIGHTING_LUT_DATA1"}, |  | ||||||
|     {0x1CA, "GPUREG_LIGHTING_LUT_DATA2"}, |  | ||||||
|     {0x1CB, "GPUREG_LIGHTING_LUT_DATA3"}, |  | ||||||
|     {0x1CC, "GPUREG_LIGHTING_LUT_DATA4"}, |  | ||||||
|     {0x1CD, "GPUREG_LIGHTING_LUT_DATA5"}, |  | ||||||
|     {0x1CE, "GPUREG_LIGHTING_LUT_DATA6"}, |  | ||||||
|     {0x1CF, "GPUREG_LIGHTING_LUT_DATA7"}, |  | ||||||
|     {0x1D0, "GPUREG_LIGHTING_LUTINPUT_ABS"}, |  | ||||||
|     {0x1D1, "GPUREG_LIGHTING_LUTINPUT_SELECT"}, |  | ||||||
|     {0x1D2, "GPUREG_LIGHTING_LUTINPUT_SCALE"}, |  | ||||||
|  |  | ||||||
|     {0x1D9, "GPUREG_LIGHTING_LIGHT_PERMUTATION"}, |  | ||||||
|  |  | ||||||
|     {0x200, "GPUREG_ATTRIBBUFFERS_LOC"}, |  | ||||||
|     {0x201, "GPUREG_ATTRIBBUFFERS_FORMAT_LOW"}, |  | ||||||
|     {0x202, "GPUREG_ATTRIBBUFFERS_FORMAT_HIGH"}, |  | ||||||
|     {0x203, "GPUREG_ATTRIBBUFFER0_OFFSET"}, |  | ||||||
|     {0x204, "GPUREG_ATTRIBBUFFER0_CONFIG1"}, |  | ||||||
|     {0x205, "GPUREG_ATTRIBBUFFER0_CONFIG2"}, |  | ||||||
|     {0x206, "GPUREG_ATTRIBBUFFER1_OFFSET"}, |  | ||||||
|     {0x207, "GPUREG_ATTRIBBUFFER1_CONFIG1"}, |  | ||||||
|     {0x208, "GPUREG_ATTRIBBUFFER1_CONFIG2"}, |  | ||||||
|     {0x209, "GPUREG_ATTRIBBUFFER2_OFFSET"}, |  | ||||||
|     {0x20A, "GPUREG_ATTRIBBUFFER2_CONFIG1"}, |  | ||||||
|     {0x20B, "GPUREG_ATTRIBBUFFER2_CONFIG2"}, |  | ||||||
|     {0x20C, "GPUREG_ATTRIBBUFFER3_OFFSET"}, |  | ||||||
|     {0x20D, "GPUREG_ATTRIBBUFFER3_CONFIG1"}, |  | ||||||
|     {0x20E, "GPUREG_ATTRIBBUFFER3_CONFIG2"}, |  | ||||||
|     {0x20F, "GPUREG_ATTRIBBUFFER4_OFFSET"}, |  | ||||||
|     {0x210, "GPUREG_ATTRIBBUFFER4_CONFIG1"}, |  | ||||||
|     {0x211, "GPUREG_ATTRIBBUFFER4_CONFIG2"}, |  | ||||||
|     {0x212, "GPUREG_ATTRIBBUFFER5_OFFSET"}, |  | ||||||
|     {0x213, "GPUREG_ATTRIBBUFFER5_CONFIG1"}, |  | ||||||
|     {0x214, "GPUREG_ATTRIBBUFFER5_CONFIG2"}, |  | ||||||
|     {0x215, "GPUREG_ATTRIBBUFFER6_OFFSET"}, |  | ||||||
|     {0x216, "GPUREG_ATTRIBBUFFER6_CONFIG1"}, |  | ||||||
|     {0x217, "GPUREG_ATTRIBBUFFER6_CONFIG2"}, |  | ||||||
|     {0x218, "GPUREG_ATTRIBBUFFER7_OFFSET"}, |  | ||||||
|     {0x219, "GPUREG_ATTRIBBUFFER7_CONFIG1"}, |  | ||||||
|     {0x21A, "GPUREG_ATTRIBBUFFER7_CONFIG2"}, |  | ||||||
|     {0x21B, "GPUREG_ATTRIBBUFFER8_OFFSET"}, |  | ||||||
|     {0x21C, "GPUREG_ATTRIBBUFFER8_CONFIG1"}, |  | ||||||
|     {0x21D, "GPUREG_ATTRIBBUFFER8_CONFIG2"}, |  | ||||||
|     {0x21E, "GPUREG_ATTRIBBUFFER9_OFFSET"}, |  | ||||||
|     {0x21F, "GPUREG_ATTRIBBUFFER9_CONFIG1"}, |  | ||||||
|     {0x220, "GPUREG_ATTRIBBUFFER9_CONFIG2"}, |  | ||||||
|     {0x221, "GPUREG_ATTRIBBUFFER10_OFFSET"}, |  | ||||||
|     {0x222, "GPUREG_ATTRIBBUFFER10_CONFIG1"}, |  | ||||||
|     {0x223, "GPUREG_ATTRIBBUFFER10_CONFIG2"}, |  | ||||||
|     {0x224, "GPUREG_ATTRIBBUFFER11_OFFSET"}, |  | ||||||
|     {0x225, "GPUREG_ATTRIBBUFFER11_CONFIG1"}, |  | ||||||
|     {0x226, "GPUREG_ATTRIBBUFFER11_CONFIG2"}, |  | ||||||
|     {0x227, "GPUREG_INDEXBUFFER_CONFIG"}, |  | ||||||
|     {0x228, "GPUREG_NUMVERTICES"}, |  | ||||||
|     {0x229, "GPUREG_GEOSTAGE_CONFIG"}, |  | ||||||
|     {0x22A, "GPUREG_VERTEX_OFFSET"}, |  | ||||||
|  |  | ||||||
|     {0x22D, "GPUREG_POST_VERTEX_CACHE_NUM"}, |  | ||||||
|     {0x22E, "GPUREG_DRAWARRAYS"}, |  | ||||||
|     {0x22F, "GPUREG_DRAWELEMENTS"}, |  | ||||||
|  |  | ||||||
|     {0x231, "GPUREG_VTX_FUNC"}, |  | ||||||
|     {0x232, "GPUREG_FIXEDATTRIB_INDEX"}, |  | ||||||
|     {0x233, "GPUREG_FIXEDATTRIB_DATA0"}, |  | ||||||
|     {0x234, "GPUREG_FIXEDATTRIB_DATA1"}, |  | ||||||
|     {0x235, "GPUREG_FIXEDATTRIB_DATA2"}, |  | ||||||
|  |  | ||||||
|     {0x238, "GPUREG_CMDBUF_SIZE0"}, |  | ||||||
|     {0x239, "GPUREG_CMDBUF_SIZE1"}, |  | ||||||
|     {0x23A, "GPUREG_CMDBUF_ADDR0"}, |  | ||||||
|     {0x23B, "GPUREG_CMDBUF_ADDR1"}, |  | ||||||
|     {0x23C, "GPUREG_CMDBUF_JUMP0"}, |  | ||||||
|     {0x23D, "GPUREG_CMDBUF_JUMP1"}, |  | ||||||
|  |  | ||||||
|     {0x242, "GPUREG_VSH_NUM_ATTR"}, |  | ||||||
|  |  | ||||||
|     {0x244, "GPUREG_VSH_COM_MODE"}, |  | ||||||
|     {0x245, "GPUREG_START_DRAW_FUNC0"}, |  | ||||||
|  |  | ||||||
|     {0x24A, "GPUREG_VSH_OUTMAP_TOTAL1"}, |  | ||||||
|  |  | ||||||
|     {0x251, "GPUREG_VSH_OUTMAP_TOTAL2"}, |  | ||||||
|     {0x252, "GPUREG_GSH_MISC0"}, |  | ||||||
|     {0x253, "GPUREG_GEOSTAGE_CONFIG2"}, |  | ||||||
|     {0x254, "GPUREG_GSH_MISC1"}, |  | ||||||
|  |  | ||||||
|     {0x25E, "GPUREG_PRIMITIVE_CONFIG"}, |  | ||||||
|     {0x25F, "GPUREG_RESTART_PRIMITIVE"}, |  | ||||||
|  |  | ||||||
|     {0x280, "GPUREG_GSH_BOOLUNIFORM"}, |  | ||||||
|     {0x281, "GPUREG_GSH_INTUNIFORM_I0"}, |  | ||||||
|     {0x282, "GPUREG_GSH_INTUNIFORM_I1"}, |  | ||||||
|     {0x283, "GPUREG_GSH_INTUNIFORM_I2"}, |  | ||||||
|     {0x284, "GPUREG_GSH_INTUNIFORM_I3"}, |  | ||||||
|  |  | ||||||
|     {0x289, "GPUREG_GSH_INPUTBUFFER_CONFIG"}, |  | ||||||
|     {0x28A, "GPUREG_GSH_ENTRYPOINT"}, |  | ||||||
|     {0x28B, "GPUREG_GSH_ATTRIBUTES_PERMUTATION_LOW"}, |  | ||||||
|     {0x28C, "GPUREG_GSH_ATTRIBUTES_PERMUTATION_HIGH"}, |  | ||||||
|     {0x28D, "GPUREG_GSH_OUTMAP_MASK"}, |  | ||||||
|  |  | ||||||
|     {0x28F, "GPUREG_GSH_CODETRANSFER_END"}, |  | ||||||
|     {0x290, "GPUREG_GSH_FLOATUNIFORM_INDEX"}, |  | ||||||
|     {0x291, "GPUREG_GSH_FLOATUNIFORM_DATA0"}, |  | ||||||
|     {0x292, "GPUREG_GSH_FLOATUNIFORM_DATA1"}, |  | ||||||
|     {0x293, "GPUREG_GSH_FLOATUNIFORM_DATA2"}, |  | ||||||
|     {0x294, "GPUREG_GSH_FLOATUNIFORM_DATA3"}, |  | ||||||
|     {0x295, "GPUREG_GSH_FLOATUNIFORM_DATA4"}, |  | ||||||
|     {0x296, "GPUREG_GSH_FLOATUNIFORM_DATA5"}, |  | ||||||
|     {0x297, "GPUREG_GSH_FLOATUNIFORM_DATA6"}, |  | ||||||
|     {0x298, "GPUREG_GSH_FLOATUNIFORM_DATA7"}, |  | ||||||
|  |  | ||||||
|     {0x29B, "GPUREG_GSH_CODETRANSFER_INDEX"}, |  | ||||||
|     {0x29C, "GPUREG_GSH_CODETRANSFER_DATA0"}, |  | ||||||
|     {0x29D, "GPUREG_GSH_CODETRANSFER_DATA1"}, |  | ||||||
|     {0x29E, "GPUREG_GSH_CODETRANSFER_DATA2"}, |  | ||||||
|     {0x29F, "GPUREG_GSH_CODETRANSFER_DATA3"}, |  | ||||||
|     {0x2A0, "GPUREG_GSH_CODETRANSFER_DATA4"}, |  | ||||||
|     {0x2A1, "GPUREG_GSH_CODETRANSFER_DATA5"}, |  | ||||||
|     {0x2A2, "GPUREG_GSH_CODETRANSFER_DATA6"}, |  | ||||||
|     {0x2A3, "GPUREG_GSH_CODETRANSFER_DATA7"}, |  | ||||||
|  |  | ||||||
|     {0x2A5, "GPUREG_GSH_OPDESCS_INDEX"}, |  | ||||||
|     {0x2A6, "GPUREG_GSH_OPDESCS_DATA0"}, |  | ||||||
|     {0x2A7, "GPUREG_GSH_OPDESCS_DATA1"}, |  | ||||||
|     {0x2A8, "GPUREG_GSH_OPDESCS_DATA2"}, |  | ||||||
|     {0x2A9, "GPUREG_GSH_OPDESCS_DATA3"}, |  | ||||||
|     {0x2AA, "GPUREG_GSH_OPDESCS_DATA4"}, |  | ||||||
|     {0x2AB, "GPUREG_GSH_OPDESCS_DATA5"}, |  | ||||||
|     {0x2AC, "GPUREG_GSH_OPDESCS_DATA6"}, |  | ||||||
|     {0x2AD, "GPUREG_GSH_OPDESCS_DATA7"}, |  | ||||||
|  |  | ||||||
|     {0x2B0, "GPUREG_VSH_BOOLUNIFORM"}, |  | ||||||
|     {0x2B1, "GPUREG_VSH_INTUNIFORM_I0"}, |  | ||||||
|     {0x2B2, "GPUREG_VSH_INTUNIFORM_I1"}, |  | ||||||
|     {0x2B3, "GPUREG_VSH_INTUNIFORM_I2"}, |  | ||||||
|     {0x2B4, "GPUREG_VSH_INTUNIFORM_I3"}, |  | ||||||
|  |  | ||||||
|     {0x2B9, "GPUREG_VSH_INPUTBUFFER_CONFIG"}, |  | ||||||
|     {0x2BA, "GPUREG_VSH_ENTRYPOINT"}, |  | ||||||
|     {0x2BB, "GPUREG_VSH_ATTRIBUTES_PERMUTATION_LOW"}, |  | ||||||
|     {0x2BC, "GPUREG_VSH_ATTRIBUTES_PERMUTATION_HIGH"}, |  | ||||||
|     {0x2BD, "GPUREG_VSH_OUTMAP_MASK"}, |  | ||||||
|  |  | ||||||
|     {0x2BF, "GPUREG_VSH_CODETRANSFER_END"}, |  | ||||||
|     {0x2C0, "GPUREG_VSH_FLOATUNIFORM_INDEX"}, |  | ||||||
|     {0x2C1, "GPUREG_VSH_FLOATUNIFORM_DATA0"}, |  | ||||||
|     {0x2C2, "GPUREG_VSH_FLOATUNIFORM_DATA1"}, |  | ||||||
|     {0x2C3, "GPUREG_VSH_FLOATUNIFORM_DATA2"}, |  | ||||||
|     {0x2C4, "GPUREG_VSH_FLOATUNIFORM_DATA3"}, |  | ||||||
|     {0x2C5, "GPUREG_VSH_FLOATUNIFORM_DATA4"}, |  | ||||||
|     {0x2C6, "GPUREG_VSH_FLOATUNIFORM_DATA5"}, |  | ||||||
|     {0x2C7, "GPUREG_VSH_FLOATUNIFORM_DATA6"}, |  | ||||||
|     {0x2C8, "GPUREG_VSH_FLOATUNIFORM_DATA7"}, |  | ||||||
|  |  | ||||||
|     {0x2CB, "GPUREG_VSH_CODETRANSFER_INDEX"}, |  | ||||||
|     {0x2CC, "GPUREG_VSH_CODETRANSFER_DATA0"}, |  | ||||||
|     {0x2CD, "GPUREG_VSH_CODETRANSFER_DATA1"}, |  | ||||||
|     {0x2CE, "GPUREG_VSH_CODETRANSFER_DATA2"}, |  | ||||||
|     {0x2CF, "GPUREG_VSH_CODETRANSFER_DATA3"}, |  | ||||||
|     {0x2D0, "GPUREG_VSH_CODETRANSFER_DATA4"}, |  | ||||||
|     {0x2D1, "GPUREG_VSH_CODETRANSFER_DATA5"}, |  | ||||||
|     {0x2D2, "GPUREG_VSH_CODETRANSFER_DATA6"}, |  | ||||||
|     {0x2D3, "GPUREG_VSH_CODETRANSFER_DATA7"}, |  | ||||||
|  |  | ||||||
|     {0x2D5, "GPUREG_VSH_OPDESCS_INDEX"}, |  | ||||||
|     {0x2D6, "GPUREG_VSH_OPDESCS_DATA0"}, |  | ||||||
|     {0x2D7, "GPUREG_VSH_OPDESCS_DATA1"}, |  | ||||||
|     {0x2D8, "GPUREG_VSH_OPDESCS_DATA2"}, |  | ||||||
|     {0x2D9, "GPUREG_VSH_OPDESCS_DATA3"}, |  | ||||||
|     {0x2DA, "GPUREG_VSH_OPDESCS_DATA4"}, |  | ||||||
|     {0x2DB, "GPUREG_VSH_OPDESCS_DATA5"}, |  | ||||||
|     {0x2DC, "GPUREG_VSH_OPDESCS_DATA6"}, |  | ||||||
|     {0x2DD, "GPUREG_VSH_OPDESCS_DATA7"}, |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| std::string Regs::GetCommandName(int index) { |  | ||||||
|     static std::unordered_map<u32, const char*> map; |  | ||||||
|  |  | ||||||
|     if (map.empty()) { |  | ||||||
|         map.insert(std::begin(register_names), std::end(register_names)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // Return empty string if no match is found |  | ||||||
|     auto it = map.find(index); |  | ||||||
|     if (it != map.end()) { |  | ||||||
|         return it->second; |  | ||||||
|     } else { |  | ||||||
|         return std::string(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void Init() { | void Init() { | ||||||
|     g_state.Reset(); |     g_state.Reset(); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -4,168 +4,9 @@ | |||||||
|  |  | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
| #include <array> |  | ||||||
| #include <cstddef> |  | ||||||
| #include <string> |  | ||||||
|  |  | ||||||
| #ifndef _MSC_VER |  | ||||||
| #include <type_traits> // for std::enable_if |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #include "common/assert.h" |  | ||||||
| #include "common/bit_field.h" |  | ||||||
| #include "common/common_funcs.h" |  | ||||||
| #include "common/common_types.h" |  | ||||||
| #include "common/logging/log.h" |  | ||||||
| #include "common/vector_math.h" |  | ||||||
| #include "video_core/regs_framebuffer.h" |  | ||||||
| #include "video_core/regs_lighting.h" |  | ||||||
| #include "video_core/regs_pipeline.h" |  | ||||||
| #include "video_core/regs_rasterizer.h" |  | ||||||
| #include "video_core/regs_shader.h" |  | ||||||
| #include "video_core/regs_texturing.h" | #include "video_core/regs_texturing.h" | ||||||
|  |  | ||||||
| namespace Pica { | namespace Pica { | ||||||
|  |  | ||||||
| // Returns index corresponding to the Regs member labeled by field_name |  | ||||||
| // TODO: Due to Visual studio bug 209229, offsetof does not return constant expressions |  | ||||||
| //       when used with array elements (e.g. PICA_REG_INDEX(vs_uniform_setup.set_value[1])). |  | ||||||
| //       For details cf. |  | ||||||
| //       https://connect.microsoft.com/VisualStudio/feedback/details/209229/offsetof-does-not-produce-a-constant-expression-for-array-members |  | ||||||
| //       Hopefully, this will be fixed sometime in the future. |  | ||||||
| //       For lack of better alternatives, we currently hardcode the offsets when constant |  | ||||||
| //       expressions are needed via PICA_REG_INDEX_WORKAROUND (on sane compilers, static_asserts |  | ||||||
| //       will then make sure the offsets indeed match the automatically calculated ones). |  | ||||||
| #define PICA_REG_INDEX(field_name) (offsetof(Pica::Regs, field_name) / sizeof(u32)) |  | ||||||
| #if defined(_MSC_VER) |  | ||||||
| #define PICA_REG_INDEX_WORKAROUND(field_name, backup_workaround_index) (backup_workaround_index) |  | ||||||
| #else |  | ||||||
| // NOTE: Yeah, hacking in a static_assert here just to workaround the lacking MSVC compiler |  | ||||||
| //       really is this annoying. This macro just forwards its first argument to PICA_REG_INDEX |  | ||||||
| //       and then performs a (no-op) cast to size_t iff the second argument matches the expected |  | ||||||
| //       field offset. Otherwise, the compiler will fail to compile this code. |  | ||||||
| #define PICA_REG_INDEX_WORKAROUND(field_name, backup_workaround_index)                             \ |  | ||||||
|     ((typename std::enable_if<backup_workaround_index == PICA_REG_INDEX(field_name),               \ |  | ||||||
|                               size_t>::type)PICA_REG_INDEX(field_name)) |  | ||||||
| #endif // _MSC_VER |  | ||||||
|  |  | ||||||
| struct Regs { |  | ||||||
|     INSERT_PADDING_WORDS(0x10); |  | ||||||
|     u32 trigger_irq; |  | ||||||
|     INSERT_PADDING_WORDS(0x2f); |  | ||||||
|     RasterizerRegs rasterizer; |  | ||||||
|     TexturingRegs texturing; |  | ||||||
|     FramebufferRegs framebuffer; |  | ||||||
|     LightingRegs lighting; |  | ||||||
|     PipelineRegs pipeline; |  | ||||||
|     ShaderRegs gs; |  | ||||||
|     ShaderRegs vs; |  | ||||||
|     INSERT_PADDING_WORDS(0x20); |  | ||||||
|  |  | ||||||
|     // Map register indices to names readable by humans |  | ||||||
|     // Used for debugging purposes, so performance is not an issue here |  | ||||||
|     static std::string GetCommandName(int index); |  | ||||||
|  |  | ||||||
|     static constexpr size_t NumIds() { |  | ||||||
|         return sizeof(Regs) / sizeof(u32); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     const u32& operator[](int index) const { |  | ||||||
|         const u32* content = reinterpret_cast<const u32*>(this); |  | ||||||
|         return content[index]; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     u32& operator[](int index) { |  | ||||||
|         u32* content = reinterpret_cast<u32*>(this); |  | ||||||
|         return content[index]; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| private: |  | ||||||
|     /* |  | ||||||
|      * Most physical addresses which Pica registers refer to are 8-byte aligned. |  | ||||||
|      * This function should be used to get the address from a raw register value. |  | ||||||
|      */ |  | ||||||
|     static inline u32 DecodeAddressRegister(u32 register_value) { |  | ||||||
|         return register_value * 8; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| // TODO: MSVC does not support using offsetof() on non-static data members even though this |  | ||||||
| //       is technically allowed since C++11. This macro should be enabled once MSVC adds |  | ||||||
| //       support for that. |  | ||||||
| #ifndef _MSC_VER |  | ||||||
| #define ASSERT_REG_POSITION(field_name, position)                                                  \ |  | ||||||
|     static_assert(offsetof(Regs, field_name) == position * 4,                                      \ |  | ||||||
|                   "Field " #field_name " has invalid position") |  | ||||||
|  |  | ||||||
| ASSERT_REG_POSITION(trigger_irq, 0x10); |  | ||||||
|  |  | ||||||
| ASSERT_REG_POSITION(rasterizer, 0x40); |  | ||||||
| ASSERT_REG_POSITION(rasterizer.cull_mode, 0x40); |  | ||||||
| ASSERT_REG_POSITION(rasterizer.viewport_size_x, 0x41); |  | ||||||
| ASSERT_REG_POSITION(rasterizer.viewport_size_y, 0x43); |  | ||||||
| ASSERT_REG_POSITION(rasterizer.viewport_depth_range, 0x4d); |  | ||||||
| ASSERT_REG_POSITION(rasterizer.viewport_depth_near_plane, 0x4e); |  | ||||||
| ASSERT_REG_POSITION(rasterizer.vs_output_attributes[0], 0x50); |  | ||||||
| ASSERT_REG_POSITION(rasterizer.vs_output_attributes[1], 0x51); |  | ||||||
| ASSERT_REG_POSITION(rasterizer.scissor_test, 0x65); |  | ||||||
| ASSERT_REG_POSITION(rasterizer.viewport_corner, 0x68); |  | ||||||
| ASSERT_REG_POSITION(rasterizer.depthmap_enable, 0x6D); |  | ||||||
|  |  | ||||||
| ASSERT_REG_POSITION(texturing, 0x80); |  | ||||||
| ASSERT_REG_POSITION(texturing.texture0_enable, 0x80); |  | ||||||
| ASSERT_REG_POSITION(texturing.texture0, 0x81); |  | ||||||
| ASSERT_REG_POSITION(texturing.texture0_format, 0x8e); |  | ||||||
| ASSERT_REG_POSITION(texturing.fragment_lighting_enable, 0x8f); |  | ||||||
| ASSERT_REG_POSITION(texturing.texture1, 0x91); |  | ||||||
| ASSERT_REG_POSITION(texturing.texture1_format, 0x96); |  | ||||||
| ASSERT_REG_POSITION(texturing.texture2, 0x99); |  | ||||||
| ASSERT_REG_POSITION(texturing.texture2_format, 0x9e); |  | ||||||
| ASSERT_REG_POSITION(texturing.tev_stage0, 0xc0); |  | ||||||
| ASSERT_REG_POSITION(texturing.tev_stage1, 0xc8); |  | ||||||
| ASSERT_REG_POSITION(texturing.tev_stage2, 0xd0); |  | ||||||
| ASSERT_REG_POSITION(texturing.tev_stage3, 0xd8); |  | ||||||
| ASSERT_REG_POSITION(texturing.tev_combiner_buffer_input, 0xe0); |  | ||||||
| ASSERT_REG_POSITION(texturing.fog_mode, 0xe0); |  | ||||||
| ASSERT_REG_POSITION(texturing.fog_color, 0xe1); |  | ||||||
| ASSERT_REG_POSITION(texturing.fog_lut_offset, 0xe6); |  | ||||||
| ASSERT_REG_POSITION(texturing.fog_lut_data, 0xe8); |  | ||||||
| ASSERT_REG_POSITION(texturing.tev_stage4, 0xf0); |  | ||||||
| ASSERT_REG_POSITION(texturing.tev_stage5, 0xf8); |  | ||||||
| ASSERT_REG_POSITION(texturing.tev_combiner_buffer_color, 0xfd); |  | ||||||
|  |  | ||||||
| ASSERT_REG_POSITION(framebuffer, 0x100); |  | ||||||
| ASSERT_REG_POSITION(framebuffer.output_merger, 0x100); |  | ||||||
| ASSERT_REG_POSITION(framebuffer.framebuffer, 0x110); |  | ||||||
|  |  | ||||||
| ASSERT_REG_POSITION(lighting, 0x140); |  | ||||||
|  |  | ||||||
| ASSERT_REG_POSITION(pipeline, 0x200); |  | ||||||
| ASSERT_REG_POSITION(pipeline.vertex_attributes, 0x200); |  | ||||||
| ASSERT_REG_POSITION(pipeline.index_array, 0x227); |  | ||||||
| ASSERT_REG_POSITION(pipeline.num_vertices, 0x228); |  | ||||||
| ASSERT_REG_POSITION(pipeline.vertex_offset, 0x22a); |  | ||||||
| ASSERT_REG_POSITION(pipeline.trigger_draw, 0x22e); |  | ||||||
| ASSERT_REG_POSITION(pipeline.trigger_draw_indexed, 0x22f); |  | ||||||
| ASSERT_REG_POSITION(pipeline.vs_default_attributes_setup, 0x232); |  | ||||||
| ASSERT_REG_POSITION(pipeline.command_buffer, 0x238); |  | ||||||
| ASSERT_REG_POSITION(pipeline.gpu_mode, 0x245); |  | ||||||
| ASSERT_REG_POSITION(pipeline.triangle_topology, 0x25e); |  | ||||||
| ASSERT_REG_POSITION(pipeline.restart_primitive, 0x25f); |  | ||||||
|  |  | ||||||
| ASSERT_REG_POSITION(gs, 0x280); |  | ||||||
| ASSERT_REG_POSITION(vs, 0x2b0); |  | ||||||
|  |  | ||||||
| #undef ASSERT_REG_POSITION |  | ||||||
| #endif // !defined(_MSC_VER) |  | ||||||
|  |  | ||||||
| // The total number of registers is chosen arbitrarily, but let's make sure it's not some odd value |  | ||||||
| // anyway. |  | ||||||
| static_assert(sizeof(Regs) <= 0x300 * sizeof(u32), |  | ||||||
|               "Register set structure larger than it should be"); |  | ||||||
| static_assert(sizeof(Regs) >= 0x300 * sizeof(u32), |  | ||||||
|               "Register set structure smaller than it should be"); |  | ||||||
|  |  | ||||||
| /// Initialize Pica state | /// Initialize Pica state | ||||||
| void Init(); | void Init(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,8 +7,8 @@ | |||||||
| #include <array> | #include <array> | ||||||
| #include "common/bit_field.h" | #include "common/bit_field.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/primitive_assembly.h" | #include "video_core/primitive_assembly.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
|  |  | ||||||
| namespace Pica { | namespace Pica { | ||||||
|   | |||||||
| @@ -16,10 +16,10 @@ | |||||||
| #include "core/hw/gpu.h" | #include "core/hw/gpu.h" | ||||||
| #include "core/memory.h" | #include "core/memory.h" | ||||||
| #include "video_core/debug_utils/debug_utils.h" | #include "video_core/debug_utils/debug_utils.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
| #include "video_core/pica_types.h" | #include "video_core/pica_types.h" | ||||||
| #include "video_core/rasterizer.h" | #include "video_core/rasterizer.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
| #include "video_core/texture/texture_decode.h" | #include "video_core/texture/texture_decode.h" | ||||||
| #include "video_core/utils.h" | #include "video_core/utils.h" | ||||||
|   | |||||||
							
								
								
									
										493
									
								
								src/video_core/regs.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										493
									
								
								src/video_core/regs.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,493 @@ | |||||||
|  | // Copyright 2015 Citra Emulator Project | ||||||
|  | // Licensed under GPLv2 or any later version | ||||||
|  | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
|  | #include <iterator> | ||||||
|  | #include <unordered_map> | ||||||
|  | #include <utility> | ||||||
|  |  | ||||||
|  | #include "common/common_types.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
|  |  | ||||||
|  | namespace Pica { | ||||||
|  |  | ||||||
|  | static const std::pair<u16, const char*> register_names[] = { | ||||||
|  |     {0x010, "GPUREG_FINALIZE"}, | ||||||
|  |  | ||||||
|  |     {0x040, "GPUREG_FACECULLING_CONFIG"}, | ||||||
|  |     {0x041, "GPUREG_VIEWPORT_WIDTH"}, | ||||||
|  |     {0x042, "GPUREG_VIEWPORT_INVW"}, | ||||||
|  |     {0x043, "GPUREG_VIEWPORT_HEIGHT"}, | ||||||
|  |     {0x044, "GPUREG_VIEWPORT_INVH"}, | ||||||
|  |  | ||||||
|  |     {0x047, "GPUREG_FRAGOP_CLIP"}, | ||||||
|  |     {0x048, "GPUREG_FRAGOP_CLIP_DATA0"}, | ||||||
|  |     {0x049, "GPUREG_FRAGOP_CLIP_DATA1"}, | ||||||
|  |     {0x04A, "GPUREG_FRAGOP_CLIP_DATA2"}, | ||||||
|  |     {0x04B, "GPUREG_FRAGOP_CLIP_DATA3"}, | ||||||
|  |  | ||||||
|  |     {0x04D, "GPUREG_DEPTHMAP_SCALE"}, | ||||||
|  |     {0x04E, "GPUREG_DEPTHMAP_OFFSET"}, | ||||||
|  |     {0x04F, "GPUREG_SH_OUTMAP_TOTAL"}, | ||||||
|  |     {0x050, "GPUREG_SH_OUTMAP_O0"}, | ||||||
|  |     {0x051, "GPUREG_SH_OUTMAP_O1"}, | ||||||
|  |     {0x052, "GPUREG_SH_OUTMAP_O2"}, | ||||||
|  |     {0x053, "GPUREG_SH_OUTMAP_O3"}, | ||||||
|  |     {0x054, "GPUREG_SH_OUTMAP_O4"}, | ||||||
|  |     {0x055, "GPUREG_SH_OUTMAP_O5"}, | ||||||
|  |     {0x056, "GPUREG_SH_OUTMAP_O6"}, | ||||||
|  |  | ||||||
|  |     {0x061, "GPUREG_EARLYDEPTH_FUNC"}, | ||||||
|  |     {0x062, "GPUREG_EARLYDEPTH_TEST1"}, | ||||||
|  |     {0x063, "GPUREG_EARLYDEPTH_CLEAR"}, | ||||||
|  |     {0x064, "GPUREG_SH_OUTATTR_MODE"}, | ||||||
|  |     {0x065, "GPUREG_SCISSORTEST_MODE"}, | ||||||
|  |     {0x066, "GPUREG_SCISSORTEST_POS"}, | ||||||
|  |     {0x067, "GPUREG_SCISSORTEST_DIM"}, | ||||||
|  |     {0x068, "GPUREG_VIEWPORT_XY"}, | ||||||
|  |  | ||||||
|  |     {0x06A, "GPUREG_EARLYDEPTH_DATA"}, | ||||||
|  |  | ||||||
|  |     {0x06D, "GPUREG_DEPTHMAP_ENABLE"}, | ||||||
|  |     {0x06E, "GPUREG_RENDERBUF_DIM"}, | ||||||
|  |     {0x06F, "GPUREG_SH_OUTATTR_CLOCK"}, | ||||||
|  |  | ||||||
|  |     {0x080, "GPUREG_TEXUNIT_CONFIG"}, | ||||||
|  |     {0x081, "GPUREG_TEXUNIT0_BORDER_COLOR"}, | ||||||
|  |     {0x082, "GPUREG_TEXUNIT0_DIM"}, | ||||||
|  |     {0x083, "GPUREG_TEXUNIT0_PARAM"}, | ||||||
|  |     {0x084, "GPUREG_TEXUNIT0_LOD"}, | ||||||
|  |     {0x085, "GPUREG_TEXUNIT0_ADDR1"}, | ||||||
|  |     {0x086, "GPUREG_TEXUNIT0_ADDR2"}, | ||||||
|  |     {0x087, "GPUREG_TEXUNIT0_ADDR3"}, | ||||||
|  |     {0x088, "GPUREG_TEXUNIT0_ADDR4"}, | ||||||
|  |     {0x089, "GPUREG_TEXUNIT0_ADDR5"}, | ||||||
|  |     {0x08A, "GPUREG_TEXUNIT0_ADDR6"}, | ||||||
|  |     {0x08B, "GPUREG_TEXUNIT0_SHADOW"}, | ||||||
|  |  | ||||||
|  |     {0x08E, "GPUREG_TEXUNIT0_TYPE"}, | ||||||
|  |     {0x08F, "GPUREG_LIGHTING_ENABLE0"}, | ||||||
|  |  | ||||||
|  |     {0x091, "GPUREG_TEXUNIT1_BORDER_COLOR"}, | ||||||
|  |     {0x092, "GPUREG_TEXUNIT1_DIM"}, | ||||||
|  |     {0x093, "GPUREG_TEXUNIT1_PARAM"}, | ||||||
|  |     {0x094, "GPUREG_TEXUNIT1_LOD"}, | ||||||
|  |     {0x095, "GPUREG_TEXUNIT1_ADDR"}, | ||||||
|  |     {0x096, "GPUREG_TEXUNIT1_TYPE"}, | ||||||
|  |  | ||||||
|  |     {0x099, "GPUREG_TEXUNIT2_BORDER_COLOR"}, | ||||||
|  |     {0x09A, "GPUREG_TEXUNIT2_DIM"}, | ||||||
|  |     {0x09B, "GPUREG_TEXUNIT2_PARAM"}, | ||||||
|  |     {0x09C, "GPUREG_TEXUNIT2_LOD"}, | ||||||
|  |     {0x09D, "GPUREG_TEXUNIT2_ADDR"}, | ||||||
|  |     {0x09E, "GPUREG_TEXUNIT2_TYPE"}, | ||||||
|  |  | ||||||
|  |     {0x0A8, "GPUREG_TEXUNIT3_PROCTEX0"}, | ||||||
|  |     {0x0A9, "GPUREG_TEXUNIT3_PROCTEX1"}, | ||||||
|  |     {0x0AA, "GPUREG_TEXUNIT3_PROCTEX2"}, | ||||||
|  |     {0x0AB, "GPUREG_TEXUNIT3_PROCTEX3"}, | ||||||
|  |     {0x0AC, "GPUREG_TEXUNIT3_PROCTEX4"}, | ||||||
|  |     {0x0AD, "GPUREG_TEXUNIT3_PROCTEX5"}, | ||||||
|  |  | ||||||
|  |     {0x0AF, "GPUREG_PROCTEX_LUT"}, | ||||||
|  |     {0x0B0, "GPUREG_PROCTEX_LUT_DATA0"}, | ||||||
|  |     {0x0B1, "GPUREG_PROCTEX_LUT_DATA1"}, | ||||||
|  |     {0x0B2, "GPUREG_PROCTEX_LUT_DATA2"}, | ||||||
|  |     {0x0B3, "GPUREG_PROCTEX_LUT_DATA3"}, | ||||||
|  |     {0x0B4, "GPUREG_PROCTEX_LUT_DATA4"}, | ||||||
|  |     {0x0B5, "GPUREG_PROCTEX_LUT_DATA5"}, | ||||||
|  |     {0x0B6, "GPUREG_PROCTEX_LUT_DATA6"}, | ||||||
|  |     {0x0B7, "GPUREG_PROCTEX_LUT_DATA7"}, | ||||||
|  |  | ||||||
|  |     {0x0C0, "GPUREG_TEXENV0_SOURCE"}, | ||||||
|  |     {0x0C1, "GPUREG_TEXENV0_OPERAND"}, | ||||||
|  |     {0x0C2, "GPUREG_TEXENV0_COMBINER"}, | ||||||
|  |     {0x0C3, "GPUREG_TEXENV0_COLOR"}, | ||||||
|  |     {0x0C4, "GPUREG_TEXENV0_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x0C8, "GPUREG_TEXENV1_SOURCE"}, | ||||||
|  |     {0x0C9, "GPUREG_TEXENV1_OPERAND"}, | ||||||
|  |     {0x0CA, "GPUREG_TEXENV1_COMBINER"}, | ||||||
|  |     {0x0CB, "GPUREG_TEXENV1_COLOR"}, | ||||||
|  |     {0x0CC, "GPUREG_TEXENV1_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x0D0, "GPUREG_TEXENV2_SOURCE"}, | ||||||
|  |     {0x0D1, "GPUREG_TEXENV2_OPERAND"}, | ||||||
|  |     {0x0D2, "GPUREG_TEXENV2_COMBINER"}, | ||||||
|  |     {0x0D3, "GPUREG_TEXENV2_COLOR"}, | ||||||
|  |     {0x0D4, "GPUREG_TEXENV2_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x0D8, "GPUREG_TEXENV3_SOURCE"}, | ||||||
|  |     {0x0D9, "GPUREG_TEXENV3_OPERAND"}, | ||||||
|  |     {0x0DA, "GPUREG_TEXENV3_COMBINER"}, | ||||||
|  |     {0x0DB, "GPUREG_TEXENV3_COLOR"}, | ||||||
|  |     {0x0DC, "GPUREG_TEXENV3_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x0E0, "GPUREG_TEXENV_UPDATE_BUFFER"}, | ||||||
|  |     {0x0E1, "GPUREG_FOG_COLOR"}, | ||||||
|  |  | ||||||
|  |     {0x0E4, "GPUREG_GAS_ATTENUATION"}, | ||||||
|  |     {0x0E5, "GPUREG_GAS_ACCMAX"}, | ||||||
|  |     {0x0E6, "GPUREG_FOG_LUT_INDEX"}, | ||||||
|  |  | ||||||
|  |     {0x0E8, "GPUREG_FOG_LUT_DATA0"}, | ||||||
|  |     {0x0E9, "GPUREG_FOG_LUT_DATA1"}, | ||||||
|  |     {0x0EA, "GPUREG_FOG_LUT_DATA2"}, | ||||||
|  |     {0x0EB, "GPUREG_FOG_LUT_DATA3"}, | ||||||
|  |     {0x0EC, "GPUREG_FOG_LUT_DATA4"}, | ||||||
|  |     {0x0ED, "GPUREG_FOG_LUT_DATA5"}, | ||||||
|  |     {0x0EE, "GPUREG_FOG_LUT_DATA6"}, | ||||||
|  |     {0x0EF, "GPUREG_FOG_LUT_DATA7"}, | ||||||
|  |     {0x0F0, "GPUREG_TEXENV4_SOURCE"}, | ||||||
|  |     {0x0F1, "GPUREG_TEXENV4_OPERAND"}, | ||||||
|  |     {0x0F2, "GPUREG_TEXENV4_COMBINER"}, | ||||||
|  |     {0x0F3, "GPUREG_TEXENV4_COLOR"}, | ||||||
|  |     {0x0F4, "GPUREG_TEXENV4_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x0F8, "GPUREG_TEXENV5_SOURCE"}, | ||||||
|  |     {0x0F9, "GPUREG_TEXENV5_OPERAND"}, | ||||||
|  |     {0x0FA, "GPUREG_TEXENV5_COMBINER"}, | ||||||
|  |     {0x0FB, "GPUREG_TEXENV5_COLOR"}, | ||||||
|  |     {0x0FC, "GPUREG_TEXENV5_SCALE"}, | ||||||
|  |     {0x0FD, "GPUREG_TEXENV_BUFFER_COLOR"}, | ||||||
|  |  | ||||||
|  |     {0x100, "GPUREG_COLOR_OPERATION"}, | ||||||
|  |     {0x101, "GPUREG_BLEND_FUNC"}, | ||||||
|  |     {0x102, "GPUREG_LOGIC_OP"}, | ||||||
|  |     {0x103, "GPUREG_BLEND_COLOR"}, | ||||||
|  |     {0x104, "GPUREG_FRAGOP_ALPHA_TEST"}, | ||||||
|  |     {0x105, "GPUREG_STENCIL_TEST"}, | ||||||
|  |     {0x106, "GPUREG_STENCIL_OP"}, | ||||||
|  |     {0x107, "GPUREG_DEPTH_COLOR_MASK"}, | ||||||
|  |  | ||||||
|  |     {0x110, "GPUREG_FRAMEBUFFER_INVALIDATE"}, | ||||||
|  |     {0x111, "GPUREG_FRAMEBUFFER_FLUSH"}, | ||||||
|  |     {0x112, "GPUREG_COLORBUFFER_READ"}, | ||||||
|  |     {0x113, "GPUREG_COLORBUFFER_WRITE"}, | ||||||
|  |     {0x114, "GPUREG_DEPTHBUFFER_READ"}, | ||||||
|  |     {0x115, "GPUREG_DEPTHBUFFER_WRITE"}, | ||||||
|  |     {0x116, "GPUREG_DEPTHBUFFER_FORMAT"}, | ||||||
|  |     {0x117, "GPUREG_COLORBUFFER_FORMAT"}, | ||||||
|  |     {0x118, "GPUREG_EARLYDEPTH_TEST2"}, | ||||||
|  |  | ||||||
|  |     {0x11B, "GPUREG_FRAMEBUFFER_BLOCK32"}, | ||||||
|  |     {0x11C, "GPUREG_DEPTHBUFFER_LOC"}, | ||||||
|  |     {0x11D, "GPUREG_COLORBUFFER_LOC"}, | ||||||
|  |     {0x11E, "GPUREG_FRAMEBUFFER_DIM"}, | ||||||
|  |  | ||||||
|  |     {0x120, "GPUREG_GAS_LIGHT_XY"}, | ||||||
|  |     {0x121, "GPUREG_GAS_LIGHT_Z"}, | ||||||
|  |     {0x122, "GPUREG_GAS_LIGHT_Z_COLOR"}, | ||||||
|  |     {0x123, "GPUREG_GAS_LUT_INDEX"}, | ||||||
|  |     {0x124, "GPUREG_GAS_LUT_DATA"}, | ||||||
|  |  | ||||||
|  |     {0x126, "GPUREG_GAS_DELTAZ_DEPTH"}, | ||||||
|  |  | ||||||
|  |     {0x130, "GPUREG_FRAGOP_SHADOW"}, | ||||||
|  |  | ||||||
|  |     {0x140, "GPUREG_LIGHT0_SPECULAR0"}, | ||||||
|  |     {0x141, "GPUREG_LIGHT0_SPECULAR1"}, | ||||||
|  |     {0x142, "GPUREG_LIGHT0_DIFFUSE"}, | ||||||
|  |     {0x143, "GPUREG_LIGHT0_AMBIENT"}, | ||||||
|  |     {0x144, "GPUREG_LIGHT0_XY"}, | ||||||
|  |     {0x145, "GPUREG_LIGHT0_Z"}, | ||||||
|  |     {0x146, "GPUREG_LIGHT0_SPOTDIR_XY"}, | ||||||
|  |     {0x147, "GPUREG_LIGHT0_SPOTDIR_Z"}, | ||||||
|  |  | ||||||
|  |     {0x149, "GPUREG_LIGHT0_CONFIG"}, | ||||||
|  |     {0x14A, "GPUREG_LIGHT0_ATTENUATION_BIAS"}, | ||||||
|  |     {0x14B, "GPUREG_LIGHT0_ATTENUATION_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x150, "GPUREG_LIGHT1_SPECULAR0"}, | ||||||
|  |     {0x151, "GPUREG_LIGHT1_SPECULAR1"}, | ||||||
|  |     {0x152, "GPUREG_LIGHT1_DIFFUSE"}, | ||||||
|  |     {0x153, "GPUREG_LIGHT1_AMBIENT"}, | ||||||
|  |     {0x154, "GPUREG_LIGHT1_XY"}, | ||||||
|  |     {0x155, "GPUREG_LIGHT1_Z"}, | ||||||
|  |     {0x156, "GPUREG_LIGHT1_SPOTDIR_XY"}, | ||||||
|  |     {0x157, "GPUREG_LIGHT1_SPOTDIR_Z"}, | ||||||
|  |  | ||||||
|  |     {0x159, "GPUREG_LIGHT1_CONFIG"}, | ||||||
|  |     {0x15A, "GPUREG_LIGHT1_ATTENUATION_BIAS"}, | ||||||
|  |     {0x15B, "GPUREG_LIGHT1_ATTENUATION_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x160, "GPUREG_LIGHT2_SPECULAR0"}, | ||||||
|  |     {0x161, "GPUREG_LIGHT2_SPECULAR1"}, | ||||||
|  |     {0x162, "GPUREG_LIGHT2_DIFFUSE"}, | ||||||
|  |     {0x163, "GPUREG_LIGHT2_AMBIENT"}, | ||||||
|  |     {0x164, "GPUREG_LIGHT2_XY"}, | ||||||
|  |     {0x165, "GPUREG_LIGHT2_Z"}, | ||||||
|  |     {0x166, "GPUREG_LIGHT2_SPOTDIR_XY"}, | ||||||
|  |     {0x167, "GPUREG_LIGHT2_SPOTDIR_Z"}, | ||||||
|  |  | ||||||
|  |     {0x169, "GPUREG_LIGHT2_CONFIG"}, | ||||||
|  |     {0x16A, "GPUREG_LIGHT2_ATTENUATION_BIAS"}, | ||||||
|  |     {0x16B, "GPUREG_LIGHT2_ATTENUATION_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x170, "GPUREG_LIGHT3_SPECULAR0"}, | ||||||
|  |     {0x171, "GPUREG_LIGHT3_SPECULAR1"}, | ||||||
|  |     {0x172, "GPUREG_LIGHT3_DIFFUSE"}, | ||||||
|  |     {0x173, "GPUREG_LIGHT3_AMBIENT"}, | ||||||
|  |     {0x174, "GPUREG_LIGHT3_XY"}, | ||||||
|  |     {0x175, "GPUREG_LIGHT3_Z"}, | ||||||
|  |     {0x176, "GPUREG_LIGHT3_SPOTDIR_XY"}, | ||||||
|  |     {0x177, "GPUREG_LIGHT3_SPOTDIR_Z"}, | ||||||
|  |  | ||||||
|  |     {0x179, "GPUREG_LIGHT3_CONFIG"}, | ||||||
|  |     {0x17A, "GPUREG_LIGHT3_ATTENUATION_BIAS"}, | ||||||
|  |     {0x17B, "GPUREG_LIGHT3_ATTENUATION_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x180, "GPUREG_LIGHT4_SPECULAR0"}, | ||||||
|  |     {0x181, "GPUREG_LIGHT4_SPECULAR1"}, | ||||||
|  |     {0x182, "GPUREG_LIGHT4_DIFFUSE"}, | ||||||
|  |     {0x183, "GPUREG_LIGHT4_AMBIENT"}, | ||||||
|  |     {0x184, "GPUREG_LIGHT4_XY"}, | ||||||
|  |     {0x185, "GPUREG_LIGHT4_Z"}, | ||||||
|  |     {0x186, "GPUREG_LIGHT4_SPOTDIR_XY"}, | ||||||
|  |     {0x187, "GPUREG_LIGHT4_SPOTDIR_Z"}, | ||||||
|  |  | ||||||
|  |     {0x189, "GPUREG_LIGHT4_CONFIG"}, | ||||||
|  |     {0x18A, "GPUREG_LIGHT4_ATTENUATION_BIAS"}, | ||||||
|  |     {0x18B, "GPUREG_LIGHT4_ATTENUATION_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x190, "GPUREG_LIGHT5_SPECULAR0"}, | ||||||
|  |     {0x191, "GPUREG_LIGHT5_SPECULAR1"}, | ||||||
|  |     {0x192, "GPUREG_LIGHT5_DIFFUSE"}, | ||||||
|  |     {0x193, "GPUREG_LIGHT5_AMBIENT"}, | ||||||
|  |     {0x194, "GPUREG_LIGHT5_XY"}, | ||||||
|  |     {0x195, "GPUREG_LIGHT5_Z"}, | ||||||
|  |     {0x196, "GPUREG_LIGHT5_SPOTDIR_XY"}, | ||||||
|  |     {0x197, "GPUREG_LIGHT5_SPOTDIR_Z"}, | ||||||
|  |  | ||||||
|  |     {0x199, "GPUREG_LIGHT5_CONFIG"}, | ||||||
|  |     {0x19A, "GPUREG_LIGHT5_ATTENUATION_BIAS"}, | ||||||
|  |     {0x19B, "GPUREG_LIGHT5_ATTENUATION_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x1A0, "GPUREG_LIGHT6_SPECULAR0"}, | ||||||
|  |     {0x1A1, "GPUREG_LIGHT6_SPECULAR1"}, | ||||||
|  |     {0x1A2, "GPUREG_LIGHT6_DIFFUSE"}, | ||||||
|  |     {0x1A3, "GPUREG_LIGHT6_AMBIENT"}, | ||||||
|  |     {0x1A4, "GPUREG_LIGHT6_XY"}, | ||||||
|  |     {0x1A5, "GPUREG_LIGHT6_Z"}, | ||||||
|  |     {0x1A6, "GPUREG_LIGHT6_SPOTDIR_XY"}, | ||||||
|  |     {0x1A7, "GPUREG_LIGHT6_SPOTDIR_Z"}, | ||||||
|  |  | ||||||
|  |     {0x1A9, "GPUREG_LIGHT6_CONFIG"}, | ||||||
|  |     {0x1AA, "GPUREG_LIGHT6_ATTENUATION_BIAS"}, | ||||||
|  |     {0x1AB, "GPUREG_LIGHT6_ATTENUATION_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x1B0, "GPUREG_LIGHT7_SPECULAR0"}, | ||||||
|  |     {0x1B1, "GPUREG_LIGHT7_SPECULAR1"}, | ||||||
|  |     {0x1B2, "GPUREG_LIGHT7_DIFFUSE"}, | ||||||
|  |     {0x1B3, "GPUREG_LIGHT7_AMBIENT"}, | ||||||
|  |     {0x1B4, "GPUREG_LIGHT7_XY"}, | ||||||
|  |     {0x1B5, "GPUREG_LIGHT7_Z"}, | ||||||
|  |     {0x1B6, "GPUREG_LIGHT7_SPOTDIR_XY"}, | ||||||
|  |     {0x1B7, "GPUREG_LIGHT7_SPOTDIR_Z"}, | ||||||
|  |  | ||||||
|  |     {0x1B9, "GPUREG_LIGHT7_CONFIG"}, | ||||||
|  |     {0x1BA, "GPUREG_LIGHT7_ATTENUATION_BIAS"}, | ||||||
|  |     {0x1BB, "GPUREG_LIGHT7_ATTENUATION_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x1C0, "GPUREG_LIGHTING_AMBIENT"}, | ||||||
|  |  | ||||||
|  |     {0x1C2, "GPUREG_LIGHTING_NUM_LIGHTS"}, | ||||||
|  |     {0x1C3, "GPUREG_LIGHTING_CONFIG0"}, | ||||||
|  |     {0x1C4, "GPUREG_LIGHTING_CONFIG1"}, | ||||||
|  |     {0x1C5, "GPUREG_LIGHTING_LUT_INDEX"}, | ||||||
|  |     {0x1C6, "GPUREG_LIGHTING_ENABLE1"}, | ||||||
|  |  | ||||||
|  |     {0x1C8, "GPUREG_LIGHTING_LUT_DATA0"}, | ||||||
|  |     {0x1C9, "GPUREG_LIGHTING_LUT_DATA1"}, | ||||||
|  |     {0x1CA, "GPUREG_LIGHTING_LUT_DATA2"}, | ||||||
|  |     {0x1CB, "GPUREG_LIGHTING_LUT_DATA3"}, | ||||||
|  |     {0x1CC, "GPUREG_LIGHTING_LUT_DATA4"}, | ||||||
|  |     {0x1CD, "GPUREG_LIGHTING_LUT_DATA5"}, | ||||||
|  |     {0x1CE, "GPUREG_LIGHTING_LUT_DATA6"}, | ||||||
|  |     {0x1CF, "GPUREG_LIGHTING_LUT_DATA7"}, | ||||||
|  |     {0x1D0, "GPUREG_LIGHTING_LUTINPUT_ABS"}, | ||||||
|  |     {0x1D1, "GPUREG_LIGHTING_LUTINPUT_SELECT"}, | ||||||
|  |     {0x1D2, "GPUREG_LIGHTING_LUTINPUT_SCALE"}, | ||||||
|  |  | ||||||
|  |     {0x1D9, "GPUREG_LIGHTING_LIGHT_PERMUTATION"}, | ||||||
|  |  | ||||||
|  |     {0x200, "GPUREG_ATTRIBBUFFERS_LOC"}, | ||||||
|  |     {0x201, "GPUREG_ATTRIBBUFFERS_FORMAT_LOW"}, | ||||||
|  |     {0x202, "GPUREG_ATTRIBBUFFERS_FORMAT_HIGH"}, | ||||||
|  |     {0x203, "GPUREG_ATTRIBBUFFER0_OFFSET"}, | ||||||
|  |     {0x204, "GPUREG_ATTRIBBUFFER0_CONFIG1"}, | ||||||
|  |     {0x205, "GPUREG_ATTRIBBUFFER0_CONFIG2"}, | ||||||
|  |     {0x206, "GPUREG_ATTRIBBUFFER1_OFFSET"}, | ||||||
|  |     {0x207, "GPUREG_ATTRIBBUFFER1_CONFIG1"}, | ||||||
|  |     {0x208, "GPUREG_ATTRIBBUFFER1_CONFIG2"}, | ||||||
|  |     {0x209, "GPUREG_ATTRIBBUFFER2_OFFSET"}, | ||||||
|  |     {0x20A, "GPUREG_ATTRIBBUFFER2_CONFIG1"}, | ||||||
|  |     {0x20B, "GPUREG_ATTRIBBUFFER2_CONFIG2"}, | ||||||
|  |     {0x20C, "GPUREG_ATTRIBBUFFER3_OFFSET"}, | ||||||
|  |     {0x20D, "GPUREG_ATTRIBBUFFER3_CONFIG1"}, | ||||||
|  |     {0x20E, "GPUREG_ATTRIBBUFFER3_CONFIG2"}, | ||||||
|  |     {0x20F, "GPUREG_ATTRIBBUFFER4_OFFSET"}, | ||||||
|  |     {0x210, "GPUREG_ATTRIBBUFFER4_CONFIG1"}, | ||||||
|  |     {0x211, "GPUREG_ATTRIBBUFFER4_CONFIG2"}, | ||||||
|  |     {0x212, "GPUREG_ATTRIBBUFFER5_OFFSET"}, | ||||||
|  |     {0x213, "GPUREG_ATTRIBBUFFER5_CONFIG1"}, | ||||||
|  |     {0x214, "GPUREG_ATTRIBBUFFER5_CONFIG2"}, | ||||||
|  |     {0x215, "GPUREG_ATTRIBBUFFER6_OFFSET"}, | ||||||
|  |     {0x216, "GPUREG_ATTRIBBUFFER6_CONFIG1"}, | ||||||
|  |     {0x217, "GPUREG_ATTRIBBUFFER6_CONFIG2"}, | ||||||
|  |     {0x218, "GPUREG_ATTRIBBUFFER7_OFFSET"}, | ||||||
|  |     {0x219, "GPUREG_ATTRIBBUFFER7_CONFIG1"}, | ||||||
|  |     {0x21A, "GPUREG_ATTRIBBUFFER7_CONFIG2"}, | ||||||
|  |     {0x21B, "GPUREG_ATTRIBBUFFER8_OFFSET"}, | ||||||
|  |     {0x21C, "GPUREG_ATTRIBBUFFER8_CONFIG1"}, | ||||||
|  |     {0x21D, "GPUREG_ATTRIBBUFFER8_CONFIG2"}, | ||||||
|  |     {0x21E, "GPUREG_ATTRIBBUFFER9_OFFSET"}, | ||||||
|  |     {0x21F, "GPUREG_ATTRIBBUFFER9_CONFIG1"}, | ||||||
|  |     {0x220, "GPUREG_ATTRIBBUFFER9_CONFIG2"}, | ||||||
|  |     {0x221, "GPUREG_ATTRIBBUFFER10_OFFSET"}, | ||||||
|  |     {0x222, "GPUREG_ATTRIBBUFFER10_CONFIG1"}, | ||||||
|  |     {0x223, "GPUREG_ATTRIBBUFFER10_CONFIG2"}, | ||||||
|  |     {0x224, "GPUREG_ATTRIBBUFFER11_OFFSET"}, | ||||||
|  |     {0x225, "GPUREG_ATTRIBBUFFER11_CONFIG1"}, | ||||||
|  |     {0x226, "GPUREG_ATTRIBBUFFER11_CONFIG2"}, | ||||||
|  |     {0x227, "GPUREG_INDEXBUFFER_CONFIG"}, | ||||||
|  |     {0x228, "GPUREG_NUMVERTICES"}, | ||||||
|  |     {0x229, "GPUREG_GEOSTAGE_CONFIG"}, | ||||||
|  |     {0x22A, "GPUREG_VERTEX_OFFSET"}, | ||||||
|  |  | ||||||
|  |     {0x22D, "GPUREG_POST_VERTEX_CACHE_NUM"}, | ||||||
|  |     {0x22E, "GPUREG_DRAWARRAYS"}, | ||||||
|  |     {0x22F, "GPUREG_DRAWELEMENTS"}, | ||||||
|  |  | ||||||
|  |     {0x231, "GPUREG_VTX_FUNC"}, | ||||||
|  |     {0x232, "GPUREG_FIXEDATTRIB_INDEX"}, | ||||||
|  |     {0x233, "GPUREG_FIXEDATTRIB_DATA0"}, | ||||||
|  |     {0x234, "GPUREG_FIXEDATTRIB_DATA1"}, | ||||||
|  |     {0x235, "GPUREG_FIXEDATTRIB_DATA2"}, | ||||||
|  |  | ||||||
|  |     {0x238, "GPUREG_CMDBUF_SIZE0"}, | ||||||
|  |     {0x239, "GPUREG_CMDBUF_SIZE1"}, | ||||||
|  |     {0x23A, "GPUREG_CMDBUF_ADDR0"}, | ||||||
|  |     {0x23B, "GPUREG_CMDBUF_ADDR1"}, | ||||||
|  |     {0x23C, "GPUREG_CMDBUF_JUMP0"}, | ||||||
|  |     {0x23D, "GPUREG_CMDBUF_JUMP1"}, | ||||||
|  |  | ||||||
|  |     {0x242, "GPUREG_VSH_NUM_ATTR"}, | ||||||
|  |  | ||||||
|  |     {0x244, "GPUREG_VSH_COM_MODE"}, | ||||||
|  |     {0x245, "GPUREG_START_DRAW_FUNC0"}, | ||||||
|  |  | ||||||
|  |     {0x24A, "GPUREG_VSH_OUTMAP_TOTAL1"}, | ||||||
|  |  | ||||||
|  |     {0x251, "GPUREG_VSH_OUTMAP_TOTAL2"}, | ||||||
|  |     {0x252, "GPUREG_GSH_MISC0"}, | ||||||
|  |     {0x253, "GPUREG_GEOSTAGE_CONFIG2"}, | ||||||
|  |     {0x254, "GPUREG_GSH_MISC1"}, | ||||||
|  |  | ||||||
|  |     {0x25E, "GPUREG_PRIMITIVE_CONFIG"}, | ||||||
|  |     {0x25F, "GPUREG_RESTART_PRIMITIVE"}, | ||||||
|  |  | ||||||
|  |     {0x280, "GPUREG_GSH_BOOLUNIFORM"}, | ||||||
|  |     {0x281, "GPUREG_GSH_INTUNIFORM_I0"}, | ||||||
|  |     {0x282, "GPUREG_GSH_INTUNIFORM_I1"}, | ||||||
|  |     {0x283, "GPUREG_GSH_INTUNIFORM_I2"}, | ||||||
|  |     {0x284, "GPUREG_GSH_INTUNIFORM_I3"}, | ||||||
|  |  | ||||||
|  |     {0x289, "GPUREG_GSH_INPUTBUFFER_CONFIG"}, | ||||||
|  |     {0x28A, "GPUREG_GSH_ENTRYPOINT"}, | ||||||
|  |     {0x28B, "GPUREG_GSH_ATTRIBUTES_PERMUTATION_LOW"}, | ||||||
|  |     {0x28C, "GPUREG_GSH_ATTRIBUTES_PERMUTATION_HIGH"}, | ||||||
|  |     {0x28D, "GPUREG_GSH_OUTMAP_MASK"}, | ||||||
|  |  | ||||||
|  |     {0x28F, "GPUREG_GSH_CODETRANSFER_END"}, | ||||||
|  |     {0x290, "GPUREG_GSH_FLOATUNIFORM_INDEX"}, | ||||||
|  |     {0x291, "GPUREG_GSH_FLOATUNIFORM_DATA0"}, | ||||||
|  |     {0x292, "GPUREG_GSH_FLOATUNIFORM_DATA1"}, | ||||||
|  |     {0x293, "GPUREG_GSH_FLOATUNIFORM_DATA2"}, | ||||||
|  |     {0x294, "GPUREG_GSH_FLOATUNIFORM_DATA3"}, | ||||||
|  |     {0x295, "GPUREG_GSH_FLOATUNIFORM_DATA4"}, | ||||||
|  |     {0x296, "GPUREG_GSH_FLOATUNIFORM_DATA5"}, | ||||||
|  |     {0x297, "GPUREG_GSH_FLOATUNIFORM_DATA6"}, | ||||||
|  |     {0x298, "GPUREG_GSH_FLOATUNIFORM_DATA7"}, | ||||||
|  |  | ||||||
|  |     {0x29B, "GPUREG_GSH_CODETRANSFER_INDEX"}, | ||||||
|  |     {0x29C, "GPUREG_GSH_CODETRANSFER_DATA0"}, | ||||||
|  |     {0x29D, "GPUREG_GSH_CODETRANSFER_DATA1"}, | ||||||
|  |     {0x29E, "GPUREG_GSH_CODETRANSFER_DATA2"}, | ||||||
|  |     {0x29F, "GPUREG_GSH_CODETRANSFER_DATA3"}, | ||||||
|  |     {0x2A0, "GPUREG_GSH_CODETRANSFER_DATA4"}, | ||||||
|  |     {0x2A1, "GPUREG_GSH_CODETRANSFER_DATA5"}, | ||||||
|  |     {0x2A2, "GPUREG_GSH_CODETRANSFER_DATA6"}, | ||||||
|  |     {0x2A3, "GPUREG_GSH_CODETRANSFER_DATA7"}, | ||||||
|  |  | ||||||
|  |     {0x2A5, "GPUREG_GSH_OPDESCS_INDEX"}, | ||||||
|  |     {0x2A6, "GPUREG_GSH_OPDESCS_DATA0"}, | ||||||
|  |     {0x2A7, "GPUREG_GSH_OPDESCS_DATA1"}, | ||||||
|  |     {0x2A8, "GPUREG_GSH_OPDESCS_DATA2"}, | ||||||
|  |     {0x2A9, "GPUREG_GSH_OPDESCS_DATA3"}, | ||||||
|  |     {0x2AA, "GPUREG_GSH_OPDESCS_DATA4"}, | ||||||
|  |     {0x2AB, "GPUREG_GSH_OPDESCS_DATA5"}, | ||||||
|  |     {0x2AC, "GPUREG_GSH_OPDESCS_DATA6"}, | ||||||
|  |     {0x2AD, "GPUREG_GSH_OPDESCS_DATA7"}, | ||||||
|  |  | ||||||
|  |     {0x2B0, "GPUREG_VSH_BOOLUNIFORM"}, | ||||||
|  |     {0x2B1, "GPUREG_VSH_INTUNIFORM_I0"}, | ||||||
|  |     {0x2B2, "GPUREG_VSH_INTUNIFORM_I1"}, | ||||||
|  |     {0x2B3, "GPUREG_VSH_INTUNIFORM_I2"}, | ||||||
|  |     {0x2B4, "GPUREG_VSH_INTUNIFORM_I3"}, | ||||||
|  |  | ||||||
|  |     {0x2B9, "GPUREG_VSH_INPUTBUFFER_CONFIG"}, | ||||||
|  |     {0x2BA, "GPUREG_VSH_ENTRYPOINT"}, | ||||||
|  |     {0x2BB, "GPUREG_VSH_ATTRIBUTES_PERMUTATION_LOW"}, | ||||||
|  |     {0x2BC, "GPUREG_VSH_ATTRIBUTES_PERMUTATION_HIGH"}, | ||||||
|  |     {0x2BD, "GPUREG_VSH_OUTMAP_MASK"}, | ||||||
|  |  | ||||||
|  |     {0x2BF, "GPUREG_VSH_CODETRANSFER_END"}, | ||||||
|  |     {0x2C0, "GPUREG_VSH_FLOATUNIFORM_INDEX"}, | ||||||
|  |     {0x2C1, "GPUREG_VSH_FLOATUNIFORM_DATA0"}, | ||||||
|  |     {0x2C2, "GPUREG_VSH_FLOATUNIFORM_DATA1"}, | ||||||
|  |     {0x2C3, "GPUREG_VSH_FLOATUNIFORM_DATA2"}, | ||||||
|  |     {0x2C4, "GPUREG_VSH_FLOATUNIFORM_DATA3"}, | ||||||
|  |     {0x2C5, "GPUREG_VSH_FLOATUNIFORM_DATA4"}, | ||||||
|  |     {0x2C6, "GPUREG_VSH_FLOATUNIFORM_DATA5"}, | ||||||
|  |     {0x2C7, "GPUREG_VSH_FLOATUNIFORM_DATA6"}, | ||||||
|  |     {0x2C8, "GPUREG_VSH_FLOATUNIFORM_DATA7"}, | ||||||
|  |  | ||||||
|  |     {0x2CB, "GPUREG_VSH_CODETRANSFER_INDEX"}, | ||||||
|  |     {0x2CC, "GPUREG_VSH_CODETRANSFER_DATA0"}, | ||||||
|  |     {0x2CD, "GPUREG_VSH_CODETRANSFER_DATA1"}, | ||||||
|  |     {0x2CE, "GPUREG_VSH_CODETRANSFER_DATA2"}, | ||||||
|  |     {0x2CF, "GPUREG_VSH_CODETRANSFER_DATA3"}, | ||||||
|  |     {0x2D0, "GPUREG_VSH_CODETRANSFER_DATA4"}, | ||||||
|  |     {0x2D1, "GPUREG_VSH_CODETRANSFER_DATA5"}, | ||||||
|  |     {0x2D2, "GPUREG_VSH_CODETRANSFER_DATA6"}, | ||||||
|  |     {0x2D3, "GPUREG_VSH_CODETRANSFER_DATA7"}, | ||||||
|  |  | ||||||
|  |     {0x2D5, "GPUREG_VSH_OPDESCS_INDEX"}, | ||||||
|  |     {0x2D6, "GPUREG_VSH_OPDESCS_DATA0"}, | ||||||
|  |     {0x2D7, "GPUREG_VSH_OPDESCS_DATA1"}, | ||||||
|  |     {0x2D8, "GPUREG_VSH_OPDESCS_DATA2"}, | ||||||
|  |     {0x2D9, "GPUREG_VSH_OPDESCS_DATA3"}, | ||||||
|  |     {0x2DA, "GPUREG_VSH_OPDESCS_DATA4"}, | ||||||
|  |     {0x2DB, "GPUREG_VSH_OPDESCS_DATA5"}, | ||||||
|  |     {0x2DC, "GPUREG_VSH_OPDESCS_DATA6"}, | ||||||
|  |     {0x2DD, "GPUREG_VSH_OPDESCS_DATA7"}, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | std::string Regs::GetCommandName(int index) { | ||||||
|  |     static std::unordered_map<u32, const char*> map; | ||||||
|  |  | ||||||
|  |     if (map.empty()) { | ||||||
|  |         map.insert(std::begin(register_names), std::end(register_names)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Return empty string if no match is found | ||||||
|  |     auto it = map.find(index); | ||||||
|  |     if (it != map.end()) { | ||||||
|  |         return it->second; | ||||||
|  |     } else { | ||||||
|  |         return std::string(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } // namespace Pica | ||||||
							
								
								
									
										164
									
								
								src/video_core/regs.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								src/video_core/regs.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,164 @@ | |||||||
|  | // Copyright 2017 Citra Emulator Project | ||||||
|  | // Licensed under GPLv2 or any later version | ||||||
|  | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include <array> | ||||||
|  | #include <cstddef> | ||||||
|  | #include <string> | ||||||
|  | #ifndef _MSC_VER | ||||||
|  | #include <type_traits> // for std::enable_if | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #include "common/common_funcs.h" | ||||||
|  | #include "common/common_types.h" | ||||||
|  | #include "video_core/regs_framebuffer.h" | ||||||
|  | #include "video_core/regs_lighting.h" | ||||||
|  | #include "video_core/regs_pipeline.h" | ||||||
|  | #include "video_core/regs_rasterizer.h" | ||||||
|  | #include "video_core/regs_shader.h" | ||||||
|  | #include "video_core/regs_texturing.h" | ||||||
|  |  | ||||||
|  | namespace Pica { | ||||||
|  |  | ||||||
|  | // Returns index corresponding to the Regs member labeled by field_name | ||||||
|  | // TODO: Due to Visual studio bug 209229, offsetof does not return constant expressions | ||||||
|  | //       when used with array elements (e.g. PICA_REG_INDEX(vs_uniform_setup.set_value[1])). | ||||||
|  | //       For details cf. | ||||||
|  | //       https://connect.microsoft.com/VisualStudio/feedback/details/209229/offsetof-does-not-produce-a-constant-expression-for-array-members | ||||||
|  | //       Hopefully, this will be fixed sometime in the future. | ||||||
|  | //       For lack of better alternatives, we currently hardcode the offsets when constant | ||||||
|  | //       expressions are needed via PICA_REG_INDEX_WORKAROUND (on sane compilers, static_asserts | ||||||
|  | //       will then make sure the offsets indeed match the automatically calculated ones). | ||||||
|  | #define PICA_REG_INDEX(field_name) (offsetof(Pica::Regs, field_name) / sizeof(u32)) | ||||||
|  | #if defined(_MSC_VER) | ||||||
|  | #define PICA_REG_INDEX_WORKAROUND(field_name, backup_workaround_index) (backup_workaround_index) | ||||||
|  | #else | ||||||
|  | // NOTE: Yeah, hacking in a static_assert here just to workaround the lacking MSVC compiler | ||||||
|  | //       really is this annoying. This macro just forwards its first argument to PICA_REG_INDEX | ||||||
|  | //       and then performs a (no-op) cast to size_t iff the second argument matches the expected | ||||||
|  | //       field offset. Otherwise, the compiler will fail to compile this code. | ||||||
|  | #define PICA_REG_INDEX_WORKAROUND(field_name, backup_workaround_index)                             \ | ||||||
|  |     ((typename std::enable_if<backup_workaround_index == PICA_REG_INDEX(field_name),               \ | ||||||
|  |                               size_t>::type)PICA_REG_INDEX(field_name)) | ||||||
|  | #endif // _MSC_VER | ||||||
|  |  | ||||||
|  | struct Regs { | ||||||
|  |     INSERT_PADDING_WORDS(0x10); | ||||||
|  |     u32 trigger_irq; | ||||||
|  |     INSERT_PADDING_WORDS(0x2f); | ||||||
|  |     RasterizerRegs rasterizer; | ||||||
|  |     TexturingRegs texturing; | ||||||
|  |     FramebufferRegs framebuffer; | ||||||
|  |     LightingRegs lighting; | ||||||
|  |     PipelineRegs pipeline; | ||||||
|  |     ShaderRegs gs; | ||||||
|  |     ShaderRegs vs; | ||||||
|  |     INSERT_PADDING_WORDS(0x20); | ||||||
|  |  | ||||||
|  |     // Map register indices to names readable by humans | ||||||
|  |     // Used for debugging purposes, so performance is not an issue here | ||||||
|  |     static std::string GetCommandName(int index); | ||||||
|  |  | ||||||
|  |     static constexpr size_t NumIds() { | ||||||
|  |         return sizeof(Regs) / sizeof(u32); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     const u32& operator[](int index) const { | ||||||
|  |         const u32* content = reinterpret_cast<const u32*>(this); | ||||||
|  |         return content[index]; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     u32& operator[](int index) { | ||||||
|  |         u32* content = reinterpret_cast<u32*>(this); | ||||||
|  |         return content[index]; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     /* | ||||||
|  |     * Most physical addresses which Pica registers refer to are 8-byte aligned. | ||||||
|  |     * This function should be used to get the address from a raw register value. | ||||||
|  |     */ | ||||||
|  |     static inline u32 DecodeAddressRegister(u32 register_value) { | ||||||
|  |         return register_value * 8; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | // TODO: MSVC does not support using offsetof() on non-static data members even though this | ||||||
|  | //       is technically allowed since C++11. This macro should be enabled once MSVC adds | ||||||
|  | //       support for that. | ||||||
|  | #ifndef _MSC_VER | ||||||
|  | #define ASSERT_REG_POSITION(field_name, position)                                                  \ | ||||||
|  |     static_assert(offsetof(Regs, field_name) == position * 4,                                      \ | ||||||
|  |                   "Field " #field_name " has invalid position") | ||||||
|  |  | ||||||
|  | ASSERT_REG_POSITION(trigger_irq, 0x10); | ||||||
|  |  | ||||||
|  | ASSERT_REG_POSITION(rasterizer, 0x40); | ||||||
|  | ASSERT_REG_POSITION(rasterizer.cull_mode, 0x40); | ||||||
|  | ASSERT_REG_POSITION(rasterizer.viewport_size_x, 0x41); | ||||||
|  | ASSERT_REG_POSITION(rasterizer.viewport_size_y, 0x43); | ||||||
|  | ASSERT_REG_POSITION(rasterizer.viewport_depth_range, 0x4d); | ||||||
|  | ASSERT_REG_POSITION(rasterizer.viewport_depth_near_plane, 0x4e); | ||||||
|  | ASSERT_REG_POSITION(rasterizer.vs_output_attributes[0], 0x50); | ||||||
|  | ASSERT_REG_POSITION(rasterizer.vs_output_attributes[1], 0x51); | ||||||
|  | ASSERT_REG_POSITION(rasterizer.scissor_test, 0x65); | ||||||
|  | ASSERT_REG_POSITION(rasterizer.viewport_corner, 0x68); | ||||||
|  | ASSERT_REG_POSITION(rasterizer.depthmap_enable, 0x6D); | ||||||
|  |  | ||||||
|  | ASSERT_REG_POSITION(texturing, 0x80); | ||||||
|  | ASSERT_REG_POSITION(texturing.texture0_enable, 0x80); | ||||||
|  | ASSERT_REG_POSITION(texturing.texture0, 0x81); | ||||||
|  | ASSERT_REG_POSITION(texturing.texture0_format, 0x8e); | ||||||
|  | ASSERT_REG_POSITION(texturing.fragment_lighting_enable, 0x8f); | ||||||
|  | ASSERT_REG_POSITION(texturing.texture1, 0x91); | ||||||
|  | ASSERT_REG_POSITION(texturing.texture1_format, 0x96); | ||||||
|  | ASSERT_REG_POSITION(texturing.texture2, 0x99); | ||||||
|  | ASSERT_REG_POSITION(texturing.texture2_format, 0x9e); | ||||||
|  | ASSERT_REG_POSITION(texturing.tev_stage0, 0xc0); | ||||||
|  | ASSERT_REG_POSITION(texturing.tev_stage1, 0xc8); | ||||||
|  | ASSERT_REG_POSITION(texturing.tev_stage2, 0xd0); | ||||||
|  | ASSERT_REG_POSITION(texturing.tev_stage3, 0xd8); | ||||||
|  | ASSERT_REG_POSITION(texturing.tev_combiner_buffer_input, 0xe0); | ||||||
|  | ASSERT_REG_POSITION(texturing.fog_mode, 0xe0); | ||||||
|  | ASSERT_REG_POSITION(texturing.fog_color, 0xe1); | ||||||
|  | ASSERT_REG_POSITION(texturing.fog_lut_offset, 0xe6); | ||||||
|  | ASSERT_REG_POSITION(texturing.fog_lut_data, 0xe8); | ||||||
|  | ASSERT_REG_POSITION(texturing.tev_stage4, 0xf0); | ||||||
|  | ASSERT_REG_POSITION(texturing.tev_stage5, 0xf8); | ||||||
|  | ASSERT_REG_POSITION(texturing.tev_combiner_buffer_color, 0xfd); | ||||||
|  |  | ||||||
|  | ASSERT_REG_POSITION(framebuffer, 0x100); | ||||||
|  | ASSERT_REG_POSITION(framebuffer.output_merger, 0x100); | ||||||
|  | ASSERT_REG_POSITION(framebuffer.framebuffer, 0x110); | ||||||
|  |  | ||||||
|  | ASSERT_REG_POSITION(lighting, 0x140); | ||||||
|  |  | ||||||
|  | ASSERT_REG_POSITION(pipeline, 0x200); | ||||||
|  | ASSERT_REG_POSITION(pipeline.vertex_attributes, 0x200); | ||||||
|  | ASSERT_REG_POSITION(pipeline.index_array, 0x227); | ||||||
|  | ASSERT_REG_POSITION(pipeline.num_vertices, 0x228); | ||||||
|  | ASSERT_REG_POSITION(pipeline.vertex_offset, 0x22a); | ||||||
|  | ASSERT_REG_POSITION(pipeline.trigger_draw, 0x22e); | ||||||
|  | ASSERT_REG_POSITION(pipeline.trigger_draw_indexed, 0x22f); | ||||||
|  | ASSERT_REG_POSITION(pipeline.vs_default_attributes_setup, 0x232); | ||||||
|  | ASSERT_REG_POSITION(pipeline.command_buffer, 0x238); | ||||||
|  | ASSERT_REG_POSITION(pipeline.gpu_mode, 0x245); | ||||||
|  | ASSERT_REG_POSITION(pipeline.triangle_topology, 0x25e); | ||||||
|  | ASSERT_REG_POSITION(pipeline.restart_primitive, 0x25f); | ||||||
|  |  | ||||||
|  | ASSERT_REG_POSITION(gs, 0x280); | ||||||
|  | ASSERT_REG_POSITION(vs, 0x2b0); | ||||||
|  |  | ||||||
|  | #undef ASSERT_REG_POSITION | ||||||
|  | #endif // !defined(_MSC_VER) | ||||||
|  |  | ||||||
|  | // The total number of registers is chosen arbitrarily, but let's make sure it's not some odd value | ||||||
|  | // anyway. | ||||||
|  | static_assert(sizeof(Regs) <= 0x300 * sizeof(u32), | ||||||
|  |               "Register set structure larger than it should be"); | ||||||
|  | static_assert(sizeof(Regs) >= 0x300 * sizeof(u32), | ||||||
|  |               "Register set structure smaller than it should be"); | ||||||
|  |  | ||||||
|  | } // namespace Pica | ||||||
| @@ -6,9 +6,11 @@ | |||||||
|  |  | ||||||
| #include <array> | #include <array> | ||||||
|  |  | ||||||
|  | #include "common/assert.h" | ||||||
| #include "common/bit_field.h" | #include "common/bit_field.h" | ||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | #include "common/logging/log.h" | ||||||
|  |  | ||||||
| namespace Pica { | namespace Pica { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6,9 +6,11 @@ | |||||||
|  |  | ||||||
| #include <array> | #include <array> | ||||||
|  |  | ||||||
|  | #include "common/assert.h" | ||||||
| #include "common/bit_field.h" | #include "common/bit_field.h" | ||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | #include "common/vector_math.h" | ||||||
|  |  | ||||||
| namespace Pica { | namespace Pica { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,8 +14,8 @@ | |||||||
| #include "common/microprofile.h" | #include "common/microprofile.h" | ||||||
| #include "common/vector_math.h" | #include "common/vector_math.h" | ||||||
| #include "core/hw/gpu.h" | #include "core/hw/gpu.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
| #include "video_core/renderer_opengl/gl_rasterizer.h" | #include "video_core/renderer_opengl/gl_rasterizer.h" | ||||||
| #include "video_core/renderer_opengl/gl_shader_gen.h" | #include "video_core/renderer_opengl/gl_shader_gen.h" | ||||||
| #include "video_core/renderer_opengl/gl_shader_util.h" | #include "video_core/renderer_opengl/gl_shader_util.h" | ||||||
|   | |||||||
| @@ -16,10 +16,10 @@ | |||||||
| #include "common/hash.h" | #include "common/hash.h" | ||||||
| #include "common/vector_math.h" | #include "common/vector_math.h" | ||||||
| #include "core/hw/gpu.h" | #include "core/hw/gpu.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
| #include "video_core/pica_types.h" | #include "video_core/pica_types.h" | ||||||
| #include "video_core/rasterizer_interface.h" | #include "video_core/rasterizer_interface.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
| #include "video_core/renderer_opengl/gl_rasterizer_cache.h" | #include "video_core/renderer_opengl/gl_rasterizer_cache.h" | ||||||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||||
| #include "video_core/renderer_opengl/gl_state.h" | #include "video_core/renderer_opengl/gl_state.h" | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ | |||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hw/gpu.h" | #include "core/hw/gpu.h" | ||||||
| #include "video_core/pica.h" | #include "video_core/regs.h" | ||||||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||||
|  |  | ||||||
| namespace MathUtil { | namespace MathUtil { | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/bit_field.h" | #include "common/bit_field.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "video_core/pica.h" | #include "video_core/regs.h" | ||||||
| #include "video_core/renderer_opengl/gl_rasterizer.h" | #include "video_core/renderer_opengl/gl_rasterizer.h" | ||||||
| #include "video_core/renderer_opengl/gl_shader_gen.h" | #include "video_core/renderer_opengl/gl_shader_gen.h" | ||||||
| #include "video_core/renderer_opengl/gl_shader_util.h" | #include "video_core/renderer_opengl/gl_shader_util.h" | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ | |||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "video_core/pica.h" | #include "video_core/regs.h" | ||||||
|  |  | ||||||
| using GLvec2 = std::array<GLfloat, 2>; | using GLvec2 = std::array<GLfloat, 2>; | ||||||
| using GLvec3 = std::array<GLfloat, 3>; | using GLvec3 = std::array<GLfloat, 3>; | ||||||
|   | |||||||
| @@ -7,8 +7,8 @@ | |||||||
| #include "common/bit_set.h" | #include "common/bit_set.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "common/microprofile.h" | #include "common/microprofile.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
| #include "video_core/shader/shader_interpreter.h" | #include "video_core/shader/shader_interpreter.h" | ||||||
| #ifdef ARCHITECTURE_x86_64 | #ifdef ARCHITECTURE_x86_64 | ||||||
|   | |||||||
| @@ -12,8 +12,8 @@ | |||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/vector_math.h" | #include "common/vector_math.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_types.h" | #include "video_core/pica_types.h" | ||||||
|  | #include "video_core/regs.h" | ||||||
|  |  | ||||||
| using nihstro::RegisterType; | using nihstro::RegisterType; | ||||||
| using nihstro::SourceRegister; | using nihstro::SourceRegister; | ||||||
|   | |||||||
| @@ -8,9 +8,9 @@ | |||||||
| #include "common/vector_math.h" | #include "common/vector_math.h" | ||||||
| #include "core/memory.h" | #include "core/memory.h" | ||||||
| #include "video_core/debug_utils/debug_utils.h" | #include "video_core/debug_utils/debug_utils.h" | ||||||
| #include "video_core/pica.h" |  | ||||||
| #include "video_core/pica_state.h" | #include "video_core/pica_state.h" | ||||||
| #include "video_core/pica_types.h" | #include "video_core/pica_types.h" | ||||||
|  | #include "video_core/regs_pipeline.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
| #include "video_core/vertex_loader.h" | #include "video_core/vertex_loader.h" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|  |  | ||||||
| #include <array> | #include <array> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "video_core/pica.h" | #include "video_core/regs_pipeline.h" | ||||||
|  |  | ||||||
| namespace Pica { | namespace Pica { | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Yuri Kunde Schlesner
					Yuri Kunde Schlesner