build: enable Glave and all layers but drawState

v2: enable drawState too (olv)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3ab392b..25a91f6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -50,7 +50,7 @@
 if (NOT WIN32)
     add_subdirectory(tests)
 endif()
-#add_subdirectory(layers)
+add_subdirectory(layers)
 add_subdirectory(libs)
 add_subdirectory(demos)
-#add_subdirectory(tools/glave)
+add_subdirectory(tools/glave)
diff --git a/layers/glave_snapshot.c b/layers/glave_snapshot.c
index b80986b..8f07925 100644
--- a/layers/glave_snapshot.c
+++ b/layers/glave_snapshot.c
@@ -1107,12 +1107,12 @@
     return result;
 }
 
-XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglCreateDescriptorSetLayout(XGL_DEVICE device, XGL_FLAGS stageFlags, const uint32_t* pSetBindPoints, XGL_DESCRIPTOR_SET_LAYOUT priorSetLayout, const XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pSetLayoutInfoList, XGL_DESCRIPTOR_SET_LAYOUT* pSetLayout)
+XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglCreateDescriptorSetLayout( XGL_DEVICE device, const XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pCreateInfo, XGL_DESCRIPTOR_SET_LAYOUT* pSetLayout)
 {
     loader_platform_thread_lock_mutex(&objLock);
     ll_increment_use_count((void*)device, XGL_OBJECT_TYPE_DEVICE);
     loader_platform_thread_unlock_mutex(&objLock);
-    XGL_RESULT result = nextTable.CreateDescriptorSetLayout(device, stageFlags, pSetBindPoints, priorSetLayout, pSetLayoutInfoList, pSetLayout);
+    XGL_RESULT result = nextTable.CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
     if (result == XGL_SUCCESS)
     {
         loader_platform_thread_lock_mutex(&objLock);
@@ -1123,55 +1123,55 @@
     return result;
 }
 
-XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglBeginDescriptorRegionUpdate(XGL_DEVICE device, XGL_DESCRIPTOR_UPDATE_MODE updateMode)
+XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglBeginDescriptorPoolUpdate(XGL_DEVICE device, XGL_DESCRIPTOR_UPDATE_MODE updateMode)
 {
     loader_platform_thread_lock_mutex(&objLock);
     ll_increment_use_count((void*)device, XGL_OBJECT_TYPE_DEVICE);
     loader_platform_thread_unlock_mutex(&objLock);
-    XGL_RESULT result = nextTable.BeginDescriptorRegionUpdate(device, updateMode);
+    XGL_RESULT result = nextTable.BeginDescriptorPoolUpdate(device, updateMode);
     return result;
 }
 
-XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglEndDescriptorRegionUpdate(XGL_DEVICE device, XGL_CMD_BUFFER cmd)
+XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglEndDescriptorPoolUpdate(XGL_DEVICE device, XGL_CMD_BUFFER cmd)
 {
     loader_platform_thread_lock_mutex(&objLock);
     ll_increment_use_count((void*)device, XGL_OBJECT_TYPE_DEVICE);
     loader_platform_thread_unlock_mutex(&objLock);
-    XGL_RESULT result = nextTable.EndDescriptorRegionUpdate(device, cmd);
+    XGL_RESULT result = nextTable.EndDescriptorPoolUpdate(device, cmd);
     return result;
 }
 
-XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglCreateDescriptorRegion(XGL_DEVICE device, XGL_DESCRIPTOR_REGION_USAGE regionUsage, uint32_t maxSets, const XGL_DESCRIPTOR_REGION_CREATE_INFO* pCreateInfo, XGL_DESCRIPTOR_REGION* pDescriptorRegion)
+XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglCreateDescriptorPool(XGL_DEVICE device, XGL_DESCRIPTOR_POOL_USAGE poolUsage, uint32_t maxSets, const XGL_DESCRIPTOR_POOL_CREATE_INFO* pCreateInfo, XGL_DESCRIPTOR_POOL* pDescriptorPool)
 {
     loader_platform_thread_lock_mutex(&objLock);
     ll_increment_use_count((void*)device, XGL_OBJECT_TYPE_DEVICE);
     loader_platform_thread_unlock_mutex(&objLock);
-    XGL_RESULT result = nextTable.CreateDescriptorRegion(device, regionUsage, maxSets, pCreateInfo, pDescriptorRegion);
+    XGL_RESULT result = nextTable.CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
     if (result == XGL_SUCCESS)
     {
         loader_platform_thread_lock_mutex(&objLock);
-        GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pDescriptorRegion, XGL_OBJECT_TYPE_DESCRIPTOR_REGION);
+        GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pDescriptorPool, XGL_OBJECT_TYPE_DESCRIPTOR_POOL);
         pNode->obj.pStruct = NULL;
         loader_platform_thread_unlock_mutex(&objLock);
     }
     return result;
 }
 
-XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglClearDescriptorRegion(XGL_DESCRIPTOR_REGION descriptorRegion)
+XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglResetDescriptorPool(XGL_DESCRIPTOR_POOL descriptorPool)
 {
     loader_platform_thread_lock_mutex(&objLock);
-    ll_increment_use_count((void*)descriptorRegion, XGL_OBJECT_TYPE_DESCRIPTOR_REGION);
+    ll_increment_use_count((void*)descriptorPool, XGL_OBJECT_TYPE_DESCRIPTOR_POOL);
     loader_platform_thread_unlock_mutex(&objLock);
-    XGL_RESULT result = nextTable.ClearDescriptorRegion(descriptorRegion);
+    XGL_RESULT result = nextTable.ResetDescriptorPool(descriptorPool);
     return result;
 }
 
-XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglAllocDescriptorSets(XGL_DESCRIPTOR_REGION descriptorRegion, XGL_DESCRIPTOR_SET_USAGE setUsage, uint32_t count, const XGL_DESCRIPTOR_SET_LAYOUT* pSetLayouts, XGL_DESCRIPTOR_SET* pDescriptorSets, uint32_t* pCount)
+XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglAllocDescriptorSets(XGL_DESCRIPTOR_POOL descriptorPool, XGL_DESCRIPTOR_SET_USAGE setUsage, uint32_t count, const XGL_DESCRIPTOR_SET_LAYOUT* pSetLayouts, XGL_DESCRIPTOR_SET* pDescriptorSets, uint32_t* pCount)
 {
     loader_platform_thread_lock_mutex(&objLock);
-    ll_increment_use_count((void*)descriptorRegion, XGL_OBJECT_TYPE_DESCRIPTOR_REGION);
+    ll_increment_use_count((void*)descriptorPool, XGL_OBJECT_TYPE_DESCRIPTOR_POOL);
     loader_platform_thread_unlock_mutex(&objLock);
-    XGL_RESULT result = nextTable.AllocDescriptorSets(descriptorRegion, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
+    XGL_RESULT result = nextTable.AllocDescriptorSets(descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
     if (result == XGL_SUCCESS)
     {
         for (uint32_t i = 0; i < *pCount; i++) {
@@ -1184,20 +1184,20 @@
     return result;
 }
 
-XGL_LAYER_EXPORT void XGLAPI xglClearDescriptorSets(XGL_DESCRIPTOR_REGION descriptorRegion, uint32_t count, const XGL_DESCRIPTOR_SET* pDescriptorSets)
+XGL_LAYER_EXPORT void XGLAPI xglClearDescriptorSets(XGL_DESCRIPTOR_POOL descriptorPool, uint32_t count, const XGL_DESCRIPTOR_SET* pDescriptorSets)
 {
     loader_platform_thread_lock_mutex(&objLock);
-    ll_increment_use_count((void*)descriptorRegion, XGL_OBJECT_TYPE_DESCRIPTOR_REGION);
+    ll_increment_use_count((void*)descriptorPool, XGL_OBJECT_TYPE_DESCRIPTOR_POOL);
     loader_platform_thread_unlock_mutex(&objLock);
-    nextTable.ClearDescriptorSets(descriptorRegion, count, pDescriptorSets);
+    nextTable.ClearDescriptorSets(descriptorPool, count, pDescriptorSets);
 }
 
-XGL_LAYER_EXPORT void XGLAPI xglUpdateDescriptors(XGL_DESCRIPTOR_SET descriptorSet, const void* pUpdateChain)
+XGL_LAYER_EXPORT void XGLAPI xglUpdateDescriptors(XGL_DESCRIPTOR_SET descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
 {
     loader_platform_thread_lock_mutex(&objLock);
     ll_increment_use_count((void*)descriptorSet, XGL_OBJECT_TYPE_DESCRIPTOR_SET);
     loader_platform_thread_unlock_mutex(&objLock);
-    nextTable.UpdateDescriptors(descriptorSet, pUpdateChain);
+    nextTable.UpdateDescriptors(descriptorSet, updateCount, ppUpdateArray);
 }
 
 XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglCreateDynamicViewportState(XGL_DEVICE device, const XGL_DYNAMIC_VP_STATE_CREATE_INFO* pCreateInfo, XGL_DYNAMIC_VP_STATE_OBJECT* pState)
@@ -1328,12 +1328,12 @@
     nextTable.CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
 }
 
-XGL_LAYER_EXPORT void XGLAPI xglCmdBindDescriptorSet(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_DESCRIPTOR_SET descriptorSet, const uint32_t* pUserData)
+XGL_LAYER_EXPORT void XGLAPI xglCmdBindDescriptorSets(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_DESCRIPTOR_SET_LAYOUT_CHAIN layoutChain, uint32_t layoutChainSlot, uint32_t count, const XGL_DESCRIPTOR_SET* pDescriptorSets, const uint32_t* pUserData)
 {
     loader_platform_thread_lock_mutex(&objLock);
     ll_increment_use_count((void*)cmdBuffer, XGL_OBJECT_TYPE_CMD_BUFFER);
     loader_platform_thread_unlock_mutex(&objLock);
-    nextTable.CmdBindDescriptorSet(cmdBuffer, pipelineBindPoint, descriptorSet, pUserData);
+    nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layoutChain, layoutChainSlot, count, pDescriptorSets, pUserData);
 }
 
 XGL_LAYER_EXPORT void XGLAPI xglCmdBindVertexBuffer(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset, uint32_t binding)
diff --git a/layers/glave_snapshot.h b/layers/glave_snapshot.h
index fd54554..8bd1b09 100644
--- a/layers/glave_snapshot.h
+++ b/layers/glave_snapshot.h
@@ -64,7 +64,7 @@
     XGL_OBJECT_TYPE_SAMPLER,
     XGL_OBJECT_TYPE_DYNAMIC_DS_STATE_OBJECT,
     XGL_OBJECT_TYPE_DESCRIPTOR_SET,
-    XGL_OBJECT_TYPE_DESCRIPTOR_REGION,
+    XGL_OBJECT_TYPE_DESCRIPTOR_POOL,
     XGL_OBJECT_TYPE_DYNAMIC_CB_STATE_OBJECT,
     XGL_OBJECT_TYPE_IMAGE_VIEW,
     XGL_OBJECT_TYPE_QUEUE_SEMAPHORE,
@@ -155,8 +155,8 @@
             return "RENDER_PASS";
         case XGL_OBJECT_TYPE_QUERY_POOL:
             return "QUERY_POOL";
-        case XGL_OBJECT_TYPE_DESCRIPTOR_REGION:
-            return "DESCRIPTOR_REGION";
+        case XGL_OBJECT_TYPE_DESCRIPTOR_POOL:
+            return "DESCRIPTOR_POOL";
         case XGL_OBJECT_TYPE_PRESENTABLE_IMAGE_MEMORY:
             return "PRESENTABLE_IMAGE_MEMORY";
         default:
diff --git a/tools/glave/scripts/vk_generate.py b/tools/glave/scripts/vk_generate.py
index b9d85a4..a8ff672 100755
--- a/tools/glave/scripts/vk_generate.py
+++ b/tools/glave/scripts/vk_generate.py
@@ -366,7 +366,7 @@
                                                      'finalize_txt': 'glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pAllocInfo))'},
                            'XGL_GRAPHICS_PIPELINE_CREATE_INFO': {'add_txt': 'glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo), sizeof(XGL_GRAPHICS_PIPELINE_CREATE_INFO), pCreateInfo);\n    add_pipeline_state_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo->pNext), pCreateInfo->pNext)',
                                                                  'finalize_txt': 'glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pCreateInfo))'},
-                           'XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO': {'add_txt': 'if (pCreateInfo)\n        add_create_ds_layout_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo), pCreateInfo)',
+                           'XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO': {'add_txt': 'if (pCreateInfo)\n        add_create_ds_layout_to_trace_packet(pHeader, &(pPacket->pCreateInfo), pCreateInfo)',
                                                                      'finalize_txt': '// pCreateInfo finalized in add_create_ds_layout_to_trace_packet'},
                            'XGL_DESCRIPTOR_POOL_CREATE_INFO': {'add_txt': 'glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo), sizeof(XGL_DESCRIPTOR_POOL_CREATE_INFO), pCreateInfo);\n    glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo->pTypeCount), rgCount * sizeof(XGL_DESCRIPTOR_TYPE_COUNT), pCreateInfo->pTypeCount)',
                                                                  'finalize_txt': 'glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pCreateInfo->pTypeCount));\n    glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pCreateInfo))'},
@@ -1591,9 +1591,9 @@
         cdslc_body.append('           for (i = 0; i < pPacket->setLayoutArrayCount && pPacket->pSetLayoutArray != NULL; i++)')
         cdslc_body.append('           {')
         cdslc_body.append('               saveSetLayoutArray[i] = pPacket->pSetLayoutArray[i];')
-        cdslc_body.append('               *pSetLayoutOrig++ = remap(pPacket->pSetLayoutArray[i]);')
+        cdslc_body.append('               *pSetLayoutOrig++ = m_objMapper.remap(pPacket->pSetLayoutArray[i]);')
         cdslc_body.append('           }')
-        cdslc_body.append('           replayResult = m_xglFuncs.real_xglCreateDescriptorSetLayoutChain(remap(pPacket->device), pPacket->setLayoutArrayCount, pPacket->pSetLayoutArray, &local_pLayoutChain);')
+        cdslc_body.append('           replayResult = m_xglFuncs.real_xglCreateDescriptorSetLayoutChain(m_objMapper.remap(pPacket->device), pPacket->setLayoutArrayCount, pPacket->pSetLayoutArray, &local_pLayoutChain);')
         cdslc_body.append('           pSetLayoutOrig = (XGL_DESCRIPTOR_SET_LAYOUT *) pPacket->pSetLayoutArray;')
         cdslc_body.append('           for (i = 0; i < pPacket->setLayoutArrayCount && pPacket->pSetLayoutArray != NULL; i++)')
         cdslc_body.append('           {')
@@ -1601,7 +1601,7 @@
         cdslc_body.append('           }')
         cdslc_body.append('           if (replayResult == XGL_SUCCESS)')
         cdslc_body.append('           {')
-        cdslc_body.append('               add_to_map(pPacket->pLayoutChain, &local_pLayoutChain);')
+        cdslc_body.append('               m_objMapper.add_to_map(pPacket->pLayoutChain, &local_pLayoutChain);')
         cdslc_body.append('           }')
         cdslc_body.append('           free(saveSetLayoutArray);')
         return "\n".join(cdslc_body)
@@ -1617,7 +1617,7 @@
         cgp_body.append('            struct shaderPair saveShader[10];')
         cgp_body.append('            unsigned int idx = 0;')
         cgp_body.append('            memcpy(&createInfo, pPacket->pCreateInfo, sizeof(XGL_GRAPHICS_PIPELINE_CREATE_INFO));')
-        cgp_body.append('            createInfo.lastSetLayout = m_objMapper.remap(createInfo.lastSetLayout);')
+        cgp_body.append('            createInfo.pSetLayoutChain = m_objMapper.remap(createInfo.pSetLayoutChain);')
         cgp_body.append('            // Cast to shader type, as those are of primariy interest and all structs in LL have same header w/ sType & pNext')
         cgp_body.append('            XGL_PIPELINE_SHADER_STAGE_CREATE_INFO* pPacketNext = (XGL_PIPELINE_SHADER_STAGE_CREATE_INFO*)pPacket->pCreateInfo->pNext;')
         cgp_body.append('            XGL_PIPELINE_SHADER_STAGE_CREATE_INFO* pNext = (XGL_PIPELINE_SHADER_STAGE_CREATE_INFO*)createInfo.pNext;')
@@ -1658,9 +1658,9 @@
         cbds_body.append('            {')
         cbds_body.append('                XGL_DESCRIPTOR_SET *pSet = (XGL_DESCRIPTOR_SET *) &(pPacket->pDescriptorSets[idx]);')
         cbds_body.append('                pSaveSets[idx] = pPacket->pDescriptorSets[idx];')
-        cbds_body.append('                *pSet = remap(pPacket->pDescriptorSets[idx]);')
+        cbds_body.append('                *pSet = m_objMapper.remap(pPacket->pDescriptorSets[idx]);')
         cbds_body.append('            }')
-        cbds_body.append('            m_xglFuncs.real_xglCmdBindDescriptorSets(remap(pPacket->cmdBuffer), pPacket->pipelineBindPoint, remap(pPacket->layoutChain), pPacket->layoutChainSlot, pPacket->count, pPacket->pDescriptorSets, pPacket->pUserData);')
+        cbds_body.append('            m_xglFuncs.real_xglCmdBindDescriptorSets(m_objMapper.remap(pPacket->cmdBuffer), pPacket->pipelineBindPoint, m_objMapper.remap(pPacket->layoutChain), pPacket->layoutChainSlot, pPacket->count, pPacket->pDescriptorSets, pPacket->pUserData);')
         cbds_body.append('            for (uint32_t idx = 0; idx < pPacket->count && pPacket->pDescriptorSets != NULL; idx++)')
         cbds_body.append('            {')
         cbds_body.append('                XGL_DESCRIPTOR_SET *pSet = (XGL_DESCRIPTOR_SET *) &(pPacket->pDescriptorSets[idx]);')
diff --git a/tools/glave/src/glv_extensions/glvtrace_xgl/glvtrace_xgl_helpers.h b/tools/glave/src/glv_extensions/glvtrace_xgl/glvtrace_xgl_helpers.h
index b8bdcf6..e6fd0d1 100644
--- a/tools/glave/src/glv_extensions/glvtrace_xgl/glvtrace_xgl_helpers.h
+++ b/tools/glave/src/glv_extensions/glvtrace_xgl/glvtrace_xgl_helpers.h
@@ -324,7 +324,7 @@
     }
 }
 
-static void add_create_ds_layout_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)
+static void add_create_ds_layout_to_trace_packet(glv_trace_packet_header* pHeader, const XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO** ppOut, const XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pIn)
 {
     const XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pInNow = pIn;
     XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO** ppOutNext = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO**)ppOut;
@@ -340,33 +340,33 @@
         {
             XGL_DESCRIPTOR_SET_LAYOUT_BINDING *pLayoutBinding =  (XGL_DESCRIPTOR_SET_LAYOUT_BINDING *) pInNow->pBinding + i;
             XGL_DESCRIPTOR_SET_LAYOUT_BINDING *pOutLayoutBinding =  (XGL_DESCRIPTOR_SET_LAYOUT_BINDING *) (*ppOutNow)->pBinding + i;
-            glv_add_buffer_to_trace_packet(pHeader, (void**) &pOutLayoutBinding, sizeof(XGL_SAMPLER) * pLayoutBinding->count, pLayoutBinding->pImmutableSamplers);
-            glv_finalize_buffer_address(pHeader, (void**) &pOutLayoutBinding);
+            glv_add_buffer_to_trace_packet(pHeader, (void**) &pOutLayoutBinding->pImmutableSamplers, sizeof(XGL_SAMPLER) * pLayoutBinding->count, pLayoutBinding->pImmutableSamplers);
+            glv_finalize_buffer_address(pHeader, (void**) &pOutLayoutBinding->pImmutableSamplers);
         }
         glv_add_buffer_to_trace_packet(pHeader, (void**)&((*ppOutNow)->pBinding), sizeof(XGL_DESCRIPTOR_SET_LAYOUT_BINDING) * pInNow->count, pInNow->pBinding);
         glv_finalize_buffer_address(pHeader, (void**)&((*ppOutNow)->pBinding));
+        ppOutNext = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO**)&(*ppOutNow)->pNext;
         pInNow = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO*)pInNow->pNext;
     }
     return;
 }
 
-static void add_update_descriptors_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)
+static void add_update_descriptors_to_trace_packet(glv_trace_packet_header* pHeader, const uint32_t count, void*** pppUpdateArrayOut, const void** ppUpdateArrayIn)
 {
-    const XGL_UPDATE_SAMPLERS* pInNow = pIn;
-    XGL_UPDATE_SAMPLERS** ppOutNext = (XGL_UPDATE_SAMPLERS**)ppOut;
-    while (pInNow != NULL)
+    uint32_t i;
+    for (i = 0; i < count; i++)
     {
-        XGL_UPDATE_SAMPLERS** ppOutNow = ppOutNext;
-        ppOutNext = NULL;
+        const XGL_UPDATE_SAMPLERS* pInNow = (const XGL_UPDATE_SAMPLERS*)ppUpdateArrayIn[i];
+        XGL_UPDATE_SAMPLERS** ppOut = (XGL_UPDATE_SAMPLERS**)*pppUpdateArrayOut;
+        XGL_UPDATE_SAMPLERS** ppOutNow = &(ppOut[i]);
         switch (pInNow->sType)
         {
         case XGL_STRUCTURE_TYPE_UPDATE_SAMPLERS:
         {
             glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_UPDATE_SAMPLERS), pInNow);
             XGL_UPDATE_SAMPLERS* pPacket = (XGL_UPDATE_SAMPLERS*)*ppOutNow;
-            glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pSamplers, ((XGL_UPDATE_SAMPLERS*)pInNow)->count * sizeof(XGL_SAMPLER), ((XGL_UPDATE_SAMPLERS*)pInNow)->pSamplers);
+            glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pSamplers, ((XGL_UPDATE_SAMPLERS*)pInNow)->count * sizeof(XGL_SAMPLER), pInNow->pSamplers);
             glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pSamplers));
-            ppOutNext = (XGL_UPDATE_SAMPLERS**)&(*ppOutNow)->pNext;
             glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));
             break;
         }
@@ -376,14 +376,13 @@
             glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_UPDATE_SAMPLER_TEXTURES), pInNow);
             XGL_UPDATE_SAMPLER_TEXTURES* pPacket = (XGL_UPDATE_SAMPLER_TEXTURES*)*ppOutNow;
             glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pSamplerImageViews, ((XGL_UPDATE_SAMPLER_TEXTURES*)pInNow)->count * sizeof(XGL_SAMPLER_IMAGE_VIEW_INFO), ((XGL_UPDATE_SAMPLER_TEXTURES*)pInNow)->pSamplerImageViews);
-// TODO : This is still broken. How to update the original XGL_SAMPLER_IMAGE_VIEW_INFO struct ptrs to have correct address for newly added XGL_IMAGE_VIEW_ATTACH_INFO blocks below?
-            uint32_t i;
-            for (i = 0; i < ((XGL_UPDATE_SAMPLER_TEXTURES*)pInNow)->count; i++) {
-                glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pSamplerImageViews[i].pImageView, sizeof(XGL_IMAGE_VIEW_ATTACH_INFO), ((XGL_UPDATE_SAMPLER_TEXTURES*)pInNow)->pSamplerImageViews[i].pImageView);
-                glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pSamplerImageViews[i].pImageView));
+// TODO : is the below correct? is pImageView a pointer to a single struct or not?
+            uint32_t j;
+            for (j = 0; j < ((XGL_UPDATE_SAMPLER_TEXTURES*)pInNow)->count; j++) {
+                glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pSamplerImageViews[j].pImageView, sizeof(XGL_IMAGE_VIEW_ATTACH_INFO), ((XGL_UPDATE_SAMPLER_TEXTURES*)pInNow)->pSamplerImageViews[j].pImageView);
+                glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pSamplerImageViews[j].pImageView));
             }
             glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pSamplerImageViews));
-            ppOutNext = (XGL_UPDATE_SAMPLERS**)&(*ppOutNow)->pNext;
             glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));
             break;
         }
@@ -391,14 +390,8 @@
         {
             glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_UPDATE_IMAGES), pInNow);
             XGL_UPDATE_IMAGES* pPacket = (XGL_UPDATE_IMAGES*)*ppOutNow;
-            uint32_t i;
-            glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pImageViews, ((XGL_UPDATE_IMAGES*)pInNow)->count * sizeof(XGL_IMAGE_VIEW_ATTACH_INFO *), ((XGL_UPDATE_IMAGES*)pInNow)->pImageViews);
-            for (i = 0; i < ((XGL_UPDATE_IMAGES*)pInNow)->count; i++) {
-                glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pImageViews[i], sizeof(XGL_IMAGE_VIEW_ATTACH_INFO), ((XGL_UPDATE_IMAGES*)pInNow)->pImageViews[i]);
-                glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pImageViews[i]));
-            }
+            glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pImageViews, ((XGL_UPDATE_IMAGES*)pInNow)->count * sizeof(XGL_IMAGE_VIEW_ATTACH_INFO), ((XGL_UPDATE_IMAGES*)pInNow)->pImageViews);
             glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pImageViews));
-            ppOutNext = (XGL_UPDATE_SAMPLERS**)&(*ppOutNow)->pNext;
             glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));
             break;
         }
@@ -406,26 +399,21 @@
         {
             glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_UPDATE_BUFFERS), pInNow);
             XGL_UPDATE_BUFFERS* pPacket = (XGL_UPDATE_BUFFERS*)*ppOutNow;
-            glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pBufferViews, ((XGL_UPDATE_BUFFERS*)pInNow)->count * sizeof(XGL_BUFFER_VIEW_ATTACH_INFO *), ((XGL_UPDATE_BUFFERS*)pInNow)->pBufferViews);
-            uint32_t i;
-            for (i = 0; i < ((XGL_UPDATE_BUFFERS*)pInNow)->count; i++) {
-                glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pBufferViews[i], sizeof(XGL_BUFFER_VIEW_ATTACH_INFO), ((XGL_UPDATE_BUFFERS*)pInNow)->pBufferViews[i]);
-                glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pBufferViews[i]));
-            }
+            glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pBufferViews, ((XGL_UPDATE_BUFFERS*)pInNow)->count * sizeof(XGL_BUFFER_VIEW_ATTACH_INFO), ((XGL_UPDATE_BUFFERS*)pInNow)->pBufferViews);
             glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pBufferViews));
-            ppOutNext = (XGL_UPDATE_SAMPLERS**)&(*ppOutNow)->pNext;
             glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));
             break;
         }
         case XGL_STRUCTURE_TYPE_UPDATE_AS_COPY:
         {
             glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_UPDATE_AS_COPY), pInNow);
-            ppOutNext = (XGL_UPDATE_SAMPLERS**)&(*ppOutNow)->pNext;
             glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));
             break;
         }
-            default:
-                assert(0);
+        default:
+        {
+            assert(0);
+        }
         }
         pInNow = (XGL_UPDATE_SAMPLERS*)pInNow->pNext;
     }
diff --git a/tools/glave/src/glv_extensions/glvtrace_xgl/glvtrace_xgl_trace.c b/tools/glave/src/glv_extensions/glvtrace_xgl/glvtrace_xgl_trace.c
index 2cc7215..c1d8974 100644
--- a/tools/glave/src/glv_extensions/glvtrace_xgl/glvtrace_xgl_trace.c
+++ b/tools/glave/src/glv_extensions/glvtrace_xgl/glvtrace_xgl_trace.c
@@ -144,7 +144,7 @@
 }
 
 GLVTRACER_EXPORT XGL_RESULT XGLAPI __HOOKED_xglAllocDescriptorSets(
-    XGL_DESCRIPTOR_REGION descriptorRegion,
+    XGL_DESCRIPTOR_POOL descriptorPool,
     XGL_DESCRIPTOR_SET_USAGE setUsage,
     uint32_t count,
     const XGL_DESCRIPTOR_SET_LAYOUT* pSetLayouts,
@@ -157,12 +157,12 @@
     uint64_t startTime;
     SEND_ENTRYPOINT_ID(xglAllocDescriptorSets);
     startTime = glv_get_time();
-    result = real_xglAllocDescriptorSets(descriptorRegion, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
+    result = real_xglAllocDescriptorSets(descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
     size_t customSize = (*pCount <= 0) ? (sizeof(XGL_DESCRIPTOR_SET)) : (*pCount * sizeof(XGL_DESCRIPTOR_SET));
     CREATE_TRACE_PACKET(xglAllocDescriptorSets, sizeof(XGL_DESCRIPTOR_SET_LAYOUT) + customSize + sizeof(uint32_t));
     pHeader->entrypoint_begin_time = startTime;
     pPacket = interpret_body_as_xglAllocDescriptorSets(pHeader);
-    pPacket->descriptorRegion = descriptorRegion;
+    pPacket->descriptorPool = descriptorPool;
     pPacket->setUsage = setUsage;
     pPacket->count = count;
     glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pSetLayouts), count*sizeof(XGL_DESCRIPTOR_SET_LAYOUT), pSetLayouts);