From ac9f9374770d7477eecab7be9110cc4a2fc357aa Mon Sep 17 00:00:00 2001
From: Yuri Kunde Schlesner <yuriks@yuriks.net>
Date: Wed, 14 Dec 2016 22:52:09 -0800
Subject: [PATCH] VideoCore: Make profiling scope more representative

---
 src/video_core/command_processor.cpp             |  3 +++
 src/video_core/renderer_opengl/gl_rasterizer.cpp | 12 ++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp
index 8a5d8533c..db4fe659c 100644
--- a/src/video_core/command_processor.cpp
+++ b/src/video_core/command_processor.cpp
@@ -136,6 +136,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
                 immediate_input.attr[immediate_attribute_id++] = attribute;
 
                 if (immediate_attribute_id >= regs.vs.num_input_attributes + 1) {
+                    MICROPROFILE_SCOPE(GPU_Drawing);
                     immediate_attribute_id = 0;
 
                     Shader::UnitState<false> shader_unit;
@@ -165,6 +166,8 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
 
     case PICA_REG_INDEX(gpu_mode):
         if (regs.gpu_mode == Regs::GPUMode::Configuring) {
+            MICROPROFILE_SCOPE(GPU_Drawing);
+
             // Draw immediate mode triangles when GPU Mode is set to GPUMode::Configuring
             VideoCore::g_renderer->Rasterizer()->DrawTriangles();
 
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index cc7e782a4..22b8a0db2 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -11,6 +11,7 @@
 #include "common/color.h"
 #include "common/logging/log.h"
 #include "common/math_util.h"
+#include "common/microprofile.h"
 #include "common/vector_math.h"
 #include "core/hw/gpu.h"
 #include "video_core/pica.h"
@@ -21,6 +22,10 @@
 #include "video_core/renderer_opengl/pica_to_gl.h"
 #include "video_core/renderer_opengl/renderer_opengl.h"
 
+MICROPROFILE_DEFINE(OpenGL_Drawing, "OpenGL", "Drawing", MP_RGB(128, 128, 192));
+MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255));
+MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100));
+
 static bool IsPassThroughTevStage(const Pica::Regs::TevStageConfig& stage) {
     return (stage.color_op == Pica::Regs::TevStageConfig::Operation::Replace &&
             stage.alpha_op == Pica::Regs::TevStageConfig::Operation::Replace &&
@@ -168,6 +173,7 @@ void RasterizerOpenGL::DrawTriangles() {
     if (vertex_batch.empty())
         return;
 
+    MICROPROFILE_SCOPE(OpenGL_Drawing);
     const auto& regs = Pica::g_state.regs;
 
     // Sync and bind the framebuffer surfaces
@@ -694,18 +700,22 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) {
 }
 
 void RasterizerOpenGL::FlushAll() {
+    MICROPROFILE_SCOPE(OpenGL_CacheManagement);
     res_cache.FlushAll();
 }
 
 void RasterizerOpenGL::FlushRegion(PAddr addr, u32 size) {
+    MICROPROFILE_SCOPE(OpenGL_CacheManagement);
     res_cache.FlushRegion(addr, size, nullptr, false);
 }
 
 void RasterizerOpenGL::FlushAndInvalidateRegion(PAddr addr, u32 size) {
+    MICROPROFILE_SCOPE(OpenGL_CacheManagement);
     res_cache.FlushRegion(addr, size, nullptr, true);
 }
 
 bool RasterizerOpenGL::AccelerateDisplayTransfer(const GPU::Regs::DisplayTransferConfig& config) {
+    MICROPROFILE_SCOPE(OpenGL_Blits);
     using PixelFormat = CachedSurface::PixelFormat;
     using SurfaceType = CachedSurface::SurfaceType;
 
@@ -778,6 +788,7 @@ bool RasterizerOpenGL::AccelerateTextureCopy(const GPU::Regs::DisplayTransferCon
 }
 
 bool RasterizerOpenGL::AccelerateFill(const GPU::Regs::MemoryFillConfig& config) {
+    MICROPROFILE_SCOPE(OpenGL_Blits);
     using PixelFormat = CachedSurface::PixelFormat;
     using SurfaceType = CachedSurface::SurfaceType;
 
@@ -926,6 +937,7 @@ bool RasterizerOpenGL::AccelerateDisplay(const GPU::Regs::FramebufferConfig& con
     if (framebuffer_addr == 0) {
         return false;
     }
+    MICROPROFILE_SCOPE(OpenGL_CacheManagement);
 
     CachedSurface src_params;
     src_params.addr = framebuffer_addr;