mirror of
https://github.com/citra-emu/citra.git
synced 2024-12-18 14:40:05 +00:00
Merge pull request #992 from yuriks/hot-path-debug
VideoCore: #ifdef out some debugging routines
This commit is contained in:
commit
cb76453ec4
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user