aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Lohrmann <peterl@valvesoftware.com>2015-02-27 08:34:47 -0800
committerPeter Lohrmann <peterl@valvesoftware.com>2015-02-27 08:38:07 -0800
commitc6f4127c6e3a5f69c5f5f3ebba2c7ed40442bba3 (patch)
tree5e00cacd9cec63aa1986c7e918edf686a394c353
parenteeb77b76a815d6b534670764089f819fd5f8d2b1 (diff)
parent8f19c7f45b3b4690482487fa151652ce82b287a4 (diff)
downloadusermoji-c6f4127c6e3a5f69c5f5f3ebba2c7ed40442bba3.tar.xz
Merge ReplayThread change with Detach Replay Window.
-rwxr-xr-xglave-generate.py11
-rw-r--r--layers/draw_state.h2
-rw-r--r--layers/mem_tracker.c16
3 files changed, 19 insertions, 10 deletions
diff --git a/glave-generate.py b/glave-generate.py
index 94de7d1f..e8a0adb7 100755
--- a/glave-generate.py
+++ b/glave-generate.py
@@ -1945,6 +1945,7 @@ class Subcommand(object):
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;')
@@ -2420,12 +2421,13 @@ class Subcommand(object):
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)
@@ -2608,6 +2610,7 @@ class Subcommand(object):
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);')
diff --git a/layers/draw_state.h b/layers/draw_state.h
index 7466e389..3fcf820e 100644
--- a/layers/draw_state.h
+++ b/layers/draw_state.h
@@ -220,6 +220,8 @@ typedef struct _GLOBAL_CB_NODE {
//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*);
diff --git a/layers/mem_tracker.c b/layers/mem_tracker.c
index df2cdd73..0c36934a 100644
--- a/layers/mem_tracker.c
+++ b/layers/mem_tracker.c
@@ -365,7 +365,7 @@ static void reportMemReferences(const GLOBAL_MEM_OBJ_NODE* pMemObjTrav)
if (refCount != pMemObjTrav->refCount) {
char str[1024];
sprintf(str, "Refcount of %u for Mem Obj %p does't match reported refs of %u", pMemObjTrav->refCount, pMemObjTrav->mem, refCount);
- layerCbMsg(XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0, pObjTrav->object, 0, MEMTRACK_INTERNAL_ERROR, "MEM", str);
+ layerCbMsg(XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0, pMemObjTrav->mem, 0, MEMTRACK_INTERNAL_ERROR, "MEM", str);
}
}
@@ -558,10 +558,10 @@ static bool32_t updateObjectBinding(XGL_OBJECT object, XGL_GPU_MEMORY mem)
}
char str[1024];
GLOBAL_OBJECT_NODE* pGlobalObjTrav = getGlobalObjectNode(object);
- assert(pGlobalObjTrav);
if (!pGlobalObjTrav) {
sprintf(str, "Attempting to update Binding of Obj(%p) that's not in global list()", (void*)object);
layerCbMsg(XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0, object, 0, MEMTRACK_INTERNAL_ERROR, "MEM", str);
+ return XGL_FALSE;
}
// non-null case so should have real mem obj
GLOBAL_MEM_OBJ_NODE* pTrav = getGlobalMemNode(mem);
@@ -655,11 +655,15 @@ static void printMemList()
layerCbMsg(XGL_DBG_MSG_UNKNOWN, XGL_VALIDATION_LEVEL_0, NULL, 0, MEMTRACK_NONE, "MEM", str);
sprintf(str, " pNext Mem Obj Node: %p", (void*)pTrav->pNextGlobalNode);
layerCbMsg(XGL_DBG_MSG_UNKNOWN, XGL_VALIDATION_LEVEL_0, NULL, 0, MEMTRACK_NONE, "MEM", str);
- if (0 != pTrav->allocInfo.allocationSize)
- sprintf(str, " Mem Alloc info:\n%s", xgl_print_xgl_memory_alloc_info(&pTrav->allocInfo, "{MEM}INFO : "));
- else
+ if (0 != pTrav->allocInfo.allocationSize) {
+ char* pAllocInfoMsg = xgl_print_xgl_memory_alloc_info(&pTrav->allocInfo, "{MEM}INFO : ");
+ sprintf(str, " Mem Alloc info:\n%s", pAllocInfoMsg);
+ layerCbMsg(XGL_DBG_MSG_UNKNOWN, XGL_VALIDATION_LEVEL_0, NULL, 0, MEMTRACK_NONE, "MEM", str);
+ free(pAllocInfoMsg);
+ } else {
sprintf(str, " Mem Alloc info is NULL (alloc done by xglWsiX11CreatePresentableImage())");
- layerCbMsg(XGL_DBG_MSG_UNKNOWN, XGL_VALIDATION_LEVEL_0, NULL, 0, MEMTRACK_NONE, "MEM", str);
+ layerCbMsg(XGL_DBG_MSG_UNKNOWN, XGL_VALIDATION_LEVEL_0, NULL, 0, MEMTRACK_NONE, "MEM", str);
+ }
MINI_NODE* pObjTrav = pTrav->pObjBindings;
if (!pObjTrav) {
sprintf(str, " No XGL Object bindings");