From e173be589c44f3adf3085e43236e1b3d6dfdd6c4 Mon Sep 17 00:00:00 2001 From: Jon Ashburn Date: Tue, 10 Feb 2015 10:36:22 -0700 Subject: glave: Remap buf/image obj for MEMORY_BARRIER for cmdWaitEvents,cmdPipeBarrier --- glave-generate.py | 86 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 74 insertions(+), 12 deletions(-) diff --git a/glave-generate.py b/glave-generate.py index ea0e40d5..49a79adf 100755 --- a/glave-generate.py +++ b/glave-generate.py @@ -1868,10 +1868,6 @@ class Subcommand(object): rc_body.append(' XGL_SHADER *addr;') rc_body.append(' XGL_SHADER val;') rc_body.append(' };') - rc_body.append(' struct eventPair {') - rc_body.append(' XGL_EVENT *addr;') - rc_body.append(' XGL_EVENT val;') - rc_body.append(' };') rc_body.append(' struct validationMsg {') rc_body.append(' XGL_VALIDATION_LEVEL validationLevel;') rc_body.append(' XGL_BASE_OBJECT srcObject;') @@ -2794,20 +2790,85 @@ class Subcommand(object): def _gen_replay_cmd_wait_events(self): cwe_body = [] - cwe_body.append(' struct eventPair saveEvent[100];') - cwe_body.append(' uint32_t idx = 0;') + cwe_body.append(' XGL_EVENT saveEvent[100];') + cwe_body.append(' uint32_t idx, numRemapBuf=0, numRemapImg=0;') cwe_body.append(' assert(pPacket->pWaitInfo && pPacket->pWaitInfo->eventCount <= 100);') cwe_body.append(' for (idx = 0; idx < pPacket->pWaitInfo->eventCount; idx++)') cwe_body.append(' {') - cwe_body.append(' saveEvent[idx].val = pPacket->pWaitInfo->pEvents[idx];') - cwe_body.append(' saveEvent[idx].addr = (XGL_EVENT*)&pPacket->pWaitInfo->pEvents[idx];') - cwe_body.append(' *(saveEvent[idx].addr) = remap(pPacket->pWaitInfo->pEvents[idx]);') + cwe_body.append(' XGL_EVENT *pEvent = (XGL_EVENT *) &(pPacket->pWaitInfo->pEvents[idx]);') + cwe_body.append(' saveEvent[idx] = pPacket->pWaitInfo->pEvents[idx];') + cwe_body.append(' *pEvent = remap(pPacket->pWaitInfo->pEvents[idx]);') + cwe_body.append(' }') + cwe_body.append('') + cwe_body.append(' XGL_BUFFER saveBuf[100];') + cwe_body.append(' XGL_IMAGE saveImg[100];') + cwe_body.append(' for (idx = 0; idx < pPacket->pWaitInfo->memBarrierCount; idx++)') + cwe_body.append(' {') + cwe_body.append(' XGL_MEMORY_BARRIER *pNext = (XGL_MEMORY_BARRIER *) pPacket->pWaitInfo->ppMemBarriers[idx];') + cwe_body.append(' assert(pNext);') + cwe_body.append(' if (pNext->sType == XGL_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER) {') + cwe_body.append(' XGL_BUFFER_MEMORY_BARRIER *pNextBuf = (XGL_BUFFER_MEMORY_BARRIER *) pPacket->pWaitInfo->ppMemBarriers[idx];') + cwe_body.append(' assert(numRemapBuf < 100);') + cwe_body.append(' saveBuf[numRemapBuf++] = pNextBuf->buffer;') + cwe_body.append(' pNextBuf->buffer = remap(pNextBuf->buffer);') + cwe_body.append(' } else if (pNext->sType == XGL_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) {') + cwe_body.append(' XGL_IMAGE_MEMORY_BARRIER *pNextImg = (XGL_IMAGE_MEMORY_BARRIER *) pPacket->pWaitInfo->ppMemBarriers[idx];') + cwe_body.append(' assert(numRemapImg < 100);') + cwe_body.append(' saveImg[numRemapImg++] = pNextImg->image;') + cwe_body.append(' pNextImg->image = remap(pNextImg->image);') + cwe_body.append(' }') cwe_body.append(' }') cwe_body.append(' m_xglFuncs.real_xglCmdWaitEvents(remap(pPacket->cmdBuffer), pPacket->pWaitInfo);') - cwe_body.append(' for (uint32_t i = 0; i < idx; i++)') - cwe_body.append(' *(saveEvent[i].addr) = saveEvent[i].val;') + cwe_body.append(' for (idx = 0; idx < pPacket->pWaitInfo->memBarrierCount; idx++) {') + cwe_body.append(' XGL_MEMORY_BARRIER *pNext = (XGL_MEMORY_BARRIER *) pPacket->pWaitInfo->ppMemBarriers[idx];') + cwe_body.append(' if (pNext->sType == XGL_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER) {') + cwe_body.append(' XGL_BUFFER_MEMORY_BARRIER *pNextBuf = (XGL_BUFFER_MEMORY_BARRIER *) pPacket->pWaitInfo->ppMemBarriers[idx];') + cwe_body.append(' pNextBuf->buffer = saveBuf[idx];') + cwe_body.append(' } else if (pNext->sType == XGL_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) {') + cwe_body.append(' XGL_IMAGE_MEMORY_BARRIER *pNextImg = (XGL_IMAGE_MEMORY_BARRIER *) pPacket->pWaitInfo->ppMemBarriers[idx];') + cwe_body.append(' pNextImg->image = saveImg[idx];') + cwe_body.append(' }') + cwe_body.append(' }') + cwe_body.append(' for (idx = 0; idx < pPacket->pWaitInfo->eventCount; idx++) {') + cwe_body.append(' XGL_EVENT *pEvent = (XGL_EVENT *) &(pPacket->pWaitInfo->pEvents[idx]);') + cwe_body.append(' *pEvent = saveEvent[idx];') + cwe_body.append(' }') return "\n".join(cwe_body) + def _gen_replay_cmd_pipeline_barrier(self): + cpb_body = [] + cpb_body.append(' uint32_t idx, numRemapBuf=0, numRemapImg=0;') + cpb_body.append(' XGL_BUFFER saveBuf[100];') + cpb_body.append(' XGL_IMAGE saveImg[100];') + cpb_body.append(' for (idx = 0; idx < pPacket->pBarrier->memBarrierCount; idx++)') + cpb_body.append(' {') + cpb_body.append(' XGL_MEMORY_BARRIER *pNext = (XGL_MEMORY_BARRIER *) pPacket->pBarrier->ppMemBarriers[idx];') + cpb_body.append(' assert(pNext);') + cpb_body.append(' if (pNext->sType == XGL_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER) {') + cpb_body.append(' XGL_BUFFER_MEMORY_BARRIER *pNextBuf = (XGL_BUFFER_MEMORY_BARRIER *) pPacket->pBarrier->ppMemBarriers[idx];') + cpb_body.append(' assert(numRemapBuf < 100);') + cpb_body.append(' saveBuf[numRemapBuf++] = pNextBuf->buffer;') + cpb_body.append(' pNextBuf->buffer = remap(pNextBuf->buffer);') + cpb_body.append(' } else if (pNext->sType == XGL_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) {') + cpb_body.append(' XGL_IMAGE_MEMORY_BARRIER *pNextImg = (XGL_IMAGE_MEMORY_BARRIER *) pPacket->pBarrier->ppMemBarriers[idx];') + cpb_body.append(' assert(numRemapImg < 100);') + cpb_body.append(' saveImg[numRemapImg++] = pNextImg->image;') + cpb_body.append(' pNextImg->image = remap(pNextImg->image);') + cpb_body.append(' }') + cpb_body.append(' }') + cpb_body.append(' m_xglFuncs.real_xglCmdPipelineBarrier(remap(pPacket->cmdBuffer), pPacket->pBarrier);') + cpb_body.append(' for (idx = 0; idx < pPacket->pBarrier->memBarrierCount; idx++) {') + cpb_body.append(' XGL_MEMORY_BARRIER *pNext = (XGL_MEMORY_BARRIER *) pPacket->pBarrier->ppMemBarriers[idx];') + cpb_body.append(' if (pNext->sType == XGL_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER) {') + cpb_body.append(' XGL_BUFFER_MEMORY_BARRIER *pNextBuf = (XGL_BUFFER_MEMORY_BARRIER *) pPacket->pBarrier->ppMemBarriers[idx];') + cpb_body.append(' pNextBuf->buffer = saveBuf[idx];') + cpb_body.append(' } else if (pNext->sType == XGL_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) {') + cpb_body.append(' XGL_IMAGE_MEMORY_BARRIER *pNextImg = (XGL_IMAGE_MEMORY_BARRIER *) pPacket->pBarrier->ppMemBarriers[idx];') + cpb_body.append(' pNextImg->image = saveImg[idx];') + cpb_body.append(' }') + cpb_body.append(' }') + return "\n".join(cpb_body) + def _gen_replay_create_framebuffer(self): cf_body = [] cf_body.append(' XGL_FRAMEBUFFER_CREATE_INFO *pInfo = (XGL_FRAMEBUFFER_CREATE_INFO *) pPacket->pCreateInfo;') @@ -3065,7 +3126,8 @@ class Subcommand(object): 'CmdBindDynamicMemoryView': self._gen_replay_bind_dynamic_memory_view, 'UpdateDescriptors': self._gen_replay_update_descriptors, 'CreateDescriptorSetLayout': self._gen_replay_create_descriptor_set_layout, - 'CmdWaitEvents': self._gen_replay_cmd_wait_events} + 'CmdWaitEvents': self._gen_replay_cmd_wait_events, + 'CmdPipelineBarrier': self._gen_replay_cmd_pipeline_barrier} # TODO : Need to guard CreateInstance with "if (!m_display->m_initedXGL)" check # Despite returning a value, don't check these funcs b/c custom code includes check already custom_check_ret_val = ['EnumerateGpus', 'GetGpuInfo', 'CreateDevice', 'GetExtensionSupport'] -- cgit v1.2.3