glave: Fixes for CreateDescriptorSetLayout changed structures
diff --git a/tools/glave/scripts/vk_generate.py b/tools/glave/scripts/vk_generate.py
index 6aad905..b2d7f32 100755
--- a/tools/glave/scripts/vk_generate.py
+++ b/tools/glave/scripts/vk_generate.py
@@ -352,8 +352,6 @@
'finalize_txt': 'default'},
'pDescriptorSets': {'add_txt': 'glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pDescriptorSets), customSize, pDescriptorSets)',
'finalize_txt': 'default'},
- 'pUpdateChain': {'add_txt': 'add_update_descriptors_to_trace_packet(pHeader, (void**)&(pPacket->pUpdateChain), pUpdateChain)',
- 'finalize_txt': 'default'},
'XGL_SHADER_CREATE_INFO': {'add_txt': 'glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo), sizeof(XGL_SHADER_CREATE_INFO), pCreateInfo);\n glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo->pCode), ((pCreateInfo != NULL) ? pCreateInfo->codeSize : 0), pCreateInfo->pCode)',
'finalize_txt': 'glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pCreateInfo->pCode));\n glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pCreateInfo))'},
'XGL_FRAMEBUFFER_CREATE_INFO': {'add_txt': 'glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo), sizeof(XGL_FRAMEBUFFER_CREATE_INFO), pCreateInfo);\n glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo->pColorAttachments), colorCount * sizeof(XGL_COLOR_ATTACHMENT_BIND_INFO), pCreateInfo->pColorAttachments);\n glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo->pDepthStencilAttachment), dsSize, pCreateInfo->pDepthStencilAttachment)',
@@ -368,8 +366,8 @@
'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': 'glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pSetLayoutInfoList), sizeof(XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO), pSetLayoutInfoList);\n if (pSetLayoutInfoList)\n add_create_ds_layout_to_trace_packet(pHeader, (void**)&(pPacket->pSetLayoutInfoList->pNext), pSetLayoutInfoList->pNext)',
- 'finalize_txt': 'glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pSetLayoutInfoList))'},
+ 'XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO': {'add_txt': 'if (pCreateInfo)\n add_create_ds_layout_to_trace_packet(pHeader, (void**)&(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))'},
'XGL_COMPUTE_PIPELINE_CREATE_INFO': {'add_txt': 'glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo), sizeof(XGL_COMPUTE_PIPELINE_CREATE_INFO), pCreateInfo);\n add_pipeline_state_to_trace_packet(pHeader, (void**)&(pPacket->pCreateInfo->pNext), pCreateInfo->pNext);\n add_pipeline_shader_to_trace_packet(pHeader, (XGL_PIPELINE_SHADER*)&pPacket->pCreateInfo->cs, &pCreateInfo->cs)',
@@ -401,17 +399,11 @@
def _get_packet_size(self, params):
ps = [] # List of elements to be added together to account for packet size for given params
skip_list = [] # store params that are already accounted for so we don't count them twice
- # Dict of specific params with unique custom sizes
- custom_size_dict = {'pSetBindPoints': '(XGL_SHADER_STAGE_COMPUTE * sizeof(uint32_t))', # Accounting for largest possible array
- }
for p in params:
#First handle custom cases
- if p.name in ['pCreateInfo', 'pUpdateChain', 'pSetLayoutInfoList', 'pBeginInfo', 'pAllocInfo']:
+ if p.name in ['pCreateInfo', 'pBeginInfo', 'pAllocInfo']:
ps.append('get_struct_chain_size((void*)%s)' % p.name)
skip_list.append(p.name)
- elif p.name in custom_size_dict:
- ps.append(custom_size_dict[p.name])
- skip_list.append(p.name)
# Skip any params already handled
if p.name in skip_list:
continue
@@ -501,7 +493,7 @@
# functions that have non-standard sequence of packet creation and calling real function
# NOTE: Anytime we call the function before CREATE_TRACE_PACKET, need to add custom code for correctly tracking API call time
if proto.name in ['CreateFramebuffer', 'CreateRenderPass', 'CreateDynamicViewportState',
- 'CreateDescriptorPool']:
+ 'CreateDescriptorPool', 'UpdateDescriptors']:
# these are regular case as far as sequence of tracing but have some custom size element
if 'CreateFramebuffer' == proto.name:
func_body.append(' int dsSize = (pCreateInfo != NULL && pCreateInfo->pDepthStencilAttachment != NULL) ? sizeof(XGL_DEPTH_STENCIL_BIND_INFO) : 0;')
@@ -525,6 +517,15 @@
elif 'CreateDescriptorPool' == proto.name:
func_body.append(' uint32_t rgCount = (pCreateInfo != NULL && pCreateInfo->pTypeCount != NULL) ? pCreateInfo->count : 0;')
func_body.append(' CREATE_TRACE_PACKET(xglCreateDescriptorPool, get_struct_chain_size((void*)pCreateInfo) + sizeof(XGL_DESCRIPTOR_POOL));')
+ elif 'UpdateDescriptors' == proto.name:
+ func_body.append(' uint32_t i;')
+ func_body.append(' size_t customSize=0;')
+ func_body.append(' for (i = 0; i < updateCount; i++)')
+ func_body.append(' {')
+ func_body.append(' customSize += get_struct_chain_size(ppUpdateArray[i]);')
+ func_body.append(' customSize += sizeof(intptr_t);')
+ func_body.append(' }')
+ func_body.append(' CREATE_TRACE_PACKET(xglUpdateDescriptors, customSize);')
func_body.append(' %sreal_xgl%s;' % (return_txt, proto.c_call()))
else:
if (0 == len(packet_size)):
@@ -536,18 +537,26 @@
func_body.append(' _dataSize = (pDataSize == NULL || pData == NULL) ? 0 : *pDataSize;')
func_body.append(' pPacket = interpret_body_as_xgl%s(pHeader);' % proto.name)
func_body.append('\n'.join(raw_packet_update_list))
- for pp_dict in ptr_packet_update_list: #buff_ptr_indices:
- func_body.append(' %s;' % (pp_dict['add_txt']))
- if 'void' not in proto.ret or '*' in proto.ret:
- func_body.append(' pPacket->result = result;')
- for pp_dict in ptr_packet_update_list:
- if ('DEVICE_CREATE_INFO' not in proto.params[pp_dict['index']].ty) and ('APPLICATION_INFO' not in proto.params[pp_dict['index']].ty) and ('pUpdateChain' != proto.params[pp_dict['index']].name):
- func_body.append(' %s;' % (pp_dict['finalize_txt']))
- func_body.append(' FINISH_TRACE_PACKET();')
- if 'AllocMemory' in proto.name:
- func_body.append(' add_new_handle_to_mem_info(*pMem, pAllocInfo->allocationSize, NULL);')
- elif 'FreeMemory' in proto.name:
- func_body.append(' rm_handle_from_mem_info(mem);')
+ if 'UpdateDescriptors' == proto.name:
+ func_body.append(' // add buffer which is an array of pointers')
+ func_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->ppUpdateArray), updateCount * sizeof(intptr_t), ppUpdateArray);')
+ func_body.append(' // add all the sub buffers with descriptor updates')
+ func_body.append(' add_update_descriptors_to_trace_packet(pHeader, updateCount, (void ***) &pPacket->ppUpdateArray, ppUpdateArray);')
+ func_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->ppUpdateArray));')
+ func_body.append(' FINISH_TRACE_PACKET();')
+ else:
+ for pp_dict in ptr_packet_update_list: #buff_ptr_indices:
+ func_body.append(' %s;' % (pp_dict['add_txt']))
+ if 'void' not in proto.ret or '*' in proto.ret:
+ func_body.append(' pPacket->result = result;')
+ for pp_dict in ptr_packet_update_list:
+ if ('DEVICE_CREATE_INFO' not in proto.params[pp_dict['index']].ty) and ('APPLICATION_INFO' not in proto.params[pp_dict['index']].ty) and ('ppUpdateArray' != proto.params[pp_dict['index']].name):
+ func_body.append(' %s;' % (pp_dict['finalize_txt']))
+ func_body.append(' FINISH_TRACE_PACKET();')
+ if 'AllocMemory' in proto.name:
+ func_body.append(' add_new_handle_to_mem_info(*pMem, pAllocInfo->allocationSize, NULL);')
+ elif 'FreeMemory' in proto.name:
+ func_body.append(' rm_handle_from_mem_info(mem);')
if 'void' not in proto.ret or '*' in proto.ret:
func_body.append(' return result;')
func_body.append('}\n')
@@ -851,17 +860,17 @@
' void** ppLocalMemBarriers = (void**)&pBarrier->ppMemBarriers[i];\n',
' *ppLocalMemBarriers = (void*) glv_trace_packet_interpret_buffer_pointer(pHeader, (intptr_t)pBarrier->ppMemBarriers[i]);\n',
'}']},
- 'CreateDescriptorSetLayout' : {'param': 'pSetLayoutInfoList', 'txt': ['if (pPacket->pSetLayoutInfoList->sType == XGL_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO) {\n',
- ' // need to make a non-const pointer to the pointer so that we can properly change the original pointer to the interpretted one\n',
- ' void** ppNextVoidPtr = (void**)&(pPacket->pSetLayoutInfoList->pNext);\n',
- ' *ppNextVoidPtr = (void*)glv_trace_packet_interpret_buffer_pointer(pHeader, (intptr_t)pPacket->pSetLayoutInfoList->pNext);\n',
- ' XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pNext = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO*)pPacket->pSetLayoutInfoList->pNext;\n',
- ' while (NULL != pNext)\n', ' {\n',
+ 'CreateDescriptorSetLayout' : {'param': 'pCreateInfo', 'txt': ['if (pPacket->pCreateInfo->sType == XGL_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO) {\n',
+ ' XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pNext = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO*)pPacket->pCreateInfo;\n',
+ ' do\n', ' {\n',
+ ' // need to make a non-const pointer to the pointer so that we can properly change the original pointer to the interpretted one\n',
+ ' void** ppNextVoidPtr = (void**)&(pNext->pNext);\n',
+ ' *ppNextVoidPtr = (void*)glv_trace_packet_interpret_buffer_pointer(pHeader, (intptr_t)pNext->pNext);\n',
' switch(pNext->sType)\n', ' {\n',
' case XGL_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO:\n',
' {\n' ,
- ' void** ppNextVoidPtr = (void**)&pNext->pNext;\n',
- ' *ppNextVoidPtr = (void*)glv_trace_packet_interpret_buffer_pointer(pHeader, (intptr_t)pNext->pNext);\n',
+ ' XGL_DESCRIPTOR_SET_LAYOUT_BINDING** ppBinding = (XGL_DESCRIPTOR_SET_LAYOUT_BINDING**)&pNext->pBinding;\n',
+ ' *ppBinding = (XGL_DESCRIPTOR_SET_LAYOUT_BINDING*)glv_trace_packet_interpret_buffer_pointer(pHeader, (intptr_t)pNext->pBinding);\n',
' break;\n',
' }\n',
' default:\n',
@@ -872,7 +881,7 @@
' }\n',
' }\n',
' pNext = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO*)pNext->pNext;\n',
- ' }\n',
+ ' } while (NULL != pNext);\n',
'} else {\n',
' // This is unexpected.\n',
' glv_LogError("CreateDescriptorSetLayout must have LayoutInfoList stype of XGL_STRCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO\\n");\n',
diff --git a/tools/glave/src/glv_extensions/glvreplay_xgl/glvreplay_xgl_xglreplay.cpp b/tools/glave/src/glv_extensions/glvreplay_xgl/glvreplay_xgl_xglreplay.cpp
index 405fa26..2673b43 100644
--- a/tools/glave/src/glv_extensions/glvreplay_xgl/glvreplay_xgl_xglreplay.cpp
+++ b/tools/glave/src/glv_extensions/glvreplay_xgl/glvreplay_xgl_xglreplay.cpp
@@ -522,28 +522,33 @@
// We have to remap handles internal to the structures so save the handles prior to remap and then restore
// Rather than doing a deep memcpy of the entire struct and fixing any intermediate pointers, do save and restores via STL queue
glv_replay::GLV_REPLAY_RESULT returnValue = glv_replay::GLV_REPLAY_SUCCESS;
- XGL_UPDATE_SAMPLERS* pUpdateChain = (XGL_UPDATE_SAMPLERS*)pPacket->pUpdateChain;
std::queue<XGL_SAMPLER> saveSamplers;
std::queue<XGL_BUFFER_VIEW> saveBufferViews;
std::queue<XGL_IMAGE_VIEW> saveImageViews;
std::queue<XGL_DESCRIPTOR_SET> saveDescSets;
- while (pUpdateChain) {
- switch(pUpdateChain->sType)
+ uint32_t j;
+ for (j = 0; j < pPacket->updateCount; j++)
+ {
+ XGL_UPDATE_SAMPLERS* pUpdateArray = (XGL_UPDATE_SAMPLERS*)pPacket->ppUpdateArray[j];
+ switch(pUpdateArray->sType)
{
case XGL_STRUCTURE_TYPE_UPDATE_SAMPLERS:
- for (uint32_t i = 0; i < ((XGL_UPDATE_SAMPLERS*)pUpdateChain)->count; i++) {
- XGL_SAMPLER* pLocalSampler = (XGL_SAMPLER*) &((XGL_UPDATE_SAMPLERS*)pUpdateChain)->pSamplers[i];
+ {
+ for (uint32_t i = 0; i < ((XGL_UPDATE_SAMPLERS*)pUpdateArray)->count; i++)
+ {
+ XGL_SAMPLER* pLocalSampler = (XGL_SAMPLER*) &((XGL_UPDATE_SAMPLERS*)pUpdateArray)->pSamplers[i];
saveSamplers.push(*pLocalSampler);
- *pLocalSampler = m_objMapper.remap(((XGL_UPDATE_SAMPLERS*)pUpdateChain)->pSamplers[i]);
+ *pLocalSampler = m_objMapper.remap(((XGL_UPDATE_SAMPLERS*)pUpdateArray)->pSamplers[i]);
}
break;
+ }
case XGL_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES:
{
- XGL_UPDATE_SAMPLER_TEXTURES *pUST = (XGL_UPDATE_SAMPLER_TEXTURES *) pUpdateChain;
+ XGL_UPDATE_SAMPLER_TEXTURES *pUST = (XGL_UPDATE_SAMPLER_TEXTURES *) pUpdateArray;
for (uint32_t i = 0; i < pUST->count; i++) {
- XGL_SAMPLER *pLocalSampler = (XGL_SAMPLER *) &pUST->pSamplerImageViews[i].pSampler;
+ XGL_SAMPLER *pLocalSampler = (XGL_SAMPLER *) &pUST->pSamplerImageViews[i].sampler;
saveSamplers.push(*pLocalSampler);
- *pLocalSampler = m_objMapper.remap(pUST->pSamplerImageViews[i].pSampler);
+ *pLocalSampler = m_objMapper.remap(pUST->pSamplerImageViews[i].sampler);
XGL_IMAGE_VIEW *pLocalView = (XGL_IMAGE_VIEW *) &pUST->pSamplerImageViews[i].pImageView->view;
saveImageViews.push(*pLocalView);
*pLocalView = m_objMapper.remap(pUST->pSamplerImageViews[i].pImageView->view);
@@ -552,51 +557,56 @@
}
case XGL_STRUCTURE_TYPE_UPDATE_IMAGES:
{
- XGL_UPDATE_IMAGES *pUI = (XGL_UPDATE_IMAGES*) pUpdateChain;
+ XGL_UPDATE_IMAGES *pUI = (XGL_UPDATE_IMAGES*) pUpdateArray;
for (uint32_t i = 0; i < pUI->count; i++) {
- XGL_IMAGE_VIEW* pLocalView = (XGL_IMAGE_VIEW*) &pUI->pImageViews[i]->view;
+ XGL_IMAGE_VIEW* pLocalView = (XGL_IMAGE_VIEW*) &pUI->pImageViews[i].view;
saveImageViews.push(*pLocalView);
- *pLocalView = m_objMapper.remap(pUI->pImageViews[i]->view);
+ *pLocalView = m_objMapper.remap(pUI->pImageViews[i].view);
}
break;
}
case XGL_STRUCTURE_TYPE_UPDATE_BUFFERS:
{
- XGL_UPDATE_BUFFERS *pUB = (XGL_UPDATE_BUFFERS *) pUpdateChain;
+ XGL_UPDATE_BUFFERS *pUB = (XGL_UPDATE_BUFFERS *) pUpdateArray;
for (uint32_t i = 0; i < pUB->count; i++) {
- XGL_BUFFER_VIEW* pLocalView = (XGL_BUFFER_VIEW*) &pUB->pBufferViews[i]->view;
+ XGL_BUFFER_VIEW* pLocalView = (XGL_BUFFER_VIEW*) &pUB->pBufferViews[i].view;
saveBufferViews.push(*pLocalView);
- *pLocalView = m_objMapper.remap(pUB->pBufferViews[i]->view);
+ *pLocalView = m_objMapper.remap(pUB->pBufferViews[i].view);
}
break;
}
case XGL_STRUCTURE_TYPE_UPDATE_AS_COPY:
- saveDescSets.push(((XGL_UPDATE_AS_COPY*)pUpdateChain)->descriptorSet);
- ((XGL_UPDATE_AS_COPY*)pUpdateChain)->descriptorSet = m_objMapper.remap(((XGL_UPDATE_AS_COPY*)pUpdateChain)->descriptorSet);
+ {
+ saveDescSets.push(((XGL_UPDATE_AS_COPY*)pUpdateArray)->descriptorSet);
+ ((XGL_UPDATE_AS_COPY*)pUpdateArray)->descriptorSet = m_objMapper.remap(((XGL_UPDATE_AS_COPY*)pUpdateArray)->descriptorSet);
break;
+ }
default:
+ {
assert(0);
break;
+ }
}
- pUpdateChain = (XGL_UPDATE_SAMPLERS*) pUpdateChain->pNext;
+ pUpdateArray = (XGL_UPDATE_SAMPLERS*) pUpdateArray->pNext;
}
- m_xglFuncs.real_xglUpdateDescriptors(m_objMapper.remap(pPacket->descriptorSet), pPacket->pUpdateChain);
- pUpdateChain = (XGL_UPDATE_SAMPLERS*) pPacket->pUpdateChain;
- while (pUpdateChain) {
- switch(pUpdateChain->sType)
+ m_xglFuncs.real_xglUpdateDescriptors(m_objMapper.remap(pPacket->descriptorSet), pPacket->updateCount, pPacket->ppUpdateArray);
+ for (j = 0; j < pPacket->updateCount; j++)
+ {
+ XGL_UPDATE_SAMPLERS* pUpdateArray = (XGL_UPDATE_SAMPLERS*)pPacket->ppUpdateArray[j];
+ switch(pUpdateArray->sType)
{
case XGL_STRUCTURE_TYPE_UPDATE_SAMPLERS:
- for (uint32_t i = 0; i < ((XGL_UPDATE_SAMPLERS*)pUpdateChain)->count; i++) {
- XGL_SAMPLER* pLocalSampler = (XGL_SAMPLER*) &((XGL_UPDATE_SAMPLERS*)pUpdateChain)->pSamplers[i];
+ for (uint32_t i = 0; i < ((XGL_UPDATE_SAMPLERS*)pUpdateArray)->count; i++) {
+ XGL_SAMPLER* pLocalSampler = (XGL_SAMPLER*) &((XGL_UPDATE_SAMPLERS*)pUpdateArray)->pSamplers[i];
*pLocalSampler = saveSamplers.front();
saveSamplers.pop();
}
break;
case XGL_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES:
{
- XGL_UPDATE_SAMPLER_TEXTURES *pUST = (XGL_UPDATE_SAMPLER_TEXTURES *) pUpdateChain;
+ XGL_UPDATE_SAMPLER_TEXTURES *pUST = (XGL_UPDATE_SAMPLER_TEXTURES *) pUpdateArray;
for (uint32_t i = 0; i < pUST->count; i++) {
- XGL_SAMPLER *plocalSampler = (XGL_SAMPLER *) &pUST->pSamplerImageViews[i].pSampler;
+ XGL_SAMPLER *plocalSampler = (XGL_SAMPLER *) &pUST->pSamplerImageViews[i].sampler;
*plocalSampler = saveSamplers.front();
saveSamplers.pop();
XGL_IMAGE_VIEW *pLocalView = (XGL_IMAGE_VIEW *) &pUST->pSamplerImageViews[i].pImageView->view;
@@ -607,9 +617,9 @@
}
case XGL_STRUCTURE_TYPE_UPDATE_IMAGES:
{
- XGL_UPDATE_IMAGES *pUI = (XGL_UPDATE_IMAGES*) pUpdateChain;
+ XGL_UPDATE_IMAGES *pUI = (XGL_UPDATE_IMAGES*) pUpdateArray;
for (uint32_t i = 0; i < pUI->count; i++) {
- XGL_IMAGE_VIEW* pLocalView = (XGL_IMAGE_VIEW*) &pUI->pImageViews[i]->view;
+ XGL_IMAGE_VIEW* pLocalView = (XGL_IMAGE_VIEW*) &pUI->pImageViews[i].view;
*pLocalView = saveImageViews.front();
saveImageViews.pop();
}
@@ -617,26 +627,24 @@
}
case XGL_STRUCTURE_TYPE_UPDATE_BUFFERS:
{
- XGL_UPDATE_BUFFERS *pUB = (XGL_UPDATE_BUFFERS *) pUpdateChain;
+ XGL_UPDATE_BUFFERS *pUB = (XGL_UPDATE_BUFFERS *) pUpdateArray;
for (uint32_t i = 0; i < pUB->count; i++) {
- XGL_BUFFER_VIEW* pLocalView = (XGL_BUFFER_VIEW*) &pUB->pBufferViews[i]->view;
+ XGL_BUFFER_VIEW* pLocalView = (XGL_BUFFER_VIEW*) &pUB->pBufferViews[i].view;
*pLocalView = saveBufferViews.front();
saveBufferViews.pop();
}
break;
}
case XGL_STRUCTURE_TYPE_UPDATE_AS_COPY:
- ((XGL_UPDATE_AS_COPY*)pUpdateChain)->descriptorSet = saveDescSets.front();
+ ((XGL_UPDATE_AS_COPY*)pUpdateArray)->descriptorSet = saveDescSets.front();
saveDescSets.pop();
- //pFreeMe = (XGL_UPDATE_SAMPLERS*)pLocalUpdateChain;
//pLocalUpdateChain = (void*)((XGL_UPDATE_SAMPLERS*)pLocalUpdateChain)->pNext;
- //free(pFreeMe);
break;
default:
assert(0);
break;
}
- pUpdateChain = (XGL_UPDATE_SAMPLERS*) pUpdateChain->pNext;
+ pUpdateArray = (XGL_UPDATE_SAMPLERS*) pUpdateArray->pNext;
}
return returnValue;
}
@@ -645,21 +653,48 @@
{
XGL_RESULT replayResult = XGL_ERROR_UNKNOWN;
glv_replay::GLV_REPLAY_RESULT returnValue = glv_replay::GLV_REPLAY_SUCCESS;
- XGL_SAMPLER saveSampler;
- if (pPacket->pSetLayoutInfoList != NULL) {
- XGL_SAMPLER *pSampler = (XGL_SAMPLER *) &pPacket->pSetLayoutInfoList->immutableSampler;
- saveSampler = pPacket->pSetLayoutInfoList->immutableSampler;
- *pSampler = m_objMapper.remap(saveSampler);
+ XGL_SAMPLER *pSaveSampler;
+ XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO *pInfo = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO *) pPacket->pCreateInfo;
+ if (pInfo != NULL)
+ {
+ size_t bytesAlloc = 0;
+ for (unsigned int i = 0; i < pInfo->count; i++)
+ {
+ XGL_DESCRIPTOR_SET_LAYOUT_BINDING *pLayoutBind = (XGL_DESCRIPTOR_SET_LAYOUT_BINDING *) &pInfo->pBinding[i];
+ bytesAlloc += pLayoutBind->count * sizeof(XGL_SAMPLER);
+ }
+ pSaveSampler = (XGL_SAMPLER *) glv_malloc(bytesAlloc);
+ XGL_SAMPLER *pArray = pSaveSampler;
+ for (unsigned int i = 0; i < pInfo->count; i++)
+ {
+ XGL_DESCRIPTOR_SET_LAYOUT_BINDING *pLayoutBind = (XGL_DESCRIPTOR_SET_LAYOUT_BINDING *) &pInfo->pBinding[i];
+ for (unsigned int j = 0; j < pLayoutBind->count; j++)
+ {
+ XGL_SAMPLER *pOrigSampler = (XGL_SAMPLER *) pLayoutBind->pImmutableSamplers + j;
+ *pArray++ = *((XGL_SAMPLER *) pLayoutBind->pImmutableSamplers + j);
+ *pOrigSampler = m_objMapper.remap(*pOrigSampler);
+ }
+ }
}
XGL_DESCRIPTOR_SET_LAYOUT setLayout;
- replayResult = m_xglFuncs.real_xglCreateDescriptorSetLayout(m_objMapper.remap(pPacket->device), pPacket->stageFlags, pPacket->pSetBindPoints, m_objMapper.remap(pPacket->priorSetLayout), pPacket->pSetLayoutInfoList, &setLayout);
+ replayResult = m_xglFuncs.real_xglCreateDescriptorSetLayout(m_objMapper.remap(pPacket->device), pPacket->pCreateInfo, &setLayout);
if (replayResult == XGL_SUCCESS)
{
m_objMapper.add_to_map(pPacket->pSetLayout, &setLayout);
}
- if (pPacket->pSetLayoutInfoList != NULL) {
- XGL_SAMPLER *pSampler = (XGL_SAMPLER *) &pPacket->pSetLayoutInfoList->immutableSampler;
- *pSampler = saveSampler;
+ if (pPacket->pCreateInfo != NULL)
+ {
+ XGL_SAMPLER *pArray = pSaveSampler;
+ for (unsigned int i = 0; i < pInfo->count; i++)
+ {
+ XGL_DESCRIPTOR_SET_LAYOUT_BINDING *pLayoutBind = (XGL_DESCRIPTOR_SET_LAYOUT_BINDING *) &pInfo->pBinding[i];
+ for (unsigned int j = 0; j < pLayoutBind->count; j++)
+ {
+ XGL_SAMPLER *pOrigSampler = (XGL_SAMPLER *) pLayoutBind->pImmutableSamplers + j;
+ *pOrigSampler = *pArray++;
+ }
+ }
+ glv_free(pSaveSampler);
}
CHECK_RETURN_VALUE(xglCreateDescriptorSetLayout);
return returnValue;
@@ -673,7 +708,7 @@
struct shaderPair saveShader[10];
unsigned int idx = 0;
memcpy(&createInfo, pPacket->pCreateInfo, sizeof(XGL_GRAPHICS_PIPELINE_CREATE_INFO));
- createInfo.lastSetLayout = m_objMapper.remap(createInfo.lastSetLayout);
+ createInfo.pSetLayoutChain = m_objMapper.remap(createInfo.pSetLayoutChain);
// Cast to shader type, as those are of primariy interest and all structs in LL have same header w/ sType & pNext
XGL_PIPELINE_SHADER_STAGE_CREATE_INFO* pPacketNext = (XGL_PIPELINE_SHADER_STAGE_CREATE_INFO*)pPacket->pCreateInfo->pNext;
XGL_PIPELINE_SHADER_STAGE_CREATE_INFO* pNext = (XGL_PIPELINE_SHADER_STAGE_CREATE_INFO*)createInfo.pNext;
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 96a5161..b8bdcf6 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
@@ -331,10 +331,20 @@
while (pInNow != NULL)
{
XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO** ppOutNow = ppOutNext;
+ size_t i;
ppOutNext = NULL;
glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO), pInNow);
ppOutNext = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO**)&(*ppOutNow)->pNext;
glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));
+ for (i = 0; i < pInNow->count; i++)
+ {
+ 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**)&((*ppOutNow)->pBinding), sizeof(XGL_DESCRIPTOR_SET_LAYOUT_BINDING) * pInNow->count, pInNow->pBinding);
+ glv_finalize_buffer_address(pHeader, (void**)&((*ppOutNow)->pBinding));
pInNow = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO*)pInNow->pNext;
}
return;