glave: Actually add the memory barrier list of structures to trace file
Was just adding a pointer to these structures.
diff --git a/glave-generate.py b/glave-generate.py
index 49a79ad..a80c05c 100755
--- a/glave-generate.py
+++ b/glave-generate.py
@@ -498,7 +498,7 @@
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 @@
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 @@
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;')