glvreplay_xgl: Add 'EnableLayers' setting to control which XGL validation layers get enabled.
* The string is a comma separated list of layer names, defaulting to "Drawstate,ObjectTracker".
* Fix the way in which the settings are assigned to the default values, as the previous approach was attempting to delete the default 'EnableLayers' value, which would have caused problems eventually.
diff --git a/glave-generate.py b/glave-generate.py
index bcab9b5..6fa69d9 100755
--- a/glave-generate.py
+++ b/glave-generate.py
@@ -2109,17 +2109,25 @@
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 XGL_CHAR * layersStr[2] = {(XGL_CHAR *) "DrawState", (XGL_CHAR *) "ObjectTracker"};')
+# cd_body.append(' const XGL_CHAR * layersStr[2] = {(XGL_CHAR *) "DrawState", (XGL_CHAR *) "ObjectTracker"};')
+
+ cd_body.append(' unsigned int numLayers = 0;')
+ cd_body.append(' XGL_CHAR ** layersStr = get_enableLayers_list(&numLayers);')
cd_body.append(' XGL_LAYER_CREATE_INFO layerInfo;')
cd_body.append(' pCreateInfoSaved = (XGL_DEVICE_CREATE_INFO *) pPacket->pCreateInfo;')
cd_body.append(' ci = (XGL_DEVICE_CREATE_INFO *) pPacket->pCreateInfo;')
- cd_body.append(' while (ci->pNext != NULL)')
- cd_body.append(' ci = (XGL_DEVICE_CREATE_INFO *) ci->pNext;')
- cd_body.append(' ci->pNext = &layerInfo;')
- cd_body.append(' layerInfo.sType = XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO;')
- cd_body.append(' layerInfo.pNext = 0;')
- cd_body.append(' layerInfo.layerCount = 2;')
- cd_body.append(' layerInfo.ppActiveLayerNames = layersStr;')
+
+ cd_body.append(' if (layersStr != NULL && numLayers > 0)')
+ cd_body.append(' {')
+ cd_body.append(' while (ci->pNext != NULL)')
+ cd_body.append(' ci = (XGL_DEVICE_CREATE_INFO *) ci->pNext;')
+ cd_body.append(' ci->pNext = &layerInfo;')
+ cd_body.append(' layerInfo.sType = XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO;')
+ cd_body.append(' layerInfo.pNext = 0;')
+ cd_body.append(' layerInfo.layerCount = numLayers;')
+ cd_body.append(' layerInfo.ppActiveLayerNames = layersStr;')
+ cd_body.append(' }')
+
cd_body.append(' memcpy(&cInfo, pPacket->pCreateInfo, sizeof(XGL_DEVICE_CREATE_INFO));')
cd_body.append(' cInfo.flags = pPacket->pCreateInfo->flags | XGL_DEVICE_CREATE_VALIDATION_BIT;')
cd_body.append(' cInfo.maxValidationLevel = (XGL_VALIDATION_LEVEL)((g_xglReplaySettings.debugLevel <= 4) ? XGL_VALIDATION_LEVEL_0 + g_xglReplaySettings.debugLevel : XGL_VALIDATION_LEVEL_0);')
@@ -2128,6 +2136,7 @@
cd_body.append(' // restore the packet for next replay')
cd_body.append(' ci->pNext = NULL;')
cd_body.append(' pPacket->pCreateInfo = pCreateInfoSaved;')
+ 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(' }')