Rice Video Plugin for GLES1.1
[mupen64plus-pandora.git] / source / rice_gles / src / Debugger.h
diff --git a/source/rice_gles/src/Debugger.h b/source/rice_gles/src/Debugger.h
new file mode 100644 (file)
index 0000000..04c44b4
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+Copyright (C) 2002 Rice1964
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+*/
+
+#if !defined(DEBUGGER_H)
+#define DEBUGGER_H
+
+#include "typedefs.h"
+
+#if defined(DEBUGGER)
+
+// Debugger.h : header file
+//
+
+/////////////////////////////////////////////////////////////////////////////
+// CDebugger dialog
+extern bool debuggerWinOpened;
+
+extern bool logCombiners;
+extern bool logTriangles;
+extern bool logVertex;
+extern bool logWarning;
+extern bool logTextures;
+extern bool logTextureBuffer;
+extern bool logMatrix;
+extern bool logToScreen;
+extern bool logToFile;
+extern bool logUcodes;
+extern bool logMicrocode;
+extern bool logFog;
+extern bool logDetails;
+
+
+extern bool debuggerEnableTexture;
+extern bool debuggerEnableZBuffer;
+extern bool debuggerEnableCullFace;
+extern bool debuggerEnableTestTris;
+extern bool debuggerEnableAlphaTest;
+extern bool debuggerContinueWithUnknown;
+
+extern bool debuggerPause;
+extern bool pauseAtNext;
+extern int  eventToPause;
+extern int  debuggerPauseCount;
+extern int  countToPause;
+
+extern bool debuggerDropCombiners;
+extern bool debuggerDropGeneralCombiners;
+extern bool debuggerDropDecodedMux;
+extern bool debuggerDropCombinerInfos;
+
+enum {
+    NEXT_FRAME,
+    NEXT_FLUSH_TRI,
+    NEXT_TEXTRECT,
+    NEXT_TRIANGLE,
+    NEXT_SET_CIMG,
+    NEXT_OBJ_TXT_CMD,
+    NEXT_OBJ_BG,
+    NEXT_SPRITE_2D,
+    NEXT_FILLRECT,
+    NEXT_DLIST,
+    NEXT_UCODE,
+    NEXT_RENDER_TEXTURE,
+    NEXT_MATRIX_CMD,
+    NEXT_VERTEX_CMD,
+    NEXT_NEW_TEXTURE,
+    NEXT_SET_TEXTURE,
+    NEXT_MUX,
+    NEXT_SET_LIGHT,
+    NEXT_SET_MODE_CMD,
+    NEXT_SET_PRIM_COLOR,
+    NEXT_TEXTURE_CMD,
+    NEXT_UNKNOWN_OP,
+    NEXT_SCALE_IMG,
+    NEXT_LOADTLUT,
+    NEXT_SWITCH_UCODE,
+};
+
+void DebuggerPause();
+void __cdecl DebuggerAppendMsg(const char * Message, ...);
+void DumpHex(uint32 rdramAddr, int count);
+
+void DumpMatrix(const Matrix &mtx, const char* prompt);
+
+//Some common used macros
+#define DEBUG_DUMP_VERTEXES(str, v0, v1, v2)    \
+    if( (pauseAtNext && (eventToPause == NEXT_TRIANGLE || eventToPause == NEXT_FLUSH_TRI)) && logTriangles )    \
+    {                                                              \
+        DebuggerAppendMsg("%s:%d(%08X),%d(%08X),%d(%08X)\n", (str),\
+        (v0), GetVertexDiffuseColor((v0)),              \
+        (v1), GetVertexDiffuseColor((v1)),              \
+        (v2), GetVertexDiffuseColor((v2)));             \
+    }
+
+#define DEBUGGER_IF(op)     if(op)
+#define DEBUGGER_PAUSE(op)  if(pauseAtNext && eventToPause == op){pauseAtNext = false;CGraphicsContext::Get()->UpdateFrame(); debuggerPause = true;}
+extern void DEBUGGER_PAUSE_COUNT_N(uint32 event);
+extern void DEBUGGER_PAUSE_COUNT_N_WITHOUT_UPDATE(uint32 val);
+#define DebuggerPauseCountN DEBUGGER_PAUSE_COUNT_N
+#define DEBUGGER_PAUSE_AND_DUMP(op,dumpfuc)     \
+    if(pauseAtNext && eventToPause == op)   \
+    {   pauseAtNext = false;debuggerPause = true; CGraphicsContext::Get()->UpdateFrame(); dumpfuc;}
+#define DEBUGGER_PAUSE_AND_DUMP_NO_UPDATE(op,dumpfuc)       \
+    if(pauseAtNext && eventToPause == op)   \
+    {   pauseAtNext = false;debuggerPause = true; dumpfuc;}
+
+#define DEBUGGER_PAUSE_AND_DUMP_COUNT_N(op,dumpfuc)     \
+    if(pauseAtNext && eventToPause == op)   \
+{   if( debuggerPauseCount > 0 ) debuggerPauseCount--; if( debuggerPauseCount == 0 ){pauseAtNext = false;debuggerPause = true; CGraphicsContext::Get()->UpdateFrame(); dumpfuc;}}
+
+#define DEBUGGER_PAUSE_AT_COND_AND_DUMP_COUNT_N(cond,dumpfuc)       \
+    if(pauseAtNext && (cond) )  \
+{   if( debuggerPauseCount > 0 ) debuggerPauseCount--; if( debuggerPauseCount == 0 ){pauseAtNext = false;debuggerPause = true; CGraphicsContext::Get()->UpdateFrame(); dumpfuc;}}
+
+void RDP_NOIMPL_Real(const char* op,uint32,uint32) ;
+#define RSP_RDP_NOIMPL RDP_NOIMPL_Real
+#define DEBUGGER_IF_DUMP(cond, dumpfunc)    {if(cond) {dumpfunc}}
+#define TXTRBUF_DUMP(dumpfunc)              DEBUGGER_IF_DUMP((logTextureBuffer), dumpfunc)
+#define TXTRBUF_DETAIL_DUMP(dumpfunc)       DEBUGGER_IF_DUMP((logTextureBuffer&&logDetails), dumpfunc)
+#define TXTRBUF_OR_CI_DUMP(dumpfunc)        DEBUGGER_IF_DUMP((logTextureBuffer || (pauseAtNext && eventToPause == NEXT_SET_CIMG)), dumpfunc)
+#define TXTRBUF_OR_CI_DETAIL_DUMP(dumpfunc) DEBUGGER_IF_DUMP(((logTextureBuffer || (pauseAtNext && eventToPause == NEXT_SET_CIMG))&&logDetails), dumpfunc)
+#define VTX_DUMP(dumpfunc)                  DEBUGGER_IF_DUMP((logVertex && pauseAtNext), dumpfunc)
+#define TRI_DUMP(dumpfunc)                  DEBUGGER_IF_DUMP((logTriangles && pauseAtNext), dumpfunc)
+#define LIGHT_DUMP(dumpfunc)                DEBUGGER_IF_DUMP((eventToPause == NEXT_SET_LIGHT && pauseAtNext), dumpfunc)
+#define WARNING(dumpfunc)                   DEBUGGER_IF_DUMP(logWarning, dumpfunc)
+#define FOG_DUMP(dumpfunc)                  DEBUGGER_IF_DUMP(logFog, dumpfunc)
+#define LOG_TEXTURE(dumpfunc)               DEBUGGER_IF_DUMP((logTextures || (pauseAtNext && eventToPause==NEXT_TEXTURE_CMD) ), dumpfunc)
+#define DEBUGGER_ONLY_IF                    DEBUGGER_IF_DUMP
+#define DEBUGGER_ONLY(func) {func}
+
+#define TRACE0(arg0)                            {DebuggerAppendMsg(arg0);}
+#define TRACE1(arg0,arg1)                       {DebuggerAppendMsg(arg0,arg1);}
+#define TRACE2(arg0,arg1,arg2)                  {DebuggerAppendMsg(arg0,arg1,arg2);}
+#define TRACE3(arg0,arg1,arg2,arg3)             {DebuggerAppendMsg(arg0,arg1,arg2,arg3);}
+#define TRACE4(arg0,arg1,arg2,arg3,arg4)        {DebuggerAppendMsg(arg0,arg1,arg2,arg3,arg4);}
+#define TRACE5(arg0,arg1,arg2,arg3,arg4,arg5)   {DebuggerAppendMsg(arg0,arg1,arg2,arg3,arg4,arg5);}
+
+#define DEBUG_TRIANGLE(dumpfunc) { if(pauseAtNext && eventToPause==NEXT_TRIANGLE ) { eventToPause = NEXT_FLUSH_TRI; debuggerPause = true; DEBUGGER_PAUSE(NEXT_FLUSH_TRI); dumpfunc} }
+
+#else
+#define DEBUG_DUMP_VERTEXES(str, v0, v1, v2)
+#define DEBUGGER_IF(op)
+#define DEBUGGER_PAUSE(op)
+#define DEBUGGER_PAUSE_COUNT_N(op)
+#define DEBUGGER_PAUSE_AND_DUMP(op,dumpfuc)
+#define DebuggerPauseCountN DEBUGGER_PAUSE_COUNT_N
+#define DEBUGGER_PAUSE_AT_COND_AND_DUMP_COUNT_N(cond,dumpfuc)
+#define DEBUGGER_PAUSE_AND_DUMP_COUNT_N(op,dumpfuc) 
+#define DEBUGGER_PAUSE_COUNT_N_WITHOUT_UPDATE(op)
+#define DEBUGGER_PAUSE_AND_DUMP_NO_UPDATE(op,dumpfuc)
+#define RSP_RDP_NOIMPL(a,b,c)
+void __cdecl DebuggerAppendMsg(const char * Message, ...);
+#define DumpHex(rdramAddr, count)   
+#define DEBUGGER_IF_DUMP(cond, dumpfunc)
+#define TXTRBUF_DUMP(dumpfunc)
+#define TXTRBUF_DETAIL_DUMP(dumpfunc)
+#define TXTRBUF_OR_CI_DUMP(dumpfunc)
+#define TXTRBUF_OR_CI_DETAIL_DUMP(dumpfunc)
+#define VTX_DUMP(dumpfunc)
+#define TRI_DUMP(dumpfunc)
+#define LIGHT_DUMP(dumpfunc)
+#define WARNING(dumpfunc)
+#define FOG_DUMP(dumpfunc)
+#define LOG_TEXTURE(dumpfunc)
+#define DEBUGGER_ONLY_IF    DEBUGGER_IF_DUMP
+#define DEBUGGER_ONLY(func)
+#define DumpMatrix(a,b)
+
+#define TRACE0(arg0)        {}
+#define TRACE1(arg0,arg1)   {}
+#define TRACE2(arg0,arg1,arg2)      {}
+#define TRACE3(arg0,arg1,arg2,arg3) {}
+#define TRACE4(arg0,arg1,arg2,arg3,arg4)        {}
+#define TRACE5(arg0,arg1,arg2,arg3,arg4,arg5)   {}
+
+#define DEBUG_TRIANGLE(arg0)    {}
+
+#endif
+
+#endif // !defined(DEBUGGER_H)
+