{
const char *strOpt;
// initialize DrawState options
- g_reportingLevel = getLayerOptionEnum("DrawStateReportLevel", g_reportingLevel);
- g_debugAction = getLayerOptionEnum("DrawStateDebugAction", g_debugAction);
+ getLayerOptionEnum("DrawStateReportLevel", &g_reportingLevel);
+ g_actionIsDefault = getLayerOptionEnum("DrawStateDebugAction", &g_debugAction);
if (g_debugAction & XGL_DBG_LAYER_ACTION_LOG_MSG)
{
pNewDbgFuncNode->pUserData = pUserData;
pNewDbgFuncNode->pNext = g_pDbgFunctionHead;
g_pDbgFunctionHead = pNewDbgFuncNode;
+ // force callbacks if DebugAction hasn't been set already other than initial value
+ if (g_actionIsDefault)
+ g_debugAction = XGL_DBG_LAYER_ACTION_CALLBACK;
XGL_RESULT result = nextTable.DbgRegisterMsgCallback(pfnMsgCallback, pUserData);
return result;
}
pPrev = pTrav;
pTrav = pTrav->pNext;
}
+ if (g_pDbgFunctionHead == NULL)
+ {
+ if (g_actionIsDefault)
+ g_debugAction = XGL_DBG_LAYER_ACTION_LOG_MSG;
+ else
+ g_debugAction &= ~XGL_DBG_LAYER_ACTION_CALLBACK;
+ }
XGL_RESULT result = nextTable.DbgUnregisterMsgCallback(pfnMsgCallback);
return result;
}
return g_configFileObj.getOption(_option);
}
-uint32_t getLayerOptionEnum(const char *_option, uint32_t optionDefault)
+bool getLayerOptionEnum(const char *_option, uint32_t *optionDefault)
{
- uint32_t val = 0;
+ bool res;
const char *option = (g_configFileObj.getOption(_option));
if (option != NULL) {
- val = convertStringEnumVal(option);
+ *optionDefault = convertStringEnumVal(option);
+ res = false;
} else {
- val = optionDefault;
+ res = true;
}
- return val;
+ return res;
}
void setLayerOptionEnum(const char *_option, const char *_valEnum)
*
**************************************************************************/
#pragma once
+#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
const char *getLayerOption(const char *_option);
-uint32_t getLayerOptionEnum(const char *_option, uint32_t optionDefault);
+bool getLayerOptionEnum(const char *_option, uint32_t *optionDefault);
void setLayerOption(const char *_option, const char *_val);
void setLayerOptionEnum(const char *_option, const char *_valEnum);
* DEALINGS IN THE SOFTWARE.
*/
#include <stdio.h>
+#include <stdbool.h>
static XGL_LAYER_DBG_FUNCTION_NODE *g_pDbgFunctionHead = NULL;
static XGL_LAYER_DBG_REPORT_LEVEL g_reportingLevel = XGL_DBG_LAYER_LEVEL_INFO;
static XGL_LAYER_DBG_ACTION g_debugAction = XGL_DBG_LAYER_ACTION_LOG_MSG;
+static bool g_actionIsDefault = true;
static FILE *g_logFile = NULL;
// Utility function to handle reporting
{
const char *strOpt;
// initialize MemTracker options
- g_reportingLevel = getLayerOptionEnum("MemTrackerReportLevel", g_reportingLevel);
- g_debugAction = getLayerOptionEnum("MemTrackerDebugAction", g_debugAction);
+ getLayerOptionEnum("MemTrackerReportLevel", &g_reportingLevel);
+ g_actionIsDefault = getLayerOptionEnum("MemTrackerDebugAction", &g_debugAction);
if (g_debugAction & XGL_DBG_LAYER_ACTION_LOG_MSG)
{
pNewDbgFuncNode->pUserData = pUserData;
pNewDbgFuncNode->pNext = g_pDbgFunctionHead;
g_pDbgFunctionHead = pNewDbgFuncNode;
+ // force callbacks if DebugAction hasn't been set already other than initial value
+ if (g_actionIsDefault)
+ g_debugAction = XGL_DBG_LAYER_ACTION_CALLBACK;
XGL_RESULT result = nextTable.DbgRegisterMsgCallback(pfnMsgCallback, pUserData);
return result;
}
pPrev = pTrav;
pTrav = pTrav->pNext;
}
+ if (g_pDbgFunctionHead == NULL)
+ {
+ if (g_actionIsDefault)
+ g_debugAction = XGL_DBG_LAYER_ACTION_LOG_MSG;
+ else
+ g_debugAction &= ~XGL_DBG_LAYER_ACTION_CALLBACK;
+ }
XGL_RESULT result = nextTable.DbgUnregisterMsgCallback(pfnMsgCallback);
return result;
}
r_body.append(' pNewDbgFuncNode->pUserData = pUserData;')
r_body.append(' pNewDbgFuncNode->pNext = g_pDbgFunctionHead;')
r_body.append(' g_pDbgFunctionHead = pNewDbgFuncNode;')
+ r_body.append(' // force callbacks if DebugAction hasn\'t been set already other than initial value')
+ r_body.append(' if (g_actionIsDefault)')
+ r_body.append(' g_debugAction = XGL_DBG_LAYER_ACTION_CALLBACK;')
r_body.append(' XGL_RESULT result = nextTable.DbgRegisterMsgCallback(pfnMsgCallback, pUserData);')
r_body.append(' return result;')
r_body.append('}')
ur_body.append(' pPrev = pTrav;')
ur_body.append(' pTrav = pTrav->pNext;')
ur_body.append(' }')
+ ur_body.append(' if (g_pDbgFunctionHead == NULL)')
+ ur_body.append(' {')
+ ur_body.append(' if (g_actionIsDefault)')
+ ur_body.append(' g_debugAction = XGL_DBG_LAYER_ACTION_LOG_MSG;')
+ ur_body.append(' else')
+ ur_body.append(' g_debugAction &= ~XGL_DBG_LAYER_ACTION_CALLBACK;')
+ ur_body.append(' }')
ur_body.append(' XGL_RESULT result = nextTable.DbgUnregisterMsgCallback(pfnMsgCallback);')
ur_body.append(' return result;')
ur_body.append('}')
using_line += ' pNewDbgFuncNode->pUserData = pUserData;\n'
using_line += ' pNewDbgFuncNode->pNext = g_pDbgFunctionHead;\n'
using_line += ' g_pDbgFunctionHead = pNewDbgFuncNode;\n'
+ using_line += ' // force callbacks if DebugAction hasn\'t been set already other than initial value\n'
+ using_line += ' if (g_actionIsDefault)\n'
+ using_line += ' g_debugAction = XGL_DBG_LAYER_ACTION_CALLBACK;\n'
elif 'DbgUnregisterMsgCallback' in proto.name:
using_line = ' XGL_LAYER_DBG_FUNCTION_NODE *pTrav = g_pDbgFunctionHead;\n'
using_line += ' XGL_LAYER_DBG_FUNCTION_NODE *pPrev = pTrav;\n'
using_line += ' pPrev = pTrav;\n'
using_line += ' pTrav = pTrav->pNext;\n'
using_line += ' }\n'
+ using_line += ' if (g_pDbgFunctionHead == NULL)\n'
+ using_line += ' {\n'
+ using_line += ' if (g_actionIsDefault)\n'
+ using_line += ' g_debugAction = XGL_DBG_LAYER_ACTION_LOG_MSG;\n'
+ using_line += ' else\n'
+ using_line += ' g_debugAction &= ~XGL_DBG_LAYER_ACTION_CALLBACK;\n'
+ using_line += ' }\n'
# Special cases for API funcs that don't use an object as first arg
elif True in [no_use_proto in proto.name for no_use_proto in ['GlobalOption', 'CreateInstance', 'QueueSubmit', 'QueueSetGlobalMemReferences', 'QueueWaitIdle', 'CreateDevice', 'SignalQueueSemaphore', 'WaitQueueSemaphore', 'WsiX11QueuePresent']]:
using_line = ''
if init_opts:
func_body.append(' const char *strOpt;')
func_body.append(' // initialize %s options' % name)
- func_body.append(' g_reportingLevel = getLayerOptionEnum("%sReportLevel", g_reportingLevel);' % name)
- func_body.append(' g_debugAction = getLayerOptionEnum("%sDebugAction", g_debugAction);' % name)
+ func_body.append(' getLayerOptionEnum("%sReportLevel", &g_reportingLevel);' % name)
+ func_body.append(' g_actionIsDefault = getLayerOptionEnum("%sDebugAction", &g_debugAction);' % name)
func_body.append('')
func_body.append(' if (g_debugAction & XGL_DBG_LAYER_ACTION_LOG_MSG)')
func_body.append(' {')