glave: Update more trace custom code to use generated struct sizing code instead
diff --git a/glave-generate.py b/glave-generate.py
index 876c4c2..065cc55 100755
--- a/glave-generate.py
+++ b/glave-generate.py
@@ -413,21 +413,15 @@
# Take a list of params and return a list of packet size elements
def _get_packet_size(self, params):
- ps = []
+ 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 = {'xgl_shader_create_info': 'get_struct_chain_size((void*)pCreateInfo)',
- 'xgl_graphics_pipeline_create_info': 'get_struct_chain_size((void*)pCreateInfo)',
- 'pUpdateChain': 'get_struct_chain_size(pUpdateChain)',
- 'pSetBindPoints': '(XGL_SHADER_STAGE_COMPUTE * sizeof(uint32_t))', # Accounting for largest possible array
- 'xgl_descriptor_set_layout_create_info': 'get_struct_chain_size((void*)pSetLayoutInfoList)',
- 'xgl_cmd_buffer_begin_info': 'get_struct_chain_size((void*)pBeginInfo)',
- 'xgl_memory_alloc_info': 'get_struct_chain_size((void*)pAllocInfo)',
- 'xgl_compute_pipeline_create_info': 'get_struct_chain_size((void*)pCreateInfo)'}
+ 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.ty.strip('*').replace('const ', '').lower() in custom_size_dict:
- ps.append(custom_size_dict[p.ty.strip('*').replace('const ', '').lower()])
+ if p.name in ['pCreateInfo', 'pUpdateChain', 'pSetLayoutInfoList', '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])
@@ -459,8 +453,6 @@
ps.append('sizeof(%s)' % p.name)
elif 'char' in p.ty:
ps.append('((%s != NULL) ? strlen(%s) + 1 : 0)' % (p.name, p.name))
- elif 'DEVICE_CREATE_INFO' in p.ty:
- ps.append('calc_size_XGL_DEVICE_CREATE_INFO(pCreateInfo)')
elif 'pDataSize' in p.name:
ps.append('((pDataSize != NULL) ? sizeof(size_t) : 0)')
elif 'IMAGE_SUBRESOURCE' in p.ty and 'pSubresource' == p.name:
@@ -564,28 +556,22 @@
func_body.append(' pHeader->entrypoint_begin_time = startTime;')
elif proto.name in ['CreateFramebuffer', 'CreateRenderPass', 'CreateDynamicViewportState',
'CreateDescriptorRegion', 'CmdWaitEvents', 'CmdPipelineBarrier']:
- # these are regular case as far as sequence of tracing but custom sizes
- func_body.append(' size_t customSize;')
+ # 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;')
func_body.append(' uint32_t colorCount = (pCreateInfo != NULL && pCreateInfo->pColorAttachments != NULL) ? pCreateInfo->colorAttachmentCount : 0;')
- func_body.append(' customSize = colorCount * sizeof(XGL_COLOR_ATTACHMENT_BIND_INFO) + dsSize;')
- func_body.append(' CREATE_TRACE_PACKET(xglCreateFramebuffer, sizeof(XGL_FRAMEBUFFER_CREATE_INFO) + sizeof(XGL_FRAMEBUFFER) + customSize);')
+ func_body.append(' CREATE_TRACE_PACKET(xglCreateFramebuffer, get_struct_chain_size((void*)pCreateInfo) + sizeof(XGL_FRAMEBUFFER));')
elif 'CreateRenderPass' == proto.name:
func_body.append(' uint32_t colorCount = (pCreateInfo != NULL && (pCreateInfo->pColorLoadOps != NULL || pCreateInfo->pColorStoreOps != NULL || pCreateInfo->pColorLoadClearValues != NULL)) ? pCreateInfo->colorAttachmentCount : 0;')
- func_body.append(' customSize = colorCount * ((pCreateInfo->pColorLoadOps != NULL) ? sizeof(XGL_ATTACHMENT_LOAD_OP) : 0);')
- func_body.append(' customSize += colorCount * ((pCreateInfo->pColorStoreOps != NULL) ? sizeof(XGL_ATTACHMENT_STORE_OP) : 0);')
- func_body.append(' customSize += colorCount * ((pCreateInfo->pColorLoadClearValues != NULL) ? sizeof(XGL_CLEAR_COLOR) : 0);')
- func_body.append(' CREATE_TRACE_PACKET(xglCreateRenderPass, sizeof(XGL_RENDER_PASS_CREATE_INFO) + sizeof(XGL_RENDER_PASS) + customSize);')
+ func_body.append(' CREATE_TRACE_PACKET(xglCreateRenderPass, get_struct_chain_size((void*)pCreateInfo) + sizeof(XGL_RENDER_PASS));')
elif 'CreateDynamicViewportState' == proto.name:
func_body.append(' uint32_t vpsCount = (pCreateInfo != NULL && pCreateInfo->pViewports != NULL) ? pCreateInfo->viewportAndScissorCount : 0;')
- func_body.append(' customSize = vpsCount * sizeof(XGL_VIEWPORT) + vpsCount * sizeof(XGL_RECT);')
- func_body.append(' CREATE_TRACE_PACKET(xglCreateDynamicViewportState, sizeof(XGL_DYNAMIC_VP_STATE_CREATE_INFO) + sizeof(XGL_DYNAMIC_VP_STATE_OBJECT) + customSize);')
+ func_body.append(' CREATE_TRACE_PACKET(xglCreateDynamicViewportState, get_struct_chain_size((void*)pCreateInfo) + sizeof(XGL_DYNAMIC_VP_STATE_OBJECT));')
elif 'CreateDescriptorRegion' == proto.name:
func_body.append(' uint32_t rgCount = (pCreateInfo != NULL && pCreateInfo->pTypeCount != NULL) ? pCreateInfo->count : 0;')
- func_body.append(' customSize = rgCount * sizeof(XGL_DESCRIPTOR_TYPE_COUNT);')
- func_body.append(' CREATE_TRACE_PACKET(xglCreateDescriptorRegion, sizeof(XGL_DESCRIPTOR_REGION_CREATE_INFO) + sizeof(XGL_DESCRIPTOR_REGION) + customSize);')
+ func_body.append(' CREATE_TRACE_PACKET(xglCreateDescriptorRegion, get_struct_chain_size((void*)pCreateInfo) + sizeof(XGL_DESCRIPTOR_REGION));')
else: # ['CmdWaitEvents', 'CmdPipelineBarrier']:
+ func_body.append(' size_t customSize;')
event_array_type = 'XGL_EVENT'
if 'CmdPipelineBarrier' == proto.name:
event_array_type = 'XGL_SET_EVENT'
@@ -1309,35 +1295,11 @@
pid_enum.append(' glv_finalize_buffer_address(pHeader, (void**)&*ppStruct);')
pid_enum.append('};\n')
pid_enum.append('//=============================================================================\n')
- pid_enum.append('static uint64_t calc_size_XGL_DEVICE_CREATE_INFO(const XGL_DEVICE_CREATE_INFO* pStruct)')
- pid_enum.append('{')
- pid_enum.append(' uint64_t total_size_ppEnabledExtensionNames = pStruct->extensionCount * sizeof(char *);')
- pid_enum.append(' uint32_t i;')
- pid_enum.append(' for (i = 0; i < pStruct->extensionCount; i++)')
- pid_enum.append(' {')
- pid_enum.append(' total_size_ppEnabledExtensionNames += strlen(pStruct->ppEnabledExtensionNames[i]) + 1;')
- pid_enum.append(' }')
- pid_enum.append(' uint64_t total_size_layers = 0;')
- pid_enum.append(' XGL_LAYER_CREATE_INFO *pNext = ( XGL_LAYER_CREATE_INFO *) pStruct->pNext;')
- pid_enum.append(' while (pNext != NULL)')
- pid_enum.append(' {')
- pid_enum.append(' if ((pNext->sType == XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO) && pNext->layerCount > 0)')
- pid_enum.append(' {')
- pid_enum.append(' total_size_layers += sizeof(XGL_LAYER_CREATE_INFO);')
- pid_enum.append(' for (i = 0; i < pNext->layerCount; i++)')
- pid_enum.append(' {')
- pid_enum.append(' total_size_layers += strlen(pNext->ppActiveLayerNames[i]) + 1;')
- pid_enum.append(' }')
- pid_enum.append(' }')
- pid_enum.append(' pNext = ( XGL_LAYER_CREATE_INFO *) pNext->pNext;')
- pid_enum.append(' }')
- pid_enum.append(' return sizeof(XGL_DEVICE_CREATE_INFO) + (pStruct->queueRecordCount*sizeof(XGL_DEVICE_CREATE_INFO)) + total_size_ppEnabledExtensionNames + total_size_layers;')
- pid_enum.append('}\n')
pid_enum.append('static void add_XGL_DEVICE_CREATE_INFO_to_packet(glv_trace_packet_header* pHeader, XGL_DEVICE_CREATE_INFO** ppStruct, const XGL_DEVICE_CREATE_INFO *pInStruct)')
pid_enum.append('{')
pid_enum.append(' uint32_t i;')
pid_enum.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)ppStruct, sizeof(XGL_DEVICE_CREATE_INFO), pInStruct);')
- pid_enum.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(*ppStruct)->pRequestedQueues, pInStruct->queueRecordCount*sizeof(XGL_DEVICE_CREATE_INFO), pInStruct->pRequestedQueues);')
+ pid_enum.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(*ppStruct)->pRequestedQueues, pInStruct->queueRecordCount*sizeof(XGL_DEVICE_QUEUE_CREATE_INFO), pInStruct->pRequestedQueues);')
pid_enum.append(' glv_finalize_buffer_address(pHeader, (void**)&(*ppStruct)->pRequestedQueues);')
pid_enum.append(' if (pInStruct->extensionCount > 0) ')
pid_enum.append(' {')
diff --git a/xgl_helper.py b/xgl_helper.py
index 56ce09b..c554573 100755
--- a/xgl_helper.py
+++ b/xgl_helper.py
@@ -65,7 +65,8 @@
# |->['const'] = bool indicating if this member is const
# |->['struct'] = bool indicating if this member is a struct type
# |->['array'] = bool indicating if this member is an array
-# '->['array_size'] = int indicating size of array members (0 by default)
+# |->['dyn_array'] = bool indicating if member is a dynamically sized array
+# '->['array_size'] = For dyn_array, member name used to size array, else int size for static array
struct_dict = {}
# typedef_fwd_dict stores mapping from orig_type_name -> new_type_name
typedef_fwd_dict = {}
@@ -1006,7 +1007,7 @@
if is_type(self.struct_dict[s][m]['type'], 'struct'):
sh_funcs.append('%sstructSize += (sizeof(%s*) + %s(pStruct->%s[i]));' % (indent, self.struct_dict[s][m]['type'], self._get_size_helper_func_name(self.struct_dict[s][m]['type']), self.struct_dict[s][m]['name']))
else:
- sh_funcs.append('%sstructSize += (sizeof(char) * strlen(pStruct->%s[i]));' % (indent, self.struct_dict[s][m]['name']))
+ sh_funcs.append('%sstructSize += (sizeof(char*) + (sizeof(char) * (1 + strlen(pStruct->%s[i]))));' % (indent, self.struct_dict[s][m]['name']))
indent = ' '
sh_funcs.append('%s}' % (indent))
else:
@@ -1023,7 +1024,7 @@
sh_funcs.append('%sstructSize += pStruct->%s*sizeof(%s);' % (indent, self.struct_dict[s][m]['array_size'], self.struct_dict[s][m]['type']))
elif self.struct_dict[s][m]['ptr'] and 'pNext' != self.struct_dict[s][m]['name']:
if 'char' in self.struct_dict[s][m]['type'].lower():
- sh_funcs.append('%sstructSize += sizeof(%s)*strlen(pStruct->%s);' % (indent, self.struct_dict[s][m]['type'], self.struct_dict[s][m]['name']))
+ sh_funcs.append('%sstructSize += sizeof(%s)*(1+strlen(pStruct->%s));' % (indent, self.struct_dict[s][m]['type'], self.struct_dict[s][m]['name']))
elif is_type(self.struct_dict[s][m]['type'], 'struct'):
sh_funcs.append('%sstructSize += %s(pStruct->%s);' % (indent, self._get_size_helper_func_name(self.struct_dict[s][m]['type']), self.struct_dict[s][m]['name']))
else:
@@ -1050,6 +1051,7 @@
sh_funcs.append(' break;')
sh_funcs.append(' }')
sh_funcs.append(" default:")
+ sh_funcs.append(" assert(0);")
sh_funcs.append(" structSize += 0;")
sh_funcs.append(' }')
sh_funcs.append(' pNext = (XGL_APPLICATION_INFO*)pNext->pNext;')