layers: Fix memory overrun issue causing segfault.
diff --git a/layers/xgl_string_helper.h b/layers/xgl_string_helper.h
index ed0d1b1..c61a21c 100644
--- a/layers/xgl_string_helper.h
+++ b/layers/xgl_string_helper.h
@@ -1111,6 +1111,9 @@
     case XGL_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO:
         return "XGL_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO";
 
+    case XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO:
+        return "XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO";
+
     case XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO:
         return "XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO";
 
@@ -1147,6 +1150,9 @@
     case XGL_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO:
         return "XGL_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO";
 
+    case XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO:
+        return "XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO";
+
     case XGL_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO:
         return "XGL_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO";
 
@@ -1438,6 +1444,9 @@
     case XGL_CH_FMT_R16G16:
         return "XGL_CH_FMT_R16G16";
 
+    case XGL_CH_FMT_R16G16B16:
+        return "XGL_CH_FMT_R16G16B16";
+
     case XGL_CH_FMT_R16G16B16A16:
         return "XGL_CH_FMT_R16G16B16A16";
 
@@ -1477,6 +1486,9 @@
     case XGL_CH_FMT_R8G8:
         return "XGL_CH_FMT_R8G8";
 
+    case XGL_CH_FMT_R8G8B8:
+        return "XGL_CH_FMT_R8G8B8";
+
     case XGL_CH_FMT_R8G8B8A8:
         return "XGL_CH_FMT_R8G8B8A8";
 
@@ -1738,3 +1750,24 @@
     return "Unhandled XGL_BLEND";
 }
 
+
+static const char* string_XGL_VERTEX_INPUT_STEP_RATE(XGL_VERTEX_INPUT_STEP_RATE input_value)
+{
+    switch ((XGL_VERTEX_INPUT_STEP_RATE)input_value)
+    {
+
+    case XGL_VERTEX_INPUT_STEP_RATE_DRAW:
+        return "XGL_VERTEX_INPUT_STEP_RATE_DRAW";
+
+    case XGL_VERTEX_INPUT_STEP_RATE_INSTANCE:
+        return "XGL_VERTEX_INPUT_STEP_RATE_INSTANCE";
+
+    case XGL_VERTEX_INPUT_STEP_RATE_VERTEX:
+        return "XGL_VERTEX_INPUT_STEP_RATE_VERTEX";
+
+    default:
+        return "Unhandled XGL_VERTEX_INPUT_STEP_RATE";
+    }
+    return "Unhandled XGL_VERTEX_INPUT_STEP_RATE";
+}
+
diff --git a/layers/xgl_struct_string_helper.h b/layers/xgl_struct_string_helper.h
index 8b22425..ffd9744 100644
--- a/layers/xgl_struct_string_helper.h
+++ b/layers/xgl_struct_string_helper.h
@@ -15,8 +15,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sfillMode = %s\n%scullMode = %s\n%sfrontFace = %s\n%sdepthBias = %i\n%sdepthBiasClamp = %f\n%sslopeScaledDepthBias = %f\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_FILL_MODE(pStruct->fillMode), prefix, string_XGL_CULL_MODE(pStruct->cullMode), prefix, string_XGL_FACE_ORIENTATION(pStruct->frontFace), prefix, (pStruct->depthBias), prefix, (pStruct->depthBiasClamp), prefix, (pStruct->slopeScaledDepthBias));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sfillMode = %s\n%scullMode = %s\n%sfrontFace = %s\n%sdepthBias = %i\n%sdepthBiasClamp = %f\n%sslopeScaledDepthBias = %f\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_FILL_MODE(pStruct->fillMode), prefix, string_XGL_CULL_MODE(pStruct->cullMode), prefix, string_XGL_FACE_ORIENTATION(pStruct->frontFace), prefix, (pStruct->depthBias), prefix, (pStruct->depthBiasClamp), prefix, (pStruct->slopeScaledDepthBias), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -36,8 +36,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%simage = %p\n%sviewType = %s\n%sformat = %p\n%schannels = %p\n%ssubresourceRange = %p\n%sminLod = %f\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->image), prefix, string_XGL_IMAGE_VIEW_TYPE(pStruct->viewType), prefix, (void*)&(pStruct->format), prefix, (void*)&(pStruct->channels), prefix, (void*)&(pStruct->subresourceRange), prefix, (pStruct->minLod));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%simage = %p\n%sviewType = %s\n%sformat = %p\n%schannels = %p\n%ssubresourceRange = %p\n%sminLod = %f\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->image), prefix, string_XGL_IMAGE_VIEW_TYPE(pStruct->viewType), prefix, (void*)&(pStruct->format), prefix, (void*)&(pStruct->channels), prefix, (void*)&(pStruct->subresourceRange), prefix, (pStruct->minLod), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -50,8 +50,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%ssharedMem = %p\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->sharedMem));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%ssharedMem = %p\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->sharedMem), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -99,8 +99,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sflags = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->flags));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sflags = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->flags), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -127,8 +127,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%simage = %p\n%sformat = %p\n%smipLevel = %u\n%sbaseArraySlice = %u\n%sarraySize = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->image), prefix, (void*)&(pStruct->format), prefix, (pStruct->mipLevel), prefix, (pStruct->baseArraySlice), prefix, (pStruct->arraySize));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%simage = %p\n%sformat = %p\n%smipLevel = %u\n%sbaseArraySlice = %u\n%sarraySize = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->image), prefix, (void*)&(pStruct->format), prefix, (pStruct->mipLevel), prefix, (pStruct->baseArraySlice), prefix, (pStruct->arraySize), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -148,8 +148,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%ssamples = %u\n%ssampleMask = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->samples), prefix, (pStruct->sampleMask));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%ssamples = %u\n%ssampleMask = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->samples), prefix, (pStruct->sampleMask), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -162,8 +162,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sslots = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->slots));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sslots = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->slots), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -183,8 +183,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sflags = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->flags));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sflags = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->flags), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -204,8 +204,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%ssharedSemaphore = %p\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->sharedSemaphore));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%ssharedSemaphore = %p\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->sharedSemaphore), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -232,18 +232,25 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%scs = %p\n%sflags = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)&(pStruct->cs), prefix, (pStruct->flags));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%scs = %p\n%sflags = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)&(pStruct->cs), prefix, (pStruct->flags), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
     return str;
 }
-char* xgl_print_xgl_peer_image_open_info(const XGL_PEER_IMAGE_OPEN_INFO* pStruct, const char* prefix)
+char* xgl_print_xgl_layer_create_info(const XGL_LAYER_CREATE_INFO* pStruct, const char* prefix)
 {
     char* str;
-    str = (char*)malloc(sizeof(char)*1024);
-    sprintf(str, "%soriginalImage = %p\n", prefix, (void*)(pStruct->originalImage));
+    if (!pStruct->pNext) {
+        str = (char*)malloc(sizeof(char)*1024);
+        sprintf(str, "%ssType = %s\n%spNext = %p\n%slayerCount = %u\n%sppActiveLayerNames = %p\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->layerCount), prefix, (pStruct->ppActiveLayerNames));
+    } else {
+        char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
+        sprintf(str, "%ssType = %s\n%spNext = %p\n%slayerCount = %u\n%sppActiveLayerNames = %p\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->layerCount), prefix, (pStruct->ppActiveLayerNames), prefix, (void*)pStruct->pNext, pTmpStr);
+        free(pTmpStr);
+    }
     return str;
 }
 char* xgl_print_xgl_physical_gpu_queue_properties(const XGL_PHYSICAL_GPU_QUEUE_PROPERTIES* pStruct, const char* prefix)
@@ -253,11 +260,11 @@
     sprintf(str, "%sstructSize = %u\n%squeueFlags = %u\n%squeueCount = %u\n%smaxAtomicCounters = %u\n%ssupportsTimestamps = %s\n", prefix, (pStruct->structSize), prefix, (pStruct->queueFlags), prefix, (pStruct->queueCount), prefix, (pStruct->maxAtomicCounters), prefix, (pStruct->supportsTimestamps) ? "TRUE" : "FALSE");
     return str;
 }
-char* xgl_print_xgl_pipeline_statistics_data(const XGL_PIPELINE_STATISTICS_DATA* pStruct, const char* prefix)
+char* xgl_print_xgl_subresource_layout(const XGL_SUBRESOURCE_LAYOUT* pStruct, const char* prefix)
 {
     char* str;
     str = (char*)malloc(sizeof(char)*1024);
-    sprintf(str, "%sfsInvocations = %lu\n%scPrimitives = %lu\n%scInvocations = %lu\n%svsInvocations = %lu\n%sgsInvocations = %lu\n%sgsPrimitives = %lu\n%siaPrimitives = %lu\n%siaVertices = %lu\n%stcsInvocations = %lu\n%stesInvocations = %lu\n%scsInvocations = %lu\n", prefix, (pStruct->fsInvocations), prefix, (pStruct->cPrimitives), prefix, (pStruct->cInvocations), prefix, (pStruct->vsInvocations), prefix, (pStruct->gsInvocations), prefix, (pStruct->gsPrimitives), prefix, (pStruct->iaPrimitives), prefix, (pStruct->iaVertices), prefix, (pStruct->tcsInvocations), prefix, (pStruct->tesInvocations), prefix, (pStruct->csInvocations));
+    sprintf(str, "%soffset = %u\n%ssize = %u\n%srowPitch = %u\n%sdepthPitch = %u\n", prefix, (pStruct->offset), prefix, (pStruct->size), prefix, (pStruct->rowPitch), prefix, (pStruct->depthPitch));
     return str;
 }
 char* xgl_print_xgl_device_queue_create_info(const XGL_DEVICE_QUEUE_CREATE_INFO* pStruct, const char* prefix)
@@ -274,8 +281,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%smagFilter = %s\n%sminFilter = %s\n%smipMode = %s\n%saddressU = %s\n%saddressV = %s\n%saddressW = %s\n%smipLodBias = %f\n%smaxAnisotropy = %u\n%scompareFunc = %s\n%sminLod = %f\n%smaxLod = %f\n%sborderColorType = %s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_TEX_FILTER(pStruct->magFilter), prefix, string_XGL_TEX_FILTER(pStruct->minFilter), prefix, string_XGL_TEX_MIPMAP_MODE(pStruct->mipMode), prefix, string_XGL_TEX_ADDRESS(pStruct->addressU), prefix, string_XGL_TEX_ADDRESS(pStruct->addressV), prefix, string_XGL_TEX_ADDRESS(pStruct->addressW), prefix, (pStruct->mipLodBias), prefix, (pStruct->maxAnisotropy), prefix, string_XGL_COMPARE_FUNC(pStruct->compareFunc), prefix, (pStruct->minLod), prefix, (pStruct->maxLod), prefix, string_XGL_BORDER_COLOR_TYPE(pStruct->borderColorType));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%smagFilter = %s\n%sminFilter = %s\n%smipMode = %s\n%saddressU = %s\n%saddressV = %s\n%saddressW = %s\n%smipLodBias = %f\n%smaxAnisotropy = %u\n%scompareFunc = %s\n%sminLod = %f\n%smaxLod = %f\n%sborderColorType = %s\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_TEX_FILTER(pStruct->magFilter), prefix, string_XGL_TEX_FILTER(pStruct->minFilter), prefix, string_XGL_TEX_MIPMAP_MODE(pStruct->mipMode), prefix, string_XGL_TEX_ADDRESS(pStruct->addressU), prefix, string_XGL_TEX_ADDRESS(pStruct->addressV), prefix, string_XGL_TEX_ADDRESS(pStruct->addressW), prefix, (pStruct->mipLodBias), prefix, (pStruct->maxAnisotropy), prefix, string_XGL_COMPARE_FUNC(pStruct->compareFunc), prefix, (pStruct->minLod), prefix, (pStruct->maxLod), prefix, string_XGL_BORDER_COLOR_TYPE(pStruct->borderColorType), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -288,8 +295,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sinitialCount = %u\n%sflags = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->initialCount), prefix, (pStruct->flags));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sinitialCount = %u\n%sflags = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->initialCount), prefix, (pStruct->flags), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -309,8 +316,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%smem = %p\n%soldState = %s\n%snewState = %s\n%soffset = %u\n%sregionSize = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->mem), prefix, string_XGL_MEMORY_STATE(pStruct->oldState), prefix, string_XGL_MEMORY_STATE(pStruct->newState), prefix, (pStruct->offset), prefix, (pStruct->regionSize));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%smem = %p\n%soldState = %s\n%snewState = %s\n%soffset = %u\n%sregionSize = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->mem), prefix, string_XGL_MEMORY_STATE(pStruct->oldState), prefix, string_XGL_MEMORY_STATE(pStruct->newState), prefix, (pStruct->offset), prefix, (pStruct->regionSize), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -337,8 +344,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sview = %p\n%sstate = %s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->view), prefix, string_XGL_IMAGE_STATE(pStruct->state));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sview = %p\n%sstate = %s\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->view), prefix, string_XGL_IMAGE_STATE(pStruct->state), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -358,8 +365,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sformat = %p\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)&(pStruct->format));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sformat = %p\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)&(pStruct->format), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -372,8 +379,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%spAppName = %p\n%sappVersion = %u\n%spEngineName = %p\n%sengineVersion = %u\n%sapiVersion = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->pAppName), prefix, (pStruct->appVersion), prefix, (pStruct->pEngineName), prefix, (pStruct->engineVersion), prefix, (pStruct->apiVersion));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%spAppName = %p\n%sappVersion = %u\n%spEngineName = %p\n%sengineVersion = %u\n%sapiVersion = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->pAppName), prefix, (pStruct->appVersion), prefix, (pStruct->pEngineName), prefix, (pStruct->engineVersion), prefix, (pStruct->apiVersion), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -386,6 +393,13 @@
     sprintf(str, "%sx = %i\n%sy = %i\n", prefix, (pStruct->x), prefix, (pStruct->y));
     return str;
 }
+char* xgl_print_xgl_pipeline_statistics_data(const XGL_PIPELINE_STATISTICS_DATA* pStruct, const char* prefix)
+{
+    char* str;
+    str = (char*)malloc(sizeof(char)*1024);
+    sprintf(str, "%sfsInvocations = %lu\n%scPrimitives = %lu\n%scInvocations = %lu\n%svsInvocations = %lu\n%sgsInvocations = %lu\n%sgsPrimitives = %lu\n%siaPrimitives = %lu\n%siaVertices = %lu\n%stcsInvocations = %lu\n%stesInvocations = %lu\n%scsInvocations = %lu\n", prefix, (pStruct->fsInvocations), prefix, (pStruct->cPrimitives), prefix, (pStruct->cInvocations), prefix, (pStruct->vsInvocations), prefix, (pStruct->gsInvocations), prefix, (pStruct->gsPrimitives), prefix, (pStruct->iaPrimitives), prefix, (pStruct->iaVertices), prefix, (pStruct->tcsInvocations), prefix, (pStruct->tesInvocations), prefix, (pStruct->csInvocations));
+    return str;
+}
 char* xgl_print_xgl_viewport_state_create_info(const XGL_VIEWPORT_STATE_CREATE_INFO* pStruct, const char* prefix)
 {
     char* str;
@@ -407,8 +421,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%squeueRecordCount = %u\n%spRequestedQueues = %p\n%sextensionCount = %u\n%sppEnabledExtensionNames = %p\n%smaxValidationLevel = %s\n%sflags = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->queueRecordCount), prefix, (void*)(pStruct->pRequestedQueues), prefix, (pStruct->extensionCount), prefix, (pStruct->ppEnabledExtensionNames), prefix, string_XGL_VALIDATION_LEVEL(pStruct->maxValidationLevel), prefix, (pStruct->flags));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%squeueRecordCount = %u\n%spRequestedQueues = %p\n%sextensionCount = %u\n%sppEnabledExtensionNames = %p\n%smaxValidationLevel = %s\n%sflags = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->queueRecordCount), prefix, (void*)(pStruct->pRequestedQueues), prefix, (pStruct->extensionCount), prefix, (pStruct->ppEnabledExtensionNames), prefix, string_XGL_VALIDATION_LEVEL(pStruct->maxValidationLevel), prefix, (pStruct->flags), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -421,8 +435,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%simageType = %s\n%sformat = %p\n%sextent = %p\n%smipLevels = %u\n%sarraySize = %u\n%ssamples = %u\n%stiling = %s\n%susage = %u\n%sflags = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_IMAGE_TYPE(pStruct->imageType), prefix, (void*)&(pStruct->format), prefix, (void*)&(pStruct->extent), prefix, (pStruct->mipLevels), prefix, (pStruct->arraySize), prefix, (pStruct->samples), prefix, string_XGL_IMAGE_TILING(pStruct->tiling), prefix, (pStruct->usage), prefix, (pStruct->flags));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%simageType = %s\n%sformat = %p\n%sextent = %p\n%smipLevels = %u\n%sarraySize = %u\n%ssamples = %u\n%stiling = %s\n%susage = %u\n%sflags = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_IMAGE_TYPE(pStruct->imageType), prefix, (void*)&(pStruct->format), prefix, (void*)&(pStruct->extent), prefix, (pStruct->mipLevels), prefix, (pStruct->arraySize), prefix, (pStruct->samples), prefix, string_XGL_IMAGE_TILING(pStruct->tiling), prefix, (pStruct->usage), prefix, (pStruct->flags), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -491,18 +505,18 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%soriginalMem = %p\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->originalMem));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%soriginalMem = %p\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->originalMem), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
     return str;
 }
-char* xgl_print_xgl_subresource_layout(const XGL_SUBRESOURCE_LAYOUT* pStruct, const char* prefix)
+char* xgl_print_xgl_peer_image_open_info(const XGL_PEER_IMAGE_OPEN_INFO* pStruct, const char* prefix)
 {
     char* str;
     str = (char*)malloc(sizeof(char)*1024);
-    sprintf(str, "%soffset = %u\n%ssize = %u\n%srowPitch = %u\n%sdepthPitch = %u\n", prefix, (pStruct->offset), prefix, (pStruct->size), prefix, (pStruct->rowPitch), prefix, (pStruct->depthPitch));
+    sprintf(str, "%soriginalImage = %p\n", prefix, (void*)(pStruct->originalImage));
     return str;
 }
 char* xgl_print_xgl_descriptor_set_attach_info(const XGL_DESCRIPTOR_SET_ATTACH_INFO* pStruct, const char* prefix)
@@ -519,8 +533,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%spatchControlPoints = %u\n%soptimalTessFactor = %f\n%sfixedTessFactor = %f\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->patchControlPoints), prefix, (pStruct->optimalTessFactor), prefix, (pStruct->fixedTessFactor));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%spatchControlPoints = %u\n%soptimalTessFactor = %f\n%sfixedTessFactor = %f\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->patchControlPoints), prefix, (pStruct->optimalTessFactor), prefix, (pStruct->fixedTessFactor), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -533,8 +547,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sdepthClipEnable = %s\n%srasterizerDiscardEnable = %s\n%spointSize = %f\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->depthClipEnable) ? "TRUE" : "FALSE", prefix, (pStruct->rasterizerDiscardEnable) ? "TRUE" : "FALSE", prefix, (pStruct->pointSize));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sdepthClipEnable = %s\n%srasterizerDiscardEnable = %s\n%spointSize = %f\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->depthClipEnable) ? "TRUE" : "FALSE", prefix, (pStruct->rasterizerDiscardEnable) ? "TRUE" : "FALSE", prefix, (pStruct->pointSize), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -554,8 +568,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%scodeSize = %u\n%spCode = %p\n%sflags = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->codeSize), prefix, (pStruct->pCode), prefix, (pStruct->flags));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%scodeSize = %u\n%spCode = %p\n%sflags = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->codeSize), prefix, (pStruct->pCode), prefix, (pStruct->flags), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -568,8 +582,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sattachment = %p\n%sblendConst = %p\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->attachment), prefix, (void*)(pStruct->blendConst));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sattachment = %p\n%sblendConst = %p\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->attachment), prefix, (void*)(pStruct->blendConst), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -582,8 +596,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%salphaToCoverageEnable = %s\n%sdualSourceBlendEnable = %s\n%slogicOp = %s\n%sattachment = %p\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->alphaToCoverageEnable) ? "TRUE" : "FALSE", prefix, (pStruct->dualSourceBlendEnable) ? "TRUE" : "FALSE", prefix, string_XGL_LOGIC_OP(pStruct->logicOp), prefix, (void*)(pStruct->attachment));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%salphaToCoverageEnable = %s\n%sdualSourceBlendEnable = %s\n%slogicOp = %s\n%sattachment = %p\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->alphaToCoverageEnable) ? "TRUE" : "FALSE", prefix, (pStruct->dualSourceBlendEnable) ? "TRUE" : "FALSE", prefix, string_XGL_LOGIC_OP(pStruct->logicOp), prefix, (void*)(pStruct->attachment), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -596,8 +610,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sdepthTestEnable = %s\n%sdepthWriteEnable = %s\n%sdepthFunc = %s\n%sdepthBoundsEnable = %s\n%sminDepth = %f\n%smaxDepth = %f\n%sstencilTestEnable = %s\n%sstencilReadMask = %u\n%sstencilWriteMask = %u\n%sfront = %p\n%sback = %p\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->depthTestEnable) ? "TRUE" : "FALSE", prefix, (pStruct->depthWriteEnable) ? "TRUE" : "FALSE", prefix, string_XGL_COMPARE_FUNC(pStruct->depthFunc), prefix, (pStruct->depthBoundsEnable) ? "TRUE" : "FALSE", prefix, (pStruct->minDepth), prefix, (pStruct->maxDepth), prefix, (pStruct->stencilTestEnable) ? "TRUE" : "FALSE", prefix, (pStruct->stencilReadMask), prefix, (pStruct->stencilWriteMask), prefix, (void*)&(pStruct->front), prefix, (void*)&(pStruct->back));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sdepthTestEnable = %s\n%sdepthWriteEnable = %s\n%sdepthFunc = %s\n%sdepthBoundsEnable = %s\n%sminDepth = %f\n%smaxDepth = %f\n%sstencilTestEnable = %s\n%sstencilReadMask = %u\n%sstencilWriteMask = %u\n%sfront = %p\n%sback = %p\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->depthTestEnable) ? "TRUE" : "FALSE", prefix, (pStruct->depthWriteEnable) ? "TRUE" : "FALSE", prefix, string_XGL_COMPARE_FUNC(pStruct->depthFunc), prefix, (pStruct->depthBoundsEnable) ? "TRUE" : "FALSE", prefix, (pStruct->minDepth), prefix, (pStruct->maxDepth), prefix, (pStruct->stencilTestEnable) ? "TRUE" : "FALSE", prefix, (pStruct->stencilReadMask), prefix, (pStruct->stencilWriteMask), prefix, (void*)&(pStruct->front), prefix, (void*)&(pStruct->back), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -617,8 +631,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%simage = %p\n%smipLevel = %u\n%sbaseArraySlice = %u\n%sarraySize = %u\n%sflags = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->image), prefix, (pStruct->mipLevel), prefix, (pStruct->baseArraySlice), prefix, (pStruct->arraySize), prefix, (pStruct->flags));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%simage = %p\n%smipLevel = %u\n%sbaseArraySlice = %u\n%sarraySize = %u\n%sflags = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->image), prefix, (pStruct->mipLevel), prefix, (pStruct->baseArraySlice), prefix, (pStruct->arraySize), prefix, (pStruct->flags), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -638,8 +652,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%squeueType = %s\n%sflags = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_QUEUE_TYPE(pStruct->queueType), prefix, (pStruct->flags));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%squeueType = %s\n%sflags = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_QUEUE_TYPE(pStruct->queueType), prefix, (pStruct->flags), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -680,8 +694,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sflags = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->flags));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sflags = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->flags), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -694,8 +708,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%stopology = %s\n%sdisableVertexReuse = %s\n%sprovokingVertex = %s\n%sprimitiveRestartEnable = %s\n%sprimitiveRestartIndex = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_PRIMITIVE_TOPOLOGY(pStruct->topology), prefix, (pStruct->disableVertexReuse) ? "TRUE" : "FALSE", prefix, string_XGL_PROVOKING_VERTEX_CONVENTION(pStruct->provokingVertex), prefix, (pStruct->primitiveRestartEnable) ? "TRUE" : "FALSE", prefix, (pStruct->primitiveRestartIndex));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%stopology = %s\n%sdisableVertexReuse = %s\n%sprovokingVertex = %s\n%sprimitiveRestartEnable = %s\n%sprimitiveRestartIndex = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_PRIMITIVE_TOPOLOGY(pStruct->topology), prefix, (pStruct->disableVertexReuse) ? "TRUE" : "FALSE", prefix, string_XGL_PROVOKING_VERTEX_CONVENTION(pStruct->provokingVertex), prefix, (pStruct->primitiveRestartEnable) ? "TRUE" : "FALSE", prefix, (pStruct->primitiveRestartIndex), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -722,8 +736,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sallocationSize = %u\n%salignment = %u\n%sflags = %u\n%sheapCount = %u\n%sheaps = %p\n%smemPriority = %s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->allocationSize), prefix, (pStruct->alignment), prefix, (pStruct->flags), prefix, (pStruct->heapCount), prefix, (void*)(pStruct->heaps), prefix, string_XGL_MEMORY_PRIORITY(pStruct->memPriority));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sallocationSize = %u\n%salignment = %u\n%sflags = %u\n%sheapCount = %u\n%sheaps = %p\n%smemPriority = %s\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->allocationSize), prefix, (pStruct->alignment), prefix, (pStruct->flags), prefix, (pStruct->heapCount), prefix, (void*)(pStruct->heaps), prefix, string_XGL_MEMORY_PRIORITY(pStruct->memPriority), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -743,20 +757,20 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sbindingCount = %u\n%spVertexBindingDescriptions = %p\n%sattributeCount = %u\n%spVertexAttributeDescriptions = %p\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->bindingCount), prefix, (void*)(pStruct->pVertexBindingDescriptions), prefix, (pStruct->attributeCount), prefix, (void*)(pStruct->pVertexAttributeDescriptions));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%sbindingCount = %u\n%spVertexBindingDescriptions = %p\n%sattributeCount = %u\n%spVertexAttributeDescriptions = %p\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (pStruct->bindingCount), prefix, (void*)(pStruct->pVertexBindingDescriptions), prefix, (pStruct->attributeCount), prefix, (void*)(pStruct->pVertexAttributeDescriptions), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
     return str;
 }
-/*char* xgl_print_xgl_vertex_input_binding_description(const XGL_VERTEX_INPUT_BINDING_DESCRIPTION* pStruct, const char* prefix)
+char* xgl_print_xgl_vertex_input_binding_description(const XGL_VERTEX_INPUT_BINDING_DESCRIPTION* pStruct, const char* prefix)
 {
     char* str;
     str = (char*)malloc(sizeof(char)*1024);
     sprintf(str, "%sstrideInBytes = %u\n%sstepRate = %s\n", prefix, (pStruct->strideInBytes), prefix, string_XGL_VERTEX_INPUT_STEP_RATE(pStruct->stepRate));
     return str;
-}*/
+}
 char* xgl_print_xgl_offset3d(const XGL_OFFSET3D* pStruct, const char* prefix)
 {
     char* str;
@@ -785,8 +799,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%squeryType = %s\n%sslots = %u\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_QUERY_TYPE(pStruct->queryType), prefix, (pStruct->slots));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%squeryType = %s\n%sslots = %u\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, string_XGL_QUERY_TYPE(pStruct->queryType), prefix, (pStruct->slots), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -799,8 +813,8 @@
         str = (char*)malloc(sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%smem = %p\n%soffset = %u\n%srange = %u\n%sstride = %u\n%sformat = %p\n%sstate = %s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->mem), prefix, (pStruct->offset), prefix, (pStruct->range), prefix, (pStruct->stride), prefix, (void*)&(pStruct->format), prefix, string_XGL_MEMORY_STATE(pStruct->state));
     } else {
-        str = (char*)malloc(sizeof(char)*2048);
         char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);
+        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);
         sprintf(str, "%ssType = %s\n%spNext = %p\n%smem = %p\n%soffset = %u\n%srange = %u\n%sstride = %u\n%sformat = %p\n%sstate = %s\n   %spNext (%p)\n%s\n", prefix, string_XGL_STRUCTURE_TYPE(pStruct->sType), prefix, (pStruct->pNext), prefix, (void*)(pStruct->mem), prefix, (pStruct->offset), prefix, (pStruct->range), prefix, (pStruct->stride), prefix, (void*)&(pStruct->format), prefix, string_XGL_MEMORY_STATE(pStruct->state), prefix, (void*)pStruct->pNext, pTmpStr);
         free(pTmpStr);
     }
@@ -897,6 +911,11 @@
             return xgl_print_xgl_image_view_create_info((XGL_IMAGE_VIEW_CREATE_INFO*)pStruct, indent);
         }
         break;
+        case XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO:
+        {
+            return xgl_print_xgl_layer_create_info((XGL_LAYER_CREATE_INFO*)pStruct, indent);
+        }
+        break;
         case XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO:
         {
             return xgl_print_xgl_memory_alloc_info((XGL_MEMORY_ALLOC_INFO*)pStruct, indent);
diff --git a/xgl-helper.py b/xgl-helper.py
old mode 100644
new mode 100755
index 8d15397..66474db
--- a/xgl-helper.py
+++ b/xgl-helper.py
@@ -480,8 +480,8 @@
                 tmp_p_out += '   %spNext (%p)\\n%s\\n"' 
                 tmp_p_args += ", prefix, (void*)pStruct->pNext, pTmpStr);\n"
                 sh_funcs.append('    } else {\n')
-                sh_funcs.append('        str = (char*)malloc(sizeof(char)*2048);\n')
                 sh_funcs.append('        char *pTmpStr = dynamic_display((XGL_VOID*)pStruct->pNext, prefix);\n')
+                sh_funcs.append('        str = (char*)malloc(strlen(pTmpStr) + sizeof(char)*1024);\n')
                 sh_funcs.append('        sprintf(str, "')
                 sh_funcs.append('%s%s' % (tmp_p_out, tmp_p_args))
                 sh_funcs.append('        free(pTmpStr);\n')