diff options
| author | Jon Ashburn <jon@lunarg.com> | 2015-02-10 10:36:22 -0700 |
|---|---|---|
| committer | Jon Ashburn <jon@lunarg.com> | 2015-02-11 15:30:18 -0700 |
| commit | e173be589c44f3adf3085e43236e1b3d6dfdd6c4 (patch) | |
| tree | 81bc5afb215ac1d46864184d3dcf61fbf4468594 | |
| parent | 2a0db9f79811c2038c5ec0bd4dc23e54f1864f63 (diff) | |
| download | usermoji-e173be589c44f3adf3085e43236e1b3d6dfdd6c4.tar.xz | |
glave: Remap buf/image obj for MEMORY_BARRIER for cmdWaitEvents,cmdPipeBarrier
| -rwxr-xr-x | glave-generate.py | 86 |
1 files 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'] |
