formatter.cpp 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Copyright 2020 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <algorithm>
  5. #include <string>
  6. #include "video_core/texture_cache/formatter.h"
  7. #include "video_core/texture_cache/image_base.h"
  8. #include "video_core/texture_cache/image_info.h"
  9. #include "video_core/texture_cache/image_view_base.h"
  10. #include "video_core/texture_cache/render_targets.h"
  11. namespace VideoCommon {
  12. std::string Name(const ImageBase& image) {
  13. const GPUVAddr gpu_addr = image.gpu_addr;
  14. const ImageInfo& info = image.info;
  15. const u32 width = info.size.width;
  16. const u32 height = info.size.height;
  17. const u32 depth = info.size.depth;
  18. const u32 num_layers = image.info.resources.layers;
  19. const u32 num_levels = image.info.resources.levels;
  20. std::string resource;
  21. if (num_layers > 1) {
  22. resource += fmt::format(":L{}", num_layers);
  23. }
  24. if (num_levels > 1) {
  25. resource += fmt::format(":M{}", num_levels);
  26. }
  27. switch (image.info.type) {
  28. case ImageType::e1D:
  29. return fmt::format("Image 1D 0x{:x} {}{}", gpu_addr, width, resource);
  30. case ImageType::e2D:
  31. return fmt::format("Image 2D 0x{:x} {}x{}{}", gpu_addr, width, height, resource);
  32. case ImageType::e3D:
  33. return fmt::format("Image 2D 0x{:x} {}x{}x{}{}", gpu_addr, width, height, depth, resource);
  34. case ImageType::Linear:
  35. return fmt::format("Image Linear 0x{:x} {}x{}", gpu_addr, width, height);
  36. case ImageType::Buffer:
  37. return fmt::format("Buffer 0x{:x} {}", image.gpu_addr, image.info.size.width);
  38. }
  39. return "Invalid";
  40. }
  41. std::string Name(const ImageViewBase& image_view) {
  42. const u32 width = image_view.size.width;
  43. const u32 height = image_view.size.height;
  44. const u32 depth = image_view.size.depth;
  45. const u32 num_levels = image_view.range.extent.levels;
  46. const u32 num_layers = image_view.range.extent.layers;
  47. const std::string level = num_levels > 1 ? fmt::format(":{}", num_levels) : "";
  48. switch (image_view.type) {
  49. case ImageViewType::e1D:
  50. return fmt::format("ImageView 1D {}{}", width, level);
  51. case ImageViewType::e2D:
  52. return fmt::format("ImageView 2D {}x{}{}", width, height, level);
  53. case ImageViewType::Cube:
  54. return fmt::format("ImageView Cube {}x{}{}", width, height, level);
  55. case ImageViewType::e3D:
  56. return fmt::format("ImageView 3D {}x{}x{}{}", width, height, depth, level);
  57. case ImageViewType::e1DArray:
  58. return fmt::format("ImageView 1DArray {}{}|{}", width, level, num_layers);
  59. case ImageViewType::e2DArray:
  60. return fmt::format("ImageView 2DArray {}x{}{}|{}", width, height, level, num_layers);
  61. case ImageViewType::CubeArray:
  62. return fmt::format("ImageView CubeArray {}x{}{}|{}", width, height, level, num_layers);
  63. case ImageViewType::Rect:
  64. return fmt::format("ImageView Rect {}x{}{}", width, height, level);
  65. case ImageViewType::Buffer:
  66. return fmt::format("BufferView {}", width);
  67. }
  68. return "Invalid";
  69. }
  70. std::string Name(const RenderTargets& render_targets) {
  71. std::string_view debug_prefix;
  72. const auto num_color = std::ranges::count_if(
  73. render_targets.color_buffer_ids, [](ImageViewId id) { return static_cast<bool>(id); });
  74. if (render_targets.depth_buffer_id) {
  75. debug_prefix = num_color > 0 ? "R" : "Z";
  76. } else {
  77. debug_prefix = num_color > 0 ? "C" : "X";
  78. }
  79. const Extent2D size = render_targets.size;
  80. if (num_color > 0) {
  81. return fmt::format("Framebuffer {}{} {}x{}", debug_prefix, num_color, size.width,
  82. size.height);
  83. } else {
  84. return fmt::format("Framebuffer {} {}x{}", debug_prefix, size.width, size.height);
  85. }
  86. }
  87. } // namespace VideoCommon