Merge pull request #992 from yuriks/hot-path-debug

VideoCore: #ifdef out some debugging routines
This commit is contained in:
bunnei 2015-07-26 11:45:51 -04:00
commit cb76453ec4
5 changed files with 18 additions and 13 deletions

View file

@ -116,7 +116,9 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) {
{ {
Common::Profiling::ScopeTimer scope_timer(category_drawing); Common::Profiling::ScopeTimer scope_timer(category_drawing);
#if PICA_LOG_TEV
DebugUtils::DumpTevStageConfig(regs.GetTevStages()); DebugUtils::DumpTevStageConfig(regs.GetTevStages());
#endif
if (g_debug_context) if (g_debug_context)
g_debug_context->OnEvent(DebugContext::Event::IncomingPrimitiveBatch, nullptr); g_debug_context->OnEvent(DebugContext::Event::IncomingPrimitiveBatch, nullptr);
@ -159,9 +161,11 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) {
const u16* index_address_16 = (u16*)index_address_8; const u16* index_address_16 = (u16*)index_address_8;
bool index_u16 = index_info.format != 0; bool index_u16 = index_info.format != 0;
#if PICA_DUMP_GEOMETRY
DebugUtils::GeometryDumper geometry_dumper; DebugUtils::GeometryDumper geometry_dumper;
PrimitiveAssembler<VertexShader::OutputVertex> primitive_assembler(regs.triangle_topology.Value());
PrimitiveAssembler<DebugUtils::GeometryDumper::Vertex> dumping_primitive_assembler(regs.triangle_topology.Value()); PrimitiveAssembler<DebugUtils::GeometryDumper::Vertex> dumping_primitive_assembler(regs.triangle_topology.Value());
#endif
PrimitiveAssembler<VertexShader::OutputVertex> primitive_assembler(regs.triangle_topology.Value());
if (g_debug_context) { if (g_debug_context) {
for (int i = 0; i < 3; ++i) { for (int i = 0; i < 3; ++i) {
@ -271,6 +275,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) {
if (g_debug_context) if (g_debug_context)
g_debug_context->OnEvent(DebugContext::Event::VertexLoaded, (void*)&input); g_debug_context->OnEvent(DebugContext::Event::VertexLoaded, (void*)&input);
#if PICA_DUMP_GEOMETRY
// NOTE: When dumping geometry, we simply assume that the first input attribute // NOTE: When dumping geometry, we simply assume that the first input attribute
// corresponds to the position for now. // corresponds to the position for now.
DebugUtils::GeometryDumper::Vertex dumped_vertex = { DebugUtils::GeometryDumper::Vertex dumped_vertex = {
@ -280,6 +285,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) {
dumping_primitive_assembler.SubmitVertex(dumped_vertex, dumping_primitive_assembler.SubmitVertex(dumped_vertex,
std::bind(&DebugUtils::GeometryDumper::AddTriangle, std::bind(&DebugUtils::GeometryDumper::AddTriangle,
&geometry_dumper, _1, _2, _3)); &geometry_dumper, _1, _2, _3));
#endif
// Send to vertex shader // Send to vertex shader
VertexShader::OutputVertex output = VertexShader::RunShader(input, attribute_config.GetNumTotalAttributes(), g_state.regs.vs, g_state.vs); VertexShader::OutputVertex output = VertexShader::RunShader(input, attribute_config.GetNumTotalAttributes(), g_state.regs.vs, g_state.vs);
@ -312,7 +318,9 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) {
VideoCore::g_renderer->hw_rasterizer->DrawTriangles(); VideoCore::g_renderer->hw_rasterizer->DrawTriangles();
} }
#if PICA_DUMP_GEOMETRY
geometry_dumper.Dump(); geometry_dumper.Dump();
#endif
if (g_debug_context) { if (g_debug_context) {
g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr);

View file

@ -90,10 +90,6 @@ void GeometryDumper::AddTriangle(Vertex& v0, Vertex& v1, Vertex& v2) {
} }
void GeometryDumper::Dump() { void GeometryDumper::Dump() {
// NOTE: Permanently enabling this just trashes the hard disk for no reason.
// Hence, this is currently disabled.
return;
static int index = 0; static int index = 0;
std::string filename = std::string("geometry_dump") + std::to_string(++index) + ".obj"; std::string filename = std::string("geometry_dump") + std::to_string(++index) + ".obj";
@ -116,10 +112,6 @@ void GeometryDumper::Dump() {
void DumpShader(const u32* binary_data, u32 binary_size, const u32* swizzle_data, u32 swizzle_size, void DumpShader(const u32* binary_data, u32 binary_size, const u32* swizzle_data, u32 swizzle_size,
u32 main_offset, const Regs::VSOutputAttributes* output_attributes) u32 main_offset, const Regs::VSOutputAttributes* output_attributes)
{ {
// NOTE: Permanently enabling this just trashes hard disks for no reason.
// Hence, this is currently disabled.
return;
struct StuffToWrite { struct StuffToWrite {
u8* pointer; u8* pointer;
u32 size; u32 size;
@ -565,10 +557,6 @@ TextureInfo TextureInfo::FromPicaRegister(const Regs::TextureConfig& config,
} }
void DumpTexture(const Pica::Regs::TextureConfig& texture_config, u8* data) { void DumpTexture(const Pica::Regs::TextureConfig& texture_config, u8* data) {
// NOTE: Permanently enabling this just trashes hard disks for no reason.
// Hence, this is currently disabled.
return;
#ifndef HAVE_PNG #ifndef HAVE_PNG
return; return;
#else #else

View file

@ -157,6 +157,11 @@ extern std::shared_ptr<DebugContext> g_debug_context; // TODO: Get rid of this g
namespace DebugUtils { namespace DebugUtils {
#define PICA_DUMP_GEOMETRY 0
#define PICA_DUMP_SHADERS 0
#define PICA_DUMP_TEXTURES 0
#define PICA_LOG_TEV 0
// Simple utility class for dumping geometry data to an OBJ file // Simple utility class for dumping geometry data to an OBJ file
class GeometryDumper { class GeometryDumper {
public: public:

View file

@ -462,7 +462,9 @@ static void ProcessTriangleInternal(const VertexShader::OutputVertex& v0,
// TODO: Apply the min and mag filters to the texture // TODO: Apply the min and mag filters to the texture
texture_color[i] = DebugUtils::LookupTexture(texture_data, s, t, info); texture_color[i] = DebugUtils::LookupTexture(texture_data, s, t, info);
#if PICA_DUMP_TEXTURES
DebugUtils::DumpTexture(texture.config, texture_data); DebugUtils::DumpTexture(texture.config, texture_data);
#endif
} }
} }

View file

@ -579,9 +579,11 @@ OutputVertex RunShader(const InputVertex& input, int num_attributes, const Regs:
state.conditional_code[1] = false; state.conditional_code[1] = false;
ProcessShaderCode(state); ProcessShaderCode(state);
#if PICA_DUMP_SHADERS
DebugUtils::DumpShader(setup.program_code.data(), state.debug.max_offset, setup.swizzle_data.data(), DebugUtils::DumpShader(setup.program_code.data(), state.debug.max_offset, setup.swizzle_data.data(),
state.debug.max_opdesc_id, config.main_offset, state.debug.max_opdesc_id, config.main_offset,
g_state.regs.vs_output_attributes); // TODO: Don't hardcode VS here g_state.regs.vs_output_attributes); // TODO: Don't hardcode VS here
#endif
// Setup output data // Setup output data
OutputVertex ret; OutputVertex ret;