From 1b6967d9159cd07a8a409b2ca7d242bb7a9dc8bd Mon Sep 17 00:00:00 2001 From: Jon Ashburn Date: Tue, 10 Feb 2015 13:49:30 -0700 Subject: glave: Actually add the memory barrier list of structures to trace file Was just adding a pointer to these structures. --- glave-generate.py | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/glave-generate.py b/glave-generate.py index 49a79adf..a80c05c9 100755 --- a/glave-generate.py +++ b/glave-generate.py @@ -498,7 +498,7 @@ class Subcommand(object): 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 * 2 * sizeof(void*));' % event_array_type) + 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 ', ''))) else: #'CreateComputePipeline' func_body.append(' customSize = calculate_pipeline_state_size(pCreateInfo->pNext);') @@ -608,9 +608,25 @@ class Subcommand(object): 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;') + func_body.append(' uint32_t i, siz;') func_body.append(' for (i = 0; i < mbCount; i++) {') - func_body.append(' glv_add_buffer_to_trace_packet(pHeader, (void**)&(pPacket->%s->ppMemBarriers[i]), sizeof(void*), %s->ppMemBarriers[i]);' % (proto.params[-1].name, proto.params[-1].name)) + 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)) @@ -949,6 +965,28 @@ class Subcommand(object): hf_body.append(' return siz;') 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('static size_t calculate_pipeline_shader_size(const XGL_PIPELINE_SHADER* shader)') hf_body.append('{') hf_body.append(' size_t size = 0;') -- cgit v1.2.3