glave: cleanup codegen of trace functionality
* Splits declarations from implementations so that the implementations can be done in separate files - some codegen'd, some manually written.
* Many of the declarations are now marked as extern.
* I tried to remove as many of the big conditional blocks of code in the script that were specific to a single function. There are certainly still conditionals for small changes, but many of the calls should follow a consistent path through the script now.
diff --git a/tools/glave/scripts/vk_generate.py b/tools/glave/scripts/vk_generate.py
index e9c9076..78a1cb8 100755
--- a/tools/glave/scripts/vk_generate.py
+++ b/tools/glave/scripts/vk_generate.py
@@ -179,20 +179,34 @@
return "\n".join(func_protos)
+ def _generate_trace_real_func_ptr_protos(self):
+ func_ptr_assign = []
+ func_ptr_assign.append('')
+ for proto in self.protos:
+ if 'Dbg' not in proto.name and 'Wsi' not in proto.name:
+ func_ptr_assign.append('extern %s( XGLAPI * real_xgl%s)(' % (proto.ret, proto.name))
+ for p in proto.params:
+ if 'color' == p.name:
+ func_ptr_assign.append(' %s %s[4],' % (p.ty.replace('[4]', ''), p.name))
+ else:
+ func_ptr_assign.append(' %s %s,' % (p.ty, p.name))
+ func_ptr_assign[-1] = func_ptr_assign[-1].replace(',', ');\n')
+ return "\n".join(func_ptr_assign)
+
def _generate_func_ptr_assignments(self):
func_ptr_assign = []
for proto in self.protos:
if 'Dbg' not in proto.name and 'Wsi' not in proto.name:
- func_ptr_assign.append('static %s( XGLAPI * real_xgl%s)(' % (proto.ret, proto.name))
+ func_ptr_assign.append('%s( XGLAPI * real_xgl%s)(' % (proto.ret, proto.name))
for p in proto.params:
if 'color' == p.name:
func_ptr_assign.append(' %s %s[4],' % (p.ty.replace('[4]', ''), p.name))
else:
func_ptr_assign.append(' %s %s,' % (p.ty, p.name))
func_ptr_assign[-1] = func_ptr_assign[-1].replace(',', ') = xgl%s;\n' % (proto.name))
- func_ptr_assign.append('static BOOL isHooked = FALSE;\n')
return "\n".join(func_ptr_assign)
+
def _generate_func_ptr_assignments_ext(self, func_class='Wsi'):
func_ptr_assign = []
for proto in self.protos:
@@ -205,6 +219,8 @@
def _generate_attach_hooks(self):
hooks_txt = []
+ hooks_txt.append('// declared as extern in glvtrace_xgl_helpers.h')
+ hooks_txt.append('BOOL isHooked = FALSE;\n')
hooks_txt.append('void AttachHooks()\n{\n BOOL hookSuccess = TRUE;\n#if defined(WIN32)')
hooks_txt.append(' Mhook_BeginMultiOperation(FALSE);')
# TODO : Verify if CreateInstance is appropriate to key off of here
@@ -301,7 +317,7 @@
init_tracer.append(' pPacket->version = XGL_API_VERSION;')
init_tracer.append(' FINISH_TRACE_PACKET();\n}\n')
- init_tracer.append('static GLV_CRITICAL_SECTION g_memInfoLock;')
+ init_tracer.append('extern GLV_CRITICAL_SECTION g_memInfoLock;')
init_tracer.append('void InitTracer(void)\n{')
init_tracer.append(' char *ipAddr = glv_get_global_var("GLVLIB_TRACE_IPADDR");')
init_tracer.append(' if (ipAddr == NULL)')
@@ -314,41 +330,6 @@
init_tracer.append(' send_xgl_api_version_packet();\n}\n')
return "\n".join(init_tracer)
- def _gen_unmap_memory(self):
- um_body = []
- um_body.append('GLVTRACER_EXPORT XGL_RESULT XGLAPI __HOOKED_xglUnmapMemory(')
- um_body.append(' XGL_GPU_MEMORY mem)')
- um_body.append('{')
- um_body.append(' glv_trace_packet_header* pHeader;')
- um_body.append(' XGL_RESULT result;')
- um_body.append(' struct_xglUnmapMemory* pPacket;')
- um_body.append(' XGLAllocInfo *entry;')
- um_body.append(' SEND_ENTRYPOINT_PARAMS("xglUnmapMemory(mem %p)\\n", mem);')
- um_body.append(' // insert into packet the data that was written by CPU between the xglMapMemory call and here')
- um_body.append(' // Note must do this prior to the real xglUnMap() or else may get a FAULT')
- um_body.append(' glv_enter_critical_section(&g_memInfoLock);')
- um_body.append(' entry = find_mem_info_entry(mem);')
- um_body.append(' CREATE_TRACE_PACKET(xglUnmapMemory, (entry) ? entry->size : 0);')
- um_body.append(' pPacket = interpret_body_as_xglUnmapMemory(pHeader);')
- um_body.append(' if (entry)')
- um_body.append(' {')
- um_body.append(' assert(entry->handle == mem);')
- um_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**) &(pPacket->pData), entry->size, entry->pData);')
- um_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pData));')
- um_body.append(' entry->pData = NULL;')
- um_body.append(' } else')
- um_body.append(' {')
- um_body.append(' glv_LogError("Failed to copy app memory into trace packet (idx = %u) on xglUnmapMemory\\n", pHeader->global_packet_index);')
- um_body.append(' }')
- um_body.append(' glv_leave_critical_section(&g_memInfoLock);')
- um_body.append(' result = real_xglUnmapMemory(mem);')
- um_body.append(' pPacket->mem = mem;')
- um_body.append(' pPacket->result = result;')
- um_body.append(' FINISH_TRACE_PACKET();')
- um_body.append(' return result;')
- um_body.append('}\n')
- return "\n".join(um_body)
-
# Take a list of params and return a list of dicts w/ ptr param details
def _get_packet_ptr_param_list(self, params):
ptr_param_list = []
@@ -478,9 +459,12 @@
# return result?
def _generate_trace_funcs(self):
func_body = []
+ manually_written_hooked_funcs = ['CreateInstance', 'EnumerateLayers', 'EnumerateGpus',
+ 'AllocDescriptorSets', 'MapMemory', 'UnmapMemory',
+ 'CmdPipelineBarrier', 'CmdWaitEvents']
for proto in self.protos:
- if 'UnmapMemory' == proto.name:
- func_body.append(self._gen_unmap_memory())
+ if proto.name in manually_written_hooked_funcs:
+ func_body.append( '// __HOOKED_xgl%s is manually written. Look in glvtrace_xgl_trace.c\n' % proto.name)
elif 'Dbg' not in proto.name and 'Wsi' not in proto.name:
raw_packet_update_list = [] # non-ptr elements placed directly into packet
ptr_packet_update_list = [] # ptr elements to be updated into packet
@@ -516,51 +500,8 @@
func_body.append(' struct_xgl%s* pPacket = NULL;' % proto.name)
# 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 'CreateInstance' == proto.name:
- func_body.append(' uint64_t startTime;')
- func_body.append(' glv_platform_thread_once(&gInitOnce, InitTracer);')
- func_body.append(' SEND_ENTRYPOINT_ID(xgl%s);' % proto.name)
- func_body.append(' if (real_xglCreateInstance == xglCreateInstance)')
- func_body.append(' {')
- func_body.append(' glv_platform_get_next_lib_sym((void **) &real_xglCreateInstance,"xglCreateInstance");')
- func_body.append(' }')
- func_body.append(' startTime = glv_get_time();')
- func_body.append(' %sreal_xgl%s;' % (return_txt, proto.c_call()))
- func_body.append(' CREATE_TRACE_PACKET(xgl%s, sizeof(XGL_INSTANCE) + get_struct_chain_size((void*)pAppInfo) + ((pAllocCb == NULL) ? 0 :sizeof(XGL_ALLOC_CALLBACKS)));' % (proto.name))
- func_body.append(' pHeader->entrypoint_begin_time = startTime;')
- func_body.append(' if (isHooked == FALSE) {')
- func_body.append(' AttachHooks();')
- func_body.append(' AttachHooks_xgldbg();')
- func_body.append(' AttachHooks_xglwsix11ext();')
- func_body.append(' }')
- elif 'EnumerateGpus' == proto.name:
- func_body.append(' uint64_t startTime;')
- func_body.append(' SEND_ENTRYPOINT_ID(xgl%s);' % proto.name)
- func_body.append(' startTime = glv_get_time();')
- func_body.append(' %sreal_xgl%s;' % (return_txt, proto.c_call()))
- func_body.append(' CREATE_TRACE_PACKET(xglEnumerateGpus, sizeof(uint32_t) + ((pGpus && pGpuCount) ? *pGpuCount * sizeof(XGL_PHYSICAL_GPU) : 0));')
- func_body.append(' pHeader->entrypoint_begin_time = startTime;')
- elif 'EnumerateLayers' == proto.name:
- func_body.append(' uint64_t startTime;')
- func_body.append(' SEND_ENTRYPOINT_ID(xgl%s);' % proto.name)
- func_body.append(' startTime = glv_get_time();')
- func_body.append(' %sreal_xgl%s;' % (return_txt, proto.c_call()))
- func_body.append(' size_t totStringSize = 0;')
- func_body.append(' uint32_t i = 0;')
- func_body.append(' for (i = 0; i < *pOutLayerCount; i++)')
- func_body.append(' totStringSize += (pOutLayers[i] != NULL) ? strlen(pOutLayers[i]) + 1: 0;')
- func_body.append(' CREATE_TRACE_PACKET(xgl%s, totStringSize + sizeof(size_t));' % (proto.name))
- func_body.append(' pHeader->entrypoint_begin_time = startTime;')
- elif 'AllocDescriptorSets' == proto.name:
- func_body.append(' uint64_t startTime;')
- func_body.append(' SEND_ENTRYPOINT_ID(xgl%s);' % proto.name)
- func_body.append(' startTime = glv_get_time();')
- func_body.append(' %sreal_xgl%s;' % (return_txt, proto.c_call()))
- func_body.append(' size_t customSize = (*pCount <= 0) ? (sizeof(XGL_DESCRIPTOR_SET)) : (*pCount * sizeof(XGL_DESCRIPTOR_SET));')
- func_body.append(' CREATE_TRACE_PACKET(xglAllocDescriptorSets, sizeof(XGL_DESCRIPTOR_SET_LAYOUT) + customSize + sizeof(uint32_t));')
- func_body.append(' pHeader->entrypoint_begin_time = startTime;')
- elif proto.name in ['CreateFramebuffer', 'CreateRenderPass', 'CreateDynamicViewportState',
- 'CreateDescriptorRegion', 'CmdWaitEvents', 'CmdPipelineBarrier']:
+ if proto.name in ['CreateFramebuffer', 'CreateRenderPass', 'CreateDynamicViewportState',
+ 'CreateDescriptorRegion']:
# 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;')
@@ -575,15 +516,6 @@
elif 'CreateDescriptorRegion' == proto.name:
func_body.append(' uint32_t rgCount = (pCreateInfo != NULL && pCreateInfo->pTypeCount != NULL) ? pCreateInfo->count : 0;')
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'
- func_body.append(' uint32_t eventCount = (%s != NULL && %s->pEvents != NULL) ? %s->eventCount : 0;' % (proto.params[-1].name, proto.params[-1].name, proto.params[-1].name))
- func_body.append(' uint32_t mbCount = (%s != NULL && %s->ppMemBarriers != NULL) ? %s->memBarrierCount : 0;' % (proto.params[-1].name, proto.params[-1].name, proto.params[-1].name))
- func_body.append(' customSize = (eventCount * sizeof(%s)) + mbCount * sizeof(void*) + calculate_memory_barrier_size(mbCount, %s->ppMemBarriers);' % (event_array_type, proto.params[-1].name))
- func_body.append(' CREATE_TRACE_PACKET(xgl%s, sizeof(%s) + customSize);' % (proto.name, proto.params[-1].ty.strip('*').replace('const ', '')))
func_body.append(' %sreal_xgl%s;' % (return_txt, proto.c_call()))
else:
if (0 == len(packet_size)):
@@ -595,72 +527,18 @@
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))
- if 'MapMemory' == proto.name: # Custom code for MapMem case
- func_body.append(' if (ppData != NULL)')
- func_body.append(' {')
- func_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->ppData), sizeof(void*), *ppData);')
- func_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->ppData));')
- func_body.append(' add_data_to_mem_info(mem, *ppData);')
- func_body.append(' }')
+ 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;')
- func_body.append(' FINISH_TRACE_PACKET();')
- elif 'EnumerateLayers' == proto.name: #custom code for EnumerateLayers case
- func_body.append(' pPacket->gpu = gpu;')
- func_body.append(' pPacket->maxLayerCount = maxLayerCount;')
- func_body.append(' pPacket->maxStringSize = maxStringSize;')
- func_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pOutLayerCount), sizeof(size_t), pOutLayerCount);')
- func_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pOutLayerCount));')
- func_body.append(' for (i = 0; i < *pOutLayerCount; i++) {')
- func_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->pOutLayers[i]), ((pOutLayers[i] != NULL) ? strlen(pOutLayers[i]) + 1 : 0), pOutLayers[i]);')
- func_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pOutLayers[i]));')
- func_body.append(' }')
-
- func_body.append(' pPacket->pReserved = pReserved;')
- func_body.append(' pPacket->result = result;')
- 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']))
- # Some custom add_* and finalize_* function calls for Create* API calls
- if proto.name in ['CmdWaitEvents', 'CmdPipelineBarrier']:
- event_array_type = 'XGL_EVENT'
- if 'CmdPipelineBarrier' == proto.name:
- event_array_type = 'XGL_SET_EVENT'
- func_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->%s->pEvents), eventCount * sizeof(%s), %s->pEvents);' % (proto.params[-1].name, event_array_type, proto.params[-1].name))
- func_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->%s->pEvents));' % (proto.params[-1].name))
- func_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->%s->ppMemBarriers), mbCount * sizeof(void*), %s->ppMemBarriers);' % (proto.params[-1].name, proto.params[-1].name))
- func_body.append(' uint32_t i, siz;')
- func_body.append(' for (i = 0; i < mbCount; i++) {')
- func_body.append(' XGL_MEMORY_BARRIER *pNext = (XGL_MEMORY_BARRIER *) %s->ppMemBarriers[i];' % proto.params[-1].name)
- func_body.append(' switch (pNext->sType) {')
- func_body.append(' case XGL_STRUCTURE_TYPE_MEMORY_BARRIER:')
- func_body.append(' siz = sizeof(XGL_MEMORY_BARRIER);')
- func_body.append(' break;')
- func_body.append(' case XGL_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER:')
- func_body.append(' siz = sizeof(XGL_BUFFER_MEMORY_BARRIER);')
- func_body.append(' break;')
- func_body.append(' case XGL_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER:')
- func_body.append(' siz = sizeof(XGL_IMAGE_MEMORY_BARRIER);')
- func_body.append(' break;')
- func_body.append(' default:')
- func_body.append(' assert(0);')
- func_body.append(' siz = 0;')
- func_body.append(' break;')
- func_body.append(' }')
- func_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->%s->ppMemBarriers[i]), siz, %s->ppMemBarriers[i]);' % (proto.params[-1].name, proto.params[-1].name))
- func_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->%s->ppMemBarriers[i]));' % (proto.params[-1].name))
- func_body.append(' }')
- func_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->%s->ppMemBarriers));' % (proto.params[-1].name))
- 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);')
+ 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 'void' not in proto.ret or '*' in proto.ret:
func_body.append(' return result;')
func_body.append('}\n')
@@ -734,471 +612,6 @@
func_body.append('}\n')
return "\n".join(func_body)
- def _generate_helper_funcs(self):
- hf_body = []
- hf_body.append('// Support for shadowing CPU mapped memory')
- hf_body.append('typedef struct _XGLAllocInfo {')
- hf_body.append(' XGL_GPU_SIZE size;')
- hf_body.append(' XGL_GPU_MEMORY handle;')
- hf_body.append(' void *pData;')
- hf_body.append(' BOOL valid;')
- hf_body.append('} XGLAllocInfo;')
- hf_body.append('typedef struct _XGLMemInfo {')
- hf_body.append(' unsigned int numEntrys;')
- hf_body.append(' XGLAllocInfo *pEntrys;')
- hf_body.append(' XGLAllocInfo *pLastMapped;')
- hf_body.append(' unsigned int capacity;')
- hf_body.append('} XGLMemInfo;')
- hf_body.append('')
- hf_body.append('static XGLMemInfo g_memInfo = {0, NULL, NULL, 0};')
- hf_body.append('')
- hf_body.append('static void init_mem_info_entrys(XGLAllocInfo *ptr, const unsigned int num)')
- hf_body.append('{')
- hf_body.append(' unsigned int i;')
- hf_body.append(' for (i = 0; i < num; i++)')
- hf_body.append(' {')
- hf_body.append(' XGLAllocInfo *entry = ptr + i;')
- hf_body.append(' entry->pData = NULL;')
- hf_body.append(' entry->size = 0;')
- hf_body.append(' entry->handle = NULL;')
- hf_body.append(' entry->valid = FALSE;')
- hf_body.append(' }')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('// caller must hold the g_memInfoLock')
- hf_body.append('static void init_mem_info()')
- hf_body.append('{')
- hf_body.append(' g_memInfo.numEntrys = 0;')
- hf_body.append(' g_memInfo.capacity = 4096;')
- hf_body.append(' g_memInfo.pLastMapped = NULL;')
- hf_body.append('')
- hf_body.append(' g_memInfo.pEntrys = GLV_NEW_ARRAY(XGLAllocInfo, g_memInfo.capacity);')
- hf_body.append('')
- hf_body.append(' if (g_memInfo.pEntrys == NULL)')
- hf_body.append(' glv_LogError("init_mem_info() malloc failed\\n");')
- hf_body.append(' else')
- hf_body.append(' init_mem_info_entrys(g_memInfo.pEntrys, g_memInfo.capacity);')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('// caller must hold the g_memInfoLock')
- hf_body.append('static void delete_mem_info()')
- hf_body.append('{')
- hf_body.append(' GLV_DELETE(g_memInfo.pEntrys);')
- hf_body.append(' g_memInfo.pEntrys = NULL;')
- hf_body.append(' g_memInfo.numEntrys = 0;')
- hf_body.append(' g_memInfo.capacity = 0;')
- hf_body.append(' g_memInfo.pLastMapped = NULL;')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('// caller must hold the g_memInfoLock')
- hf_body.append('static XGLAllocInfo * get_mem_info_entry()')
- hf_body.append('{')
- hf_body.append(' unsigned int i;')
- hf_body.append(' XGLAllocInfo *entry;')
- hf_body.append(' if (g_memInfo.numEntrys > g_memInfo.capacity)')
- hf_body.append(' {')
- hf_body.append(' glv_LogError("get_mem_info_entry() bad internal state numEntrys %u\\n", g_memInfo.numEntrys);')
- hf_body.append(' return NULL;')
- hf_body.append(' }')
- hf_body.append('')
- hf_body.append(' entry = g_memInfo.pEntrys;')
- hf_body.append(' for (i = 0; i < g_memInfo.numEntrys; i++)')
- hf_body.append(' {')
- hf_body.append(' if ((entry + i)->valid == FALSE)')
- hf_body.append(' return entry + i;')
- hf_body.append(' }')
- hf_body.append(' if (g_memInfo.numEntrys == g_memInfo.capacity)')
- hf_body.append(' { // grow the array 2x')
- hf_body.append(' g_memInfo.capacity *= 2;')
- hf_body.append(' g_memInfo.pEntrys = (XGLAllocInfo *) GLV_REALLOC(g_memInfo.pEntrys, g_memInfo.capacity * sizeof(XGLAllocInfo));')
- hf_body.append(' if (g_memInfo.pEntrys == NULL)')
- hf_body.append(' glv_LogError("get_mem_info_entry() realloc failed\\n");')
- hf_body.append(' //glv_LogInfo("realloc memInfo from %u to %u\\n", g_memInfo.capacity /2, g_memInfo.capacity);')
- hf_body.append(' //init the newly added entrys')
- hf_body.append(' init_mem_info_entrys(g_memInfo.pEntrys + g_memInfo.capacity / 2, g_memInfo.capacity / 2);')
- hf_body.append(' }')
- hf_body.append('')
- hf_body.append(' assert(g_memInfo.numEntrys < g_memInfo.capacity);')
- hf_body.append(' entry = g_memInfo.pEntrys + g_memInfo.numEntrys;')
- hf_body.append(' g_memInfo.numEntrys++;')
- hf_body.append(' assert(entry->valid == FALSE);')
- hf_body.append(' return entry;')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('// caller must hold the g_memInfoLock')
- hf_body.append('static XGLAllocInfo * find_mem_info_entry(const XGL_GPU_MEMORY handle)')
- hf_body.append('{')
- hf_body.append(' XGLAllocInfo *entry;')
- hf_body.append(' unsigned int i;')
- hf_body.append(' entry = g_memInfo.pEntrys;')
- hf_body.append(' if (g_memInfo.pLastMapped && g_memInfo.pLastMapped->handle == handle && g_memInfo.pLastMapped->valid)')
- hf_body.append(' {')
- hf_body.append(' return g_memInfo.pLastMapped;')
- hf_body.append(' }')
- hf_body.append(' for (i = 0; i < g_memInfo.numEntrys; i++)')
- hf_body.append(' {')
- hf_body.append(' if ((entry + i)->valid && (handle == (entry + i)->handle))')
- hf_body.append(' {')
- hf_body.append(' return entry + i;')
- hf_body.append(' }')
- hf_body.append(' }')
- hf_body.append('')
- hf_body.append(' return NULL;')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static XGLAllocInfo * find_mem_info_entry_lock(const XGL_GPU_MEMORY handle)')
- hf_body.append('{')
- hf_body.append(' XGLAllocInfo *res;')
- hf_body.append(' glv_enter_critical_section(&g_memInfoLock);')
- hf_body.append(' res = find_mem_info_entry(handle);')
- hf_body.append(' glv_leave_critical_section(&g_memInfoLock);')
- hf_body.append(' return res;')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static void add_new_handle_to_mem_info(const XGL_GPU_MEMORY handle, XGL_GPU_SIZE size, void *pData)')
- hf_body.append('{')
- hf_body.append(' XGLAllocInfo *entry;')
- hf_body.append('')
- hf_body.append(' glv_enter_critical_section(&g_memInfoLock);')
- hf_body.append(' if (g_memInfo.capacity == 0)')
- hf_body.append(' init_mem_info();')
- hf_body.append('')
- hf_body.append(' entry = get_mem_info_entry();')
- hf_body.append(' if (entry)')
- hf_body.append(' {')
- hf_body.append(' entry->valid = TRUE;')
- hf_body.append(' entry->handle = handle;')
- hf_body.append(' entry->size = size;')
- hf_body.append(' entry->pData = pData; // NOTE: xglFreeMemory will free this mem, so no malloc()')
- hf_body.append(' }')
- hf_body.append(' glv_leave_critical_section(&g_memInfoLock);')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static void add_data_to_mem_info(const XGL_GPU_MEMORY handle, void *pData)')
- hf_body.append('{')
- hf_body.append(' XGLAllocInfo *entry;')
- hf_body.append('')
- hf_body.append(' glv_enter_critical_section(&g_memInfoLock);')
- hf_body.append(' entry = find_mem_info_entry(handle);')
- hf_body.append(' if (entry)')
- hf_body.append(' {')
- hf_body.append(' entry->pData = pData;')
- hf_body.append(' }')
- hf_body.append(' g_memInfo.pLastMapped = entry;')
- hf_body.append(' glv_leave_critical_section(&g_memInfoLock);')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static void rm_handle_from_mem_info(const XGL_GPU_MEMORY handle)')
- hf_body.append('{')
- hf_body.append(' XGLAllocInfo *entry;')
- hf_body.append('')
- hf_body.append(' glv_enter_critical_section(&g_memInfoLock);')
- hf_body.append(' entry = find_mem_info_entry(handle);')
- hf_body.append(' if (entry)')
- hf_body.append(' {')
- hf_body.append(' entry->valid = FALSE;')
- hf_body.append(' entry->pData = NULL;')
- hf_body.append(' entry->size = 0;')
- hf_body.append(' entry->handle = NULL;')
- hf_body.append('')
- hf_body.append(' if (entry == g_memInfo.pLastMapped)')
- hf_body.append(' g_memInfo.pLastMapped = NULL;')
- hf_body.append(' // adjust numEntrys to be last valid entry in list')
- hf_body.append(' do {')
- hf_body.append(' entry = g_memInfo.pEntrys + g_memInfo.numEntrys - 1;')
- hf_body.append(' if (entry->valid == FALSE)')
- hf_body.append(' g_memInfo.numEntrys--;')
- hf_body.append(' } while ((entry->valid == FALSE) && (g_memInfo.numEntrys > 0));')
- hf_body.append(' if (g_memInfo.numEntrys == 0)')
- hf_body.append(' delete_mem_info();')
- hf_body.append(' }')
- hf_body.append(' glv_leave_critical_section(&g_memInfoLock);')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static void add_begin_cmdbuf_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)')
- hf_body.append('{')
- hf_body.append(' const XGL_CMD_BUFFER_BEGIN_INFO* pInNow = pIn;')
- hf_body.append(' XGL_CMD_BUFFER_BEGIN_INFO** ppOutNext = (XGL_CMD_BUFFER_BEGIN_INFO**)ppOut;')
- hf_body.append(' while (pInNow != NULL)')
- hf_body.append(' {')
- hf_body.append(' XGL_CMD_BUFFER_BEGIN_INFO** ppOutNow = ppOutNext;')
- hf_body.append(' ppOutNext = NULL;')
- hf_body.append('')
- hf_body.append(' switch (pInNow->sType)')
- hf_body.append(' {')
- hf_body.append(' case XGL_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO:')
- hf_body.append(' {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_CMD_BUFFER_GRAPHICS_BEGIN_INFO), pInNow);')
- hf_body.append(' ppOutNext = (XGL_CMD_BUFFER_BEGIN_INFO**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' default:')
- hf_body.append(' assert(!"Encountered an unexpected type in cmdbuffer_begin_info list");')
- hf_body.append(' }')
- hf_body.append(' pInNow = (XGL_CMD_BUFFER_BEGIN_INFO*)pInNow->pNext;')
- hf_body.append(' }')
- hf_body.append(' return;')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static void add_alloc_memory_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)')
- hf_body.append('{')
- hf_body.append(' const XGL_MEMORY_ALLOC_INFO* pInNow = pIn;')
- hf_body.append(' XGL_MEMORY_ALLOC_INFO** ppOutNext = (XGL_MEMORY_ALLOC_INFO**)ppOut;')
- hf_body.append(' while (pInNow != NULL)')
- hf_body.append(' {')
- hf_body.append(' XGL_MEMORY_ALLOC_INFO** ppOutNow = ppOutNext;')
- hf_body.append(' ppOutNext = NULL;')
- hf_body.append('')
- hf_body.append(' switch (pInNow->sType)')
- hf_body.append(' {')
- hf_body.append(' case XGL_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO:')
- hf_body.append(' {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_MEMORY_ALLOC_BUFFER_INFO), pInNow);')
- hf_body.append(' ppOutNext = (XGL_MEMORY_ALLOC_INFO**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' case XGL_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO:')
- hf_body.append(' {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_MEMORY_ALLOC_IMAGE_INFO), pInNow);')
- hf_body.append(' ppOutNext = (XGL_MEMORY_ALLOC_INFO**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' default:')
- hf_body.append(' assert(!"Encountered an unexpected type in memory_alloc_info list");')
- hf_body.append(' }')
- hf_body.append(' pInNow = (XGL_MEMORY_ALLOC_INFO*)pInNow->pNext;')
- hf_body.append(' }')
- hf_body.append(' return;')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static size_t calculate_memory_barrier_size(uint32_t mbCount, const void** ppMemBarriers)')
- hf_body.append('{')
- hf_body.append(' uint32_t i, siz=0;')
- hf_body.append(' for (i = 0; i < mbCount; i++) {')
- hf_body.append(' XGL_MEMORY_BARRIER *pNext = (XGL_MEMORY_BARRIER *) ppMemBarriers[i];')
- hf_body.append(' switch (pNext->sType) {')
- hf_body.append(' case XGL_STRUCTURE_TYPE_MEMORY_BARRIER:')
- hf_body.append(' siz += sizeof(XGL_MEMORY_BARRIER);')
- hf_body.append(' break;')
- hf_body.append(' case XGL_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER:')
- hf_body.append(' siz += sizeof(XGL_BUFFER_MEMORY_BARRIER);')
- hf_body.append(' break;')
- hf_body.append(' case XGL_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER:')
- hf_body.append(' siz += sizeof(XGL_IMAGE_MEMORY_BARRIER);')
- hf_body.append(' break;')
- hf_body.append(' default:')
- hf_body.append(' assert(0);')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' }')
- hf_body.append(' return siz;')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static void add_pipeline_shader_to_trace_packet(glv_trace_packet_header* pHeader, XGL_PIPELINE_SHADER* packetShader, const XGL_PIPELINE_SHADER* paramShader)')
- hf_body.append('{')
- hf_body.append(' uint32_t i;')
- hf_body.append(' // constant buffers')
- hf_body.append(' if (paramShader->linkConstBufferCount > 0 && paramShader->pLinkConstBufferInfo != NULL)')
- hf_body.append(' {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(packetShader->pLinkConstBufferInfo), sizeof(XGL_LINK_CONST_BUFFER) * paramShader->linkConstBufferCount, paramShader->pLinkConstBufferInfo);')
- hf_body.append(' for (i = 0; i < paramShader->linkConstBufferCount; i++)')
- hf_body.append(' {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(packetShader->pLinkConstBufferInfo[i].pBufferData), packetShader->pLinkConstBufferInfo[i].bufferSize, paramShader->pLinkConstBufferInfo[i].pBufferData);')
- hf_body.append(' }')
- hf_body.append(' }')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static void finalize_pipeline_shader_address(glv_trace_packet_header* pHeader, const XGL_PIPELINE_SHADER* packetShader)')
- hf_body.append('{')
- hf_body.append(' uint32_t i;')
- hf_body.append(' // constant buffers')
- hf_body.append(' if (packetShader->linkConstBufferCount > 0 && packetShader->pLinkConstBufferInfo != NULL)')
- hf_body.append(' {')
- hf_body.append(' for (i = 0; i < packetShader->linkConstBufferCount; i++)')
- hf_body.append(' {')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(packetShader->pLinkConstBufferInfo[i].pBufferData));')
- hf_body.append(' }')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(packetShader->pLinkConstBufferInfo));')
- hf_body.append(' }')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static void add_create_ds_layout_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)')
- hf_body.append('{')
- hf_body.append(' const XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pInNow = pIn;')
- hf_body.append(' XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO** ppOutNext = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO**)ppOut;')
- hf_body.append(' while (pInNow != NULL)')
- hf_body.append(' {')
- hf_body.append(' XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO** ppOutNow = ppOutNext;')
- hf_body.append(' ppOutNext = NULL;')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO), pInNow);')
- hf_body.append(' ppOutNext = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' pInNow = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO*)pInNow->pNext;')
- hf_body.append(' }')
- hf_body.append(' return;')
- hf_body.append('}')
- hf_body.append('')
- hf_body.append('static void add_update_descriptors_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)')
- hf_body.append('{')
- hf_body.append(' const XGL_UPDATE_SAMPLERS* pInNow = pIn;')
- hf_body.append(' XGL_UPDATE_SAMPLERS** ppOutNext = (XGL_UPDATE_SAMPLERS**)ppOut;')
- hf_body.append(' while (pInNow != NULL)')
- hf_body.append(' {')
- hf_body.append(' XGL_UPDATE_SAMPLERS** ppOutNow = ppOutNext;')
- hf_body.append(' ppOutNext = NULL;')
- hf_body.append(' switch (pInNow->sType)')
- hf_body.append(' {')
- hf_body.append(' case XGL_STRUCTURE_TYPE_UPDATE_SAMPLERS:')
- hf_body.append(' {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_UPDATE_SAMPLERS), pInNow);')
- hf_body.append(' XGL_UPDATE_SAMPLERS* pPacket = (XGL_UPDATE_SAMPLERS*)*ppOutNow;')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pSamplers, ((XGL_UPDATE_SAMPLERS*)pInNow)->count * sizeof(XGL_SAMPLER), ((XGL_UPDATE_SAMPLERS*)pInNow)->pSamplers);')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pSamplers));')
- hf_body.append(' ppOutNext = (XGL_UPDATE_SAMPLERS**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' case XGL_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES:')
- hf_body.append(' {')
- #hf_body.append(' totalUpdateSize += sizeof(XGL_UPDATE_SAMPLER_TEXTURES) + ((XGL_UPDATE_SAMPLER_TEXTURES*)pNext)->count * (sizeof(XGL_SAMPLER_IMAGE_VIEW_INFO) + sizeof(XGL_IMAGE_VIEW_ATTACH_INFO));')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_UPDATE_SAMPLER_TEXTURES), pInNow);')
- hf_body.append(' XGL_UPDATE_SAMPLER_TEXTURES* pPacket = (XGL_UPDATE_SAMPLER_TEXTURES*)*ppOutNow;')
- hf_body.append(' 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?
- hf_body.append(' uint32_t i;')
- hf_body.append(' for (i = 0; i < ((XGL_UPDATE_SAMPLER_TEXTURES*)pInNow)->count; i++) {')
- hf_body.append(' 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);')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pSamplerImageViews[i].pImageView));')
- hf_body.append(' }')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pSamplerImageViews));')
- hf_body.append(' ppOutNext = (XGL_UPDATE_SAMPLERS**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' case XGL_STRUCTURE_TYPE_UPDATE_IMAGES:')
- hf_body.append(' {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_UPDATE_IMAGES), pInNow);')
- hf_body.append(' XGL_UPDATE_IMAGES* pPacket = (XGL_UPDATE_IMAGES*)*ppOutNow;')
- hf_body.append(' uint32_t i;')
- hf_body.append(' 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);')
- hf_body.append(' for (i = 0; i < ((XGL_UPDATE_IMAGES*)pInNow)->count; i++) {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pImageViews[i], sizeof(XGL_IMAGE_VIEW_ATTACH_INFO), ((XGL_UPDATE_IMAGES*)pInNow)->pImageViews[i]);')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pImageViews[i]));')
- hf_body.append(' }')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pImageViews));')
- hf_body.append(' ppOutNext = (XGL_UPDATE_SAMPLERS**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' case XGL_STRUCTURE_TYPE_UPDATE_BUFFERS:')
- hf_body.append(' {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_UPDATE_BUFFERS), pInNow);')
- hf_body.append(' XGL_UPDATE_BUFFERS* pPacket = (XGL_UPDATE_BUFFERS*)*ppOutNow;')
- hf_body.append(' 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);')
- hf_body.append(' uint32_t i;')
- hf_body.append(' for (i = 0; i < ((XGL_UPDATE_BUFFERS*)pInNow)->count; i++) {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pBufferViews[i], sizeof(XGL_BUFFER_VIEW_ATTACH_INFO), ((XGL_UPDATE_BUFFERS*)pInNow)->pBufferViews[i]);')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pBufferViews[i]));')
- hf_body.append(' }')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pBufferViews));')
- hf_body.append(' ppOutNext = (XGL_UPDATE_SAMPLERS**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' case XGL_STRUCTURE_TYPE_UPDATE_AS_COPY:')
- hf_body.append(' {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_UPDATE_AS_COPY), pInNow);')
- hf_body.append(' ppOutNext = (XGL_UPDATE_SAMPLERS**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' default:')
- hf_body.append(' assert(0);')
- hf_body.append(' }')
- hf_body.append(' pInNow = (XGL_UPDATE_SAMPLERS*)pInNow->pNext;')
- hf_body.append(' }')
- hf_body.append(' return;')
- hf_body.append('}')
- hf_body.append('')
- pipe_state_list = ['IA_STATE_CREATE_INFO',
- 'TESS_STATE_CREATE_INFO',
- 'RS_STATE_CREATE_INFO',
- 'DS_STATE_CREATE_INFO',
- 'VP_STATE_CREATE_INFO',
- 'MS_STATE_CREATE_INFO'
- ]
- hf_body.append('static void add_pipeline_state_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)')
- hf_body.append('{')
- hf_body.append(' const XGL_GRAPHICS_PIPELINE_CREATE_INFO* pInNow = pIn;')
- hf_body.append(' XGL_GRAPHICS_PIPELINE_CREATE_INFO** ppOutNext = (XGL_GRAPHICS_PIPELINE_CREATE_INFO**)ppOut;')
- hf_body.append(' while (pInNow != NULL)')
- hf_body.append(' {')
- hf_body.append(' XGL_GRAPHICS_PIPELINE_CREATE_INFO** ppOutNow = ppOutNext;')
- hf_body.append(' ppOutNext = NULL;')
- hf_body.append('')
- hf_body.append(' switch (pInNow->sType)')
- hf_body.append(' {')
- for pipe_state in pipe_state_list:
- hf_body.append(' case XGL_STRUCTURE_TYPE_PIPELINE_%s:' % pipe_state)
- hf_body.append(' {')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_PIPELINE_%s), pInNow);' % pipe_state)
- hf_body.append(' ppOutNext = (XGL_GRAPHICS_PIPELINE_CREATE_INFO**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' case XGL_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO:')
- hf_body.append(' {')
- hf_body.append(' XGL_PIPELINE_CB_STATE_CREATE_INFO *pPacket = NULL;')
- hf_body.append(' XGL_PIPELINE_CB_STATE_CREATE_INFO *pIn = NULL;')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_PIPELINE_CB_STATE_CREATE_INFO), pInNow);')
- hf_body.append(' pPacket = (XGL_PIPELINE_CB_STATE_CREATE_INFO*) *ppOutNow;')
- hf_body.append(' pIn = (XGL_PIPELINE_CB_STATE_CREATE_INFO*) pInNow;')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pAttachments, pIn->attachmentCount * sizeof(XGL_PIPELINE_CB_ATTACHMENT_STATE), pIn->pAttachments);')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pAttachments));')
- hf_body.append(' ppOutNext = (XGL_GRAPHICS_PIPELINE_CREATE_INFO**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' case XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO:')
- hf_body.append(' {')
- hf_body.append(' XGL_PIPELINE_SHADER_STAGE_CREATE_INFO* pPacket = NULL;')
- hf_body.append(' XGL_PIPELINE_SHADER_STAGE_CREATE_INFO* pInPacket = NULL;')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_PIPELINE_SHADER_STAGE_CREATE_INFO), pInNow);')
- hf_body.append(' pPacket = (XGL_PIPELINE_SHADER_STAGE_CREATE_INFO*) *ppOutNow;')
- hf_body.append(' pInPacket = (XGL_PIPELINE_SHADER_STAGE_CREATE_INFO*) pInNow;')
- hf_body.append(' add_pipeline_shader_to_trace_packet(pHeader, &pPacket->shader, &pInPacket->shader);')
- hf_body.append(' finalize_pipeline_shader_address(pHeader, &pPacket->shader);')
- hf_body.append(' ppOutNext = (XGL_GRAPHICS_PIPELINE_CREATE_INFO**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' case XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO:')
- hf_body.append(' {')
- hf_body.append(' XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO *pPacket = NULL;')
- hf_body.append(' XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO *pIn = NULL;')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)(ppOutNow), sizeof(XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO), pInNow);')
- hf_body.append(' pPacket = (XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO*) *ppOutNow;')
- hf_body.append(' pIn = (XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO*) pInNow;')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pVertexBindingDescriptions, pIn->bindingCount * sizeof(XGL_VERTEX_INPUT_BINDING_DESCRIPTION), pIn->pVertexBindingDescriptions);')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pVertexBindingDescriptions));')
- hf_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void **) &pPacket->pVertexAttributeDescriptions, pIn->attributeCount * sizeof(XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION), pIn->pVertexAttributeDescriptions);')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)&(pPacket->pVertexAttributeDescriptions));')
- hf_body.append(' ppOutNext = (XGL_GRAPHICS_PIPELINE_CREATE_INFO**)&(*ppOutNow)->pNext;')
- hf_body.append(' glv_finalize_buffer_address(pHeader, (void**)(ppOutNow));')
- hf_body.append(' break;')
- hf_body.append(' }')
- hf_body.append(' default:')
- hf_body.append(' assert(!"Encountered an unexpected type in pipeline state list");')
- hf_body.append(' }')
- hf_body.append(' pInNow = (XGL_GRAPHICS_PIPELINE_CREATE_INFO*)pInNow->pNext;')
- hf_body.append(' }')
- hf_body.append(' return;')
- hf_body.append('}')
- return "\n".join(hf_body)
-
def _generate_packet_id_enum(self):
pid_enum = []
pid_enum.append('enum GLV_TRACE_PACKET_ID_XGL')
@@ -2257,7 +1670,8 @@
def generate_body(self):
body = [self._generate_trace_func_ptrs(),
- self._generate_trace_func_protos()]
+ self._generate_trace_func_protos(),
+ self._generate_trace_real_func_ptr_protos()]
return "\n".join(body)
@@ -2266,6 +1680,7 @@
header_txt = []
header_txt.append('#include "glv_platform.h"')
header_txt.append('#include "glv_common.h"')
+ header_txt.append('#include "glvtrace_xgl_helpers.h"')
header_txt.append('#include "glvtrace_xgl_xgl.h"')
header_txt.append('#include "glvtrace_xgl_xgldbg.h"')
header_txt.append('#include "glvtrace_xgl_xglwsix11ext.h"')
@@ -2284,7 +1699,6 @@
self._generate_attach_hooks(),
self._generate_detach_hooks(),
self._generate_init_funcs(),
- self._generate_helper_funcs(),
self._generate_trace_funcs()]
return "\n".join(body)