rc_body.append('private:')
rc_body.append(' struct xglFuncs m_xglFuncs;')
rc_body.append(' DRAW_STATE_DUMP_DOT_FILE m_pDSDump;')
+ rc_body.append(' DRAW_STATE_DUMP_COMMAND_BUFFER_DOT_FILE m_pCBDump;')
rc_body.append(' xglDisplay *m_display;')
rc_body.append(' struct shaderPair {')
rc_body.append(' XGL_SHADER *addr;')
rvf_body.append('}')
rvf_body.append('int xglReplay::dump_validation_data()')
rvf_body.append('{')
- rvf_body.append(' if (m_pDSDump)')
+ rvf_body.append(' if (!m_pDSDump || !m_pCBDump)')
rvf_body.append(' {')
- rvf_body.append(' m_pDSDump((char *) "pipeline_dump.dot");')
- rvf_body.append(' return 0;')
+ rvf_body.append(' return -1;')
rvf_body.append(' }')
- rvf_body.append(' return -1;')
+ rvf_body.append(' m_pDSDump((char *) "pipeline_dump.dot");')
+ rvf_body.append(' m_pCBDump((char *) "cb_dump.dot");')
+ rvf_body.append(' return 0;')
rvf_body.append('}')
return "\n".join(rvf_body)
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(' m_pCBDump = (DRAW_STATE_DUMP_COMMAND_BUFFER_DOT_FILE) m_xglFuncs.real_xglGetProcAddr(remap(pPacket->gpu), "drawStateDumpCommandBufferDotFile");')
cd_body.append(' }')
cd_body.append(' else ')
cd_body.append(' replayResult = m_xglFuncs.real_xglCreateDevice(remap(pPacket->gpu), pPacket->pCreateInfo, &device);')
//prototypes for extension functions
void drawStateDumpDotFile(char* outFileName);
void drawStateDumpPngFile(char* outFileName);
+void drawStateDumpCommandBufferDotFile(char* outFileName);
// Func ptr typedefs
typedef void (*DRAW_STATE_DUMP_DOT_FILE)(char*);
typedef void (*DRAW_STATE_DUMP_PNG_FILE)(char*);
+typedef void (*DRAW_STATE_DUMP_COMMAND_BUFFER_DOT_FILE)(char*);