2 Copyright (C) 2002 Rice1964
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 #if !defined(DEBUGGER_H)
27 // Debugger.h : header file
30 /////////////////////////////////////////////////////////////////////////////
32 extern bool debuggerWinOpened;
34 extern bool logCombiners;
35 extern bool logTriangles;
36 extern bool logVertex;
37 extern bool logWarning;
38 extern bool logTextures;
39 extern bool logTextureBuffer;
40 extern bool logMatrix;
41 extern bool logToScreen;
42 extern bool logToFile;
43 extern bool logUcodes;
44 extern bool logMicrocode;
46 extern bool logDetails;
49 extern bool debuggerEnableTexture;
50 extern bool debuggerEnableZBuffer;
51 extern bool debuggerEnableCullFace;
52 extern bool debuggerEnableTestTris;
53 extern bool debuggerEnableAlphaTest;
54 extern bool debuggerContinueWithUnknown;
56 extern bool debuggerPause;
57 extern bool pauseAtNext;
58 extern int eventToPause;
59 extern int debuggerPauseCount;
60 extern int countToPause;
62 extern bool debuggerDropCombiners;
63 extern bool debuggerDropGeneralCombiners;
64 extern bool debuggerDropDecodedMux;
65 extern bool debuggerDropCombinerInfos;
96 void __cdecl DebuggerAppendMsg(const char * Message, ...);
97 void DumpHex(uint32 rdramAddr, int count);
99 void DumpMatrix(const Matrix &mtx, const char* prompt);
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 ) \
105 DebuggerAppendMsg("%s:%d(%08X),%d(%08X),%d(%08X)\n", (str),\
106 (v0), GetVertexDiffuseColor((v0)), \
107 (v1), GetVertexDiffuseColor((v1)), \
108 (v2), GetVertexDiffuseColor((v2))); \
111 #define DEBUGGER_IF(op) if(op)
112 #define DEBUGGER_PAUSE(op) if(pauseAtNext && eventToPause == op){pauseAtNext = false;CGraphicsContext::Get()->UpdateFrame(); debuggerPause = true;}
113 extern void DEBUGGER_PAUSE_COUNT_N(uint32 event);
114 extern 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;}
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;}}
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;}}
131 void 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}
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);}
154 #define DEBUG_TRIANGLE(dumpfunc) { if(pauseAtNext && eventToPause==NEXT_TRIANGLE ) { eventToPause = NEXT_FLUSH_TRI; debuggerPause = true; DEBUGGER_PAUSE(NEXT_FLUSH_TRI); dumpfunc} }
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)
168 void __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)
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) {}
192 #define DEBUG_TRIANGLE(arg0) {}
196 #endif // !defined(DEBUGGER_H)