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 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(false); 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(false); 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(false); 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(false); 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 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 198