From 418bc36eb149da85000a58909d60b4de74ee02c9 Mon Sep 17 00:00:00 2001 From: Peter Lohrmann Date: Fri, 9 Jan 2015 12:34:50 -0800 Subject: 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. --- glave-generate.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/glave-generate.py b/glave-generate.py index bcab9b52..6fa69d97 100755 --- a/glave-generate.py +++ b/glave-generate.py @@ -2109,17 +2109,25 @@ class Subcommand(object): 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 @@ class Subcommand(object): 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(' }') -- cgit v1.2.3