debug_utils.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright 2014 Citra Emulator Project
  2. // Licensed under GPLv2
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <array>
  6. #include <memory>
  7. #include <vector>
  8. #include "video_core/pica.h"
  9. namespace Pica {
  10. namespace DebugUtils {
  11. // Simple utility class for dumping geometry data to an OBJ file
  12. class GeometryDumper {
  13. public:
  14. struct Vertex {
  15. std::array<float,3> pos;
  16. };
  17. void AddTriangle(Vertex& v0, Vertex& v1, Vertex& v2);
  18. void Dump();
  19. private:
  20. struct Face {
  21. int index[3];
  22. };
  23. std::vector<Vertex> vertices;
  24. std::vector<Face> faces;
  25. };
  26. void DumpShader(const u32* binary_data, u32 binary_size, const u32* swizzle_data, u32 swizzle_size,
  27. u32 main_offset, const Regs::VSOutputAttributes* output_attributes);
  28. // Utility class to log Pica commands.
  29. struct PicaTrace {
  30. struct Write : public std::pair<u32,u32> {
  31. Write(u32 id, u32 value) : std::pair<u32,u32>(id, value) {}
  32. u32& Id() { return first; }
  33. const u32& Id() const { return first; }
  34. u32& Value() { return second; }
  35. const u32& Value() const { return second; }
  36. };
  37. std::vector<Write> writes;
  38. };
  39. void StartPicaTracing();
  40. bool IsPicaTracing();
  41. void OnPicaRegWrite(u32 id, u32 value);
  42. std::unique_ptr<PicaTrace> FinishPicaTracing();
  43. void DumpTexture(const Pica::Regs::TextureConfig& texture_config, u8* data);
  44. void DumpTevStageConfig(const std::array<Pica::Regs::TevStageConfig,6>& stages);
  45. } // namespace
  46. } // namespace