Rice Video Plugin for GLES1.1
[mupen64plus-pandora.git] / source / rice_gles / src / Debugger.h
CommitLineData
d07c171f 1/*
2Copyright (C) 2002 Rice1964
3
4This program is free software; you can redistribute it and/or
5modify it under the terms of the GNU General Public License
6as published by the Free Software Foundation; either version 2
7of the License, or (at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program; if not, write to the Free Software
16Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18*/
19
20#if !defined(DEBUGGER_H)
21#define DEBUGGER_H
22
23#include "typedefs.h"
24
25#if defined(DEBUGGER)
26
27// Debugger.h : header file
28//
29
30/////////////////////////////////////////////////////////////////////////////
31// CDebugger dialog
32extern bool debuggerWinOpened;
33
34extern bool logCombiners;
35extern bool logTriangles;
36extern bool logVertex;
37extern bool logWarning;
38extern bool logTextures;
39extern bool logTextureBuffer;
40extern bool logMatrix;
41extern bool logToScreen;
42extern bool logToFile;
43extern bool logUcodes;
44extern bool logMicrocode;
45extern bool logFog;
46extern bool logDetails;
47
48
49extern bool debuggerEnableTexture;
50extern bool debuggerEnableZBuffer;
51extern bool debuggerEnableCullFace;
52extern bool debuggerEnableTestTris;
53extern bool debuggerEnableAlphaTest;
54extern bool debuggerContinueWithUnknown;
55
56extern bool debuggerPause;
57extern bool pauseAtNext;
58extern int eventToPause;
59extern int debuggerPauseCount;
60extern int countToPause;
61
62extern bool debuggerDropCombiners;
63extern bool debuggerDropGeneralCombiners;
64extern bool debuggerDropDecodedMux;
65extern bool debuggerDropCombinerInfos;
66
67enum {
68 NEXT_FRAME,
69 NEXT_FLUSH_TRI,
70 NEXT_TEXTRECT,
71 NEXT_TRIANGLE,
72 NEXT_SET_CIMG,
73 NEXT_OBJ_TXT_CMD,
74 NEXT_OBJ_BG,
75 NEXT_SPRITE_2D,
76 NEXT_FILLRECT,
77 NEXT_DLIST,
78 NEXT_UCODE,
79 NEXT_RENDER_TEXTURE,
80 NEXT_MATRIX_CMD,
81 NEXT_VERTEX_CMD,
82 NEXT_NEW_TEXTURE,
83 NEXT_SET_TEXTURE,
84 NEXT_MUX,
85 NEXT_SET_LIGHT,
86 NEXT_SET_MODE_CMD,
87 NEXT_SET_PRIM_COLOR,
88 NEXT_TEXTURE_CMD,
89 NEXT_UNKNOWN_OP,
90 NEXT_SCALE_IMG,
91 NEXT_LOADTLUT,
92 NEXT_SWITCH_UCODE,
93};
94
95void DebuggerPause();
96void __cdecl DebuggerAppendMsg(const char * Message, ...);
97void DumpHex(uint32 rdramAddr, int count);
98
99void DumpMatrix(const Matrix &mtx, const char* prompt);
100
101//Some common used macros
102#define DEBUG_DUMP_VERTEXES(str, v0, v1, v2) \
103 if( (pauseAtNext && (eventToPause == NEXT_TRIANGLE || eventToPause == NEXT_FLUSH_TRI)) && logTriangles ) \
104 { \
105 DebuggerAppendMsg("%s:%d(%08X),%d(%08X),%d(%08X)\n", (str),\
106 (v0), GetVertexDiffuseColor((v0)), \
107 (v1), GetVertexDiffuseColor((v1)), \
108 (v2), GetVertexDiffuseColor((v2))); \
109 }
110
111#define DEBUGGER_IF(op) if(op)
112#define DEBUGGER_PAUSE(op) if(pauseAtNext && eventToPause == op){pauseAtNext = false;CGraphicsContext::Get()->UpdateFrame(); debuggerPause = true;}
113extern void DEBUGGER_PAUSE_COUNT_N(uint32 event);
114extern void DEBUGGER_PAUSE_COUNT_N_WITHOUT_UPDATE(uint32 val);
115#define DebuggerPauseCountN DEBUGGER_PAUSE_COUNT_N
116#define DEBUGGER_PAUSE_AND_DUMP(op,dumpfuc) \
117 if(pauseAtNext && eventToPause == op) \
118 { pauseAtNext = false;debuggerPause = true; CGraphicsContext::Get()->UpdateFrame(); dumpfuc;}
119#define DEBUGGER_PAUSE_AND_DUMP_NO_UPDATE(op,dumpfuc) \
120 if(pauseAtNext && eventToPause == op) \
121 { pauseAtNext = false;debuggerPause = true; dumpfuc;}
122
123#define DEBUGGER_PAUSE_AND_DUMP_COUNT_N(op,dumpfuc) \
124 if(pauseAtNext && eventToPause == op) \
125{ if( debuggerPauseCount > 0 ) debuggerPauseCount--; if( debuggerPauseCount == 0 ){pauseAtNext = false;debuggerPause = true; CGraphicsContext::Get()->UpdateFrame(); dumpfuc;}}
126
127#define DEBUGGER_PAUSE_AT_COND_AND_DUMP_COUNT_N(cond,dumpfuc) \
128 if(pauseAtNext && (cond) ) \
129{ if( debuggerPauseCount > 0 ) debuggerPauseCount--; if( debuggerPauseCount == 0 ){pauseAtNext = false;debuggerPause = true; CGraphicsContext::Get()->UpdateFrame(); dumpfuc;}}
130
131void RDP_NOIMPL_Real(const char* op,uint32,uint32) ;
132#define RSP_RDP_NOIMPL RDP_NOIMPL_Real
133#define DEBUGGER_IF_DUMP(cond, dumpfunc) {if(cond) {dumpfunc}}
134#define TXTRBUF_DUMP(dumpfunc) DEBUGGER_IF_DUMP((logTextureBuffer), dumpfunc)
135#define TXTRBUF_DETAIL_DUMP(dumpfunc) DEBUGGER_IF_DUMP((logTextureBuffer&&logDetails), dumpfunc)
136#define TXTRBUF_OR_CI_DUMP(dumpfunc) DEBUGGER_IF_DUMP((logTextureBuffer || (pauseAtNext && eventToPause == NEXT_SET_CIMG)), dumpfunc)
137#define TXTRBUF_OR_CI_DETAIL_DUMP(dumpfunc) DEBUGGER_IF_DUMP(((logTextureBuffer || (pauseAtNext && eventToPause == NEXT_SET_CIMG))&&logDetails), dumpfunc)
138#define VTX_DUMP(dumpfunc) DEBUGGER_IF_DUMP((logVertex && pauseAtNext), dumpfunc)
139#define TRI_DUMP(dumpfunc) DEBUGGER_IF_DUMP((logTriangles && pauseAtNext), dumpfunc)
140#define LIGHT_DUMP(dumpfunc) DEBUGGER_IF_DUMP((eventToPause == NEXT_SET_LIGHT && pauseAtNext), dumpfunc)
141#define WARNING(dumpfunc) DEBUGGER_IF_DUMP(logWarning, dumpfunc)
142#define FOG_DUMP(dumpfunc) DEBUGGER_IF_DUMP(logFog, dumpfunc)
143#define LOG_TEXTURE(dumpfunc) DEBUGGER_IF_DUMP((logTextures || (pauseAtNext && eventToPause==NEXT_TEXTURE_CMD) ), dumpfunc)
144#define DEBUGGER_ONLY_IF DEBUGGER_IF_DUMP
145#define DEBUGGER_ONLY(func) {func}
146
147#define TRACE0(arg0) {DebuggerAppendMsg(arg0);}
148#define TRACE1(arg0,arg1) {DebuggerAppendMsg(arg0,arg1);}
149#define TRACE2(arg0,arg1,arg2) {DebuggerAppendMsg(arg0,arg1,arg2);}
150#define TRACE3(arg0,arg1,arg2,arg3) {DebuggerAppendMsg(arg0,arg1,arg2,arg3);}
151#define TRACE4(arg0,arg1,arg2,arg3,arg4) {DebuggerAppendMsg(arg0,arg1,arg2,arg3,arg4);}
152#define TRACE5(arg0,arg1,arg2,arg3,arg4,arg5) {DebuggerAppendMsg(arg0,arg1,arg2,arg3,arg4,arg5);}
153
154#define DEBUG_TRIANGLE(dumpfunc) { if(pauseAtNext && eventToPause==NEXT_TRIANGLE ) { eventToPause = NEXT_FLUSH_TRI; debuggerPause = true; DEBUGGER_PAUSE(NEXT_FLUSH_TRI); dumpfunc} }
155
156#else
157#define DEBUG_DUMP_VERTEXES(str, v0, v1, v2)
158#define DEBUGGER_IF(op)
159#define DEBUGGER_PAUSE(op)
160#define DEBUGGER_PAUSE_COUNT_N(op)
161#define DEBUGGER_PAUSE_AND_DUMP(op,dumpfuc)
162#define DebuggerPauseCountN DEBUGGER_PAUSE_COUNT_N
163#define DEBUGGER_PAUSE_AT_COND_AND_DUMP_COUNT_N(cond,dumpfuc)
164#define DEBUGGER_PAUSE_AND_DUMP_COUNT_N(op,dumpfuc)
165#define DEBUGGER_PAUSE_COUNT_N_WITHOUT_UPDATE(op)
166#define DEBUGGER_PAUSE_AND_DUMP_NO_UPDATE(op,dumpfuc)
167#define RSP_RDP_NOIMPL(a,b,c)
168void __cdecl DebuggerAppendMsg(const char * Message, ...);
169#define DumpHex(rdramAddr, count)
170#define DEBUGGER_IF_DUMP(cond, dumpfunc)
171#define TXTRBUF_DUMP(dumpfunc)
172#define TXTRBUF_DETAIL_DUMP(dumpfunc)
173#define TXTRBUF_OR_CI_DUMP(dumpfunc)
174#define TXTRBUF_OR_CI_DETAIL_DUMP(dumpfunc)
175#define VTX_DUMP(dumpfunc)
176#define TRI_DUMP(dumpfunc)
177#define LIGHT_DUMP(dumpfunc)
178#define WARNING(dumpfunc)
179#define FOG_DUMP(dumpfunc)
180#define LOG_TEXTURE(dumpfunc)
181#define DEBUGGER_ONLY_IF DEBUGGER_IF_DUMP
182#define DEBUGGER_ONLY(func)
183#define DumpMatrix(a,b)
184
185#define TRACE0(arg0) {}
186#define TRACE1(arg0,arg1) {}
187#define TRACE2(arg0,arg1,arg2) {}
188#define TRACE3(arg0,arg1,arg2,arg3) {}
189#define TRACE4(arg0,arg1,arg2,arg3,arg4) {}
190#define TRACE5(arg0,arg1,arg2,arg3,arg4,arg5) {}
191
192#define DEBUG_TRIANGLE(arg0) {}
193
194#endif
195
196#endif // !defined(DEBUGGER_H)
197