d07c171f |
1 | /* |
2 | Copyright (C) 2002 Rice1964 |
3 | |
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. |
8 | |
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. |
13 | |
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. |
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 |
32 | extern bool debuggerWinOpened; |
33 | |
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; |
45 | extern bool logFog; |
46 | extern bool logDetails; |
47 | |
48 | |
49 | extern bool debuggerEnableTexture; |
50 | extern bool debuggerEnableZBuffer; |
51 | extern bool debuggerEnableCullFace; |
52 | extern bool debuggerEnableTestTris; |
53 | extern bool debuggerEnableAlphaTest; |
54 | extern bool debuggerContinueWithUnknown; |
55 | |
56 | extern bool debuggerPause; |
57 | extern bool pauseAtNext; |
58 | extern int eventToPause; |
59 | extern int debuggerPauseCount; |
60 | extern int countToPause; |
61 | |
62 | extern bool debuggerDropCombiners; |
63 | extern bool debuggerDropGeneralCombiners; |
64 | extern bool debuggerDropDecodedMux; |
65 | extern bool debuggerDropCombinerInfos; |
66 | |
67 | enum { |
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 | |
95 | void DebuggerPause(); |
96 | void __cdecl DebuggerAppendMsg(const char * Message, ...); |
97 | void DumpHex(uint32 rdramAddr, int count); |
98 | |
99 | void 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;} |
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;} |
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 | |
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} |
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) |
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) |
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 | |