glave: Add Dump() to debugger so DrawState dumping can occur on pauses
authorJon Ashburn <jon@lunarg.com>
Tue, 17 Feb 2015 20:28:11 +0000 (13:28 -0700)
committerJon Ashburn <jon@lunarg.com>
Tue, 24 Feb 2015 18:52:55 +0000 (11:52 -0700)
Conflicts:
glave-generate.py

glave-generate.py

index 258c353..7742d55 100755 (executable)
@@ -1824,6 +1824,7 @@ class Subcommand(object):
         cd_body.append('    virtual int init(glv_replay::Display & disp) = 0;')
         cd_body.append('    virtual void push_validation_msg(XGL_VALIDATION_LEVEL validationLevel, XGL_BASE_OBJECT srcObject, size_t location, int32_t msgCode, const char* pMsg) = 0;')
         cd_body.append('    virtual glv_replay::GLV_REPLAY_RESULT pop_validation_msgs() = 0;')
+        cd_body.append('    virtual int dump_validation_data() = 0;')
         cd_body.append('};\n')
         cd_body.append('class xglDisplay: public glv_replay::DisplayImp {')
         cd_body.append('friend class xglReplay;')
@@ -1932,8 +1933,10 @@ class Subcommand(object):
         rc_body.append('    glv_replay::GLV_REPLAY_RESULT handle_replay_errors(const char* entrypointName, const XGL_RESULT resCall, const XGL_RESULT resTrace, const glv_replay::GLV_REPLAY_RESULT resIn);\n')
         rc_body.append('    void push_validation_msg(XGL_VALIDATION_LEVEL validationLevel, XGL_BASE_OBJECT srcObject, size_t location, int32_t msgCode, const char* pMsg);')
         rc_body.append('    glv_replay::GLV_REPLAY_RESULT pop_validation_msgs();')
+        rc_body.append('    int dump_validation_data();')
         rc_body.append('private:')
         rc_body.append('    struct xglFuncs m_xglFuncs;')
+        rc_body.append('    DRAW_STATE_DUMP_DOT_FILE m_pDSDump;')
         rc_body.append('    xglDisplay *m_display;')
         rc_body.append('    struct shaderPair {')
         rc_body.append('        XGL_SHADER *addr;')
@@ -2406,6 +2409,15 @@ class Subcommand(object):
         rvf_body.append('    m_validationMsgs.clear();')
         rvf_body.append('    return glv_replay::GLV_REPLAY_VALIDATION_ERROR;')
         rvf_body.append('}')
+        rvf_body.append('int xglReplay::dump_validation_data()')
+        rvf_body.append('{')
+        rvf_body.append('   if  (m_pDSDump)')
+        rvf_body.append('   {')
+        rvf_body.append('       m_pDSDump((char *) "pipeline_dump.dot");')
+        rvf_body.append('       return 0;')
+        rvf_body.append('   }')
+        rvf_body.append('   return -1;')
+        rvf_body.append('}')
         return "\n".join(rvf_body)
 
     def _generate_replay_init_funcs(self):
@@ -2557,9 +2569,6 @@ class Subcommand(object):
         cd_body.append('                if (g_xglReplaySettings.debugLevel > 0)')
         cd_body.append('                {')
         cd_body.append('                    XGL_DEVICE_CREATE_INFO cInfo, *ci, *pCreateInfoSaved;')
-        cd_body.append('                    // TODO what is the real list of layers to be running with??')
-#        cd_body.append('                    const char * layersStr[2] = {(char *) "DrawState", (char *) "ObjectTracker"};')
-
         cd_body.append('                    unsigned int numLayers = 0;')
         cd_body.append('                    char ** layersStr = get_enableLayers_list(&numLayers);')
         cd_body.append('                    apply_layerSettings_overrides();')
@@ -2589,6 +2598,7 @@ class Subcommand(object):
         cd_body.append('                    release_enableLayer_list(layersStr);')
         cd_body.append('                    if (xglDbgRegisterMsgCallback(g_fpDbgMsgCallback, NULL) != XGL_SUCCESS)')
         cd_body.append('                        glv_LogError("Failed to register xgl callback for replayer error handling\\n");')
+        cd_body.append('                    m_pDSDump = (DRAW_STATE_DUMP_DOT_FILE) m_xglFuncs.real_xglGetProcAddr(remap(pPacket->gpu), "drawStateDumpDotFile");')
         cd_body.append('                }')
         cd_body.append('                else ')
         cd_body.append('                    replayResult = m_xglFuncs.real_xglCreateDevice(remap(pPacket->gpu), pPacket->pCreateInfo, &device);')
@@ -3645,6 +3655,7 @@ class GlaveReplayHeader(Subcommand):
         header_txt.append('#else')
         header_txt.append('#include "xglWsiWinExt.h"')
         header_txt.append('#endif')
+        header_txt.append('#include "draw_state.h"')
         return "\n".join(header_txt)
 
     def generate_body(self):