pica.cpp 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Copyright 2015 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <cstring>
  5. #include <unordered_map>
  6. #include "pica.h"
  7. #include "shader/shader.h"
  8. namespace Pica {
  9. State g_state;
  10. std::string Regs::GetCommandName(int index) {
  11. static std::unordered_map<u32, std::string> map;
  12. if (map.empty()) {
  13. #define ADD_FIELD(name) \
  14. map.insert({static_cast<u32>(PICA_REG_INDEX(name)), #name}); \
  15. /* TODO: change to Regs::name when VS2015 and other compilers support it */ \
  16. for (u32 i = PICA_REG_INDEX(name) + 1; i < PICA_REG_INDEX(name) + sizeof(Regs().name) / 4; ++i) \
  17. map.insert({i, #name + std::string("+") + std::to_string(i-PICA_REG_INDEX(name))}); \
  18. ADD_FIELD(trigger_irq);
  19. ADD_FIELD(cull_mode);
  20. ADD_FIELD(viewport_size_x);
  21. ADD_FIELD(viewport_size_y);
  22. ADD_FIELD(viewport_depth_range);
  23. ADD_FIELD(viewport_depth_far_plane);
  24. ADD_FIELD(viewport_corner);
  25. ADD_FIELD(texture0_enable);
  26. ADD_FIELD(texture0);
  27. ADD_FIELD(texture0_format);
  28. ADD_FIELD(texture1);
  29. ADD_FIELD(texture1_format);
  30. ADD_FIELD(texture2);
  31. ADD_FIELD(texture2_format);
  32. ADD_FIELD(tev_stage0);
  33. ADD_FIELD(tev_stage1);
  34. ADD_FIELD(tev_stage2);
  35. ADD_FIELD(tev_stage3);
  36. ADD_FIELD(tev_combiner_buffer_input);
  37. ADD_FIELD(tev_stage4);
  38. ADD_FIELD(tev_stage5);
  39. ADD_FIELD(tev_combiner_buffer_color);
  40. ADD_FIELD(output_merger);
  41. ADD_FIELD(framebuffer);
  42. ADD_FIELD(vertex_attributes);
  43. ADD_FIELD(index_array);
  44. ADD_FIELD(num_vertices);
  45. ADD_FIELD(vertex_offset);
  46. ADD_FIELD(trigger_draw);
  47. ADD_FIELD(trigger_draw_indexed);
  48. ADD_FIELD(vs_default_attributes_setup);
  49. ADD_FIELD(command_buffer);
  50. ADD_FIELD(triangle_topology);
  51. ADD_FIELD(restart_primitive);
  52. ADD_FIELD(gs.bool_uniforms);
  53. ADD_FIELD(gs.int_uniforms);
  54. ADD_FIELD(gs.main_offset);
  55. ADD_FIELD(gs.input_register_map);
  56. ADD_FIELD(gs.uniform_setup);
  57. ADD_FIELD(gs.program);
  58. ADD_FIELD(gs.swizzle_patterns);
  59. ADD_FIELD(vs.bool_uniforms);
  60. ADD_FIELD(vs.int_uniforms);
  61. ADD_FIELD(vs.main_offset);
  62. ADD_FIELD(vs.input_register_map);
  63. ADD_FIELD(vs.uniform_setup);
  64. ADD_FIELD(vs.program);
  65. ADD_FIELD(vs.swizzle_patterns);
  66. #undef ADD_FIELD
  67. }
  68. // Return empty string if no match is found
  69. auto it = map.find(index);
  70. if (it != map.end()) {
  71. return it->second;
  72. } else {
  73. return std::string();
  74. }
  75. }
  76. void Init() {
  77. }
  78. void Shutdown() {
  79. Shader::Shutdown();
  80. memset(&g_state, 0, sizeof(State));
  81. }
  82. }