yuzu-emu
/
yuzu-mainline
Archived
1
0
Fork 0

Merge pull request #760 from yuriks/gpu-profile

GPU: add more fine grained profiling for vertex shader and rasterization
This commit is contained in:
Yuri Kunde Schlesner 2015-05-12 13:47:35 -07:00
commit 9d8e1f7a92
2 changed files with 10 additions and 0 deletions

View File

@ -6,6 +6,7 @@
#include "common/common_types.h" #include "common/common_types.h"
#include "common/math_util.h" #include "common/math_util.h"
#include "common/profiler.h"
#include "core/hw/gpu.h" #include "core/hw/gpu.h"
#include "debug_utils/debug_utils.h" #include "debug_utils/debug_utils.h"
@ -186,6 +187,8 @@ static int SignedArea (const Math::Vec2<Fix12P4>& vtx1,
return Math::Cross(vec1, vec2).z; return Math::Cross(vec1, vec2).z;
}; };
static Common::Profiling::TimingCategory rasterization_category("Rasterization");
/** /**
* Helper function for ProcessTriangle with the "reversed" flag to allow for implementing * Helper function for ProcessTriangle with the "reversed" flag to allow for implementing
* culling via recursion. * culling via recursion.
@ -195,6 +198,8 @@ static void ProcessTriangleInternal(const VertexShader::OutputVertex& v0,
const VertexShader::OutputVertex& v2, const VertexShader::OutputVertex& v2,
bool reversed = false) bool reversed = false)
{ {
Common::Profiling::ScopeTimer timer(rasterization_category);
// vertex positions in rasterizer coordinates // vertex positions in rasterizer coordinates
static auto FloatToFix = [](float24 flt) { static auto FloatToFix = [](float24 flt) {
// TODO: Rounding here is necessary to prevent garbage pixels at // TODO: Rounding here is necessary to prevent garbage pixels at

View File

@ -12,6 +12,7 @@
#include <nihstro/shader_bytecode.h> #include <nihstro/shader_bytecode.h>
#include "common/profiler.h"
#include "pica.h" #include "pica.h"
#include "vertex_shader.h" #include "vertex_shader.h"
@ -574,7 +575,11 @@ static void ProcessShaderCode(VertexShaderState& state) {
} }
} }
static Common::Profiling::TimingCategory shader_category("Vertex Shader");
OutputVertex RunShader(const InputVertex& input, int num_attributes) { OutputVertex RunShader(const InputVertex& input, int num_attributes) {
Common::Profiling::ScopeTimer timer(shader_category);
VertexShaderState state; VertexShaderState state;
const u32* main = &shader_memory[registers.vs_main_offset]; const u32* main = &shader_memory[registers.vs_main_offset];