glave: Fix bugs with UpdateDescriptors pUpdateChain on replay
authorTobin Ehlis <tobin@lunarg.com>
Wed, 4 Feb 2015 21:57:24 +0000 (14:57 -0700)
committerCourtney Goeltzenleuchter <courtney@LunarG.com>
Thu, 5 Feb 2015 00:58:12 +0000 (17:58 -0700)
glave-generate.py

index 7b9e76e..80419f2 100755 (executable)
@@ -2623,6 +2623,7 @@ class Subcommand(object):
         #   and remap all of the handles inside of the update structs
         ud_body.append('            XGL_UPDATE_SAMPLERS* pUpdateChain = (XGL_UPDATE_SAMPLERS*)pPacket->pUpdateChain;')
         ud_body.append('            void* pLocalUpdateChain = NULL;')
+        ud_body.append('            XGL_UPDATE_SAMPLERS* pPrev = NULL;')
         ud_body.append('            void* pLocalUpdateChainHEAD = NULL;')
         ud_body.append('            size_t blockSize = 0;')
         ud_body.append('            while (pUpdateChain) {')
@@ -2633,8 +2634,8 @@ class Subcommand(object):
         ud_body.append('                        pLocalUpdateChain = (void*)malloc(blockSize);')
         ud_body.append('                        memcpy(pLocalUpdateChain, pUpdateChain, blockSize);')
         ud_body.append('                        for (uint32_t i = 0; i < ((XGL_UPDATE_SAMPLERS*)pLocalUpdateChain)->count; i++) {')
-        ud_body.append('                            XGL_SAMPLER localSampler = remap(((XGL_UPDATE_SAMPLERS*)pUpdateChain)->pSamplers[i]);')
-        ud_body.append('                            memcpy((void*)&((XGL_UPDATE_SAMPLERS*)pLocalUpdateChain)->pSamplers[i], &localSampler, sizeof(XGL_SAMPLER));')
+        ud_body.append('                            XGL_SAMPLER* pLocalSampler = (XGL_SAMPLER*) &((XGL_UPDATE_SAMPLERS*)pLocalUpdateChain)->pSamplers[i];')
+        ud_body.append('                            *pLocalSampler = remap(((XGL_UPDATE_SAMPLERS*)pUpdateChain)->pSamplers[i]);')
         ud_body.append('                        }')
         ud_body.append('                        break;')
         ud_body.append('                    case XGL_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES:')
@@ -2655,8 +2656,8 @@ class Subcommand(object):
         ud_body.append('                        pLocalUpdateChain = malloc(blockSize);')
         ud_body.append('                        memcpy(pLocalUpdateChain, pUpdateChain, blockSize);')
         ud_body.append('                        for (uint32_t i = 0; i < ((XGL_UPDATE_IMAGES*)pLocalUpdateChain)->count; i++) {')
-        ud_body.append('                            XGL_IMAGE_VIEW localView = remap(((XGL_UPDATE_IMAGES*)pUpdateChain)->pImageViews[i]->view);')
-        ud_body.append('                            memcpy((void*)&((XGL_UPDATE_IMAGES*)pLocalUpdateChain)->pImageViews[i]->view, &localView, sizeof(XGL_IMAGE_VIEW));')
+        ud_body.append('                            XGL_IMAGE_VIEW* pLocalView = (XGL_IMAGE_VIEW*) &((XGL_UPDATE_IMAGES*)pUpdateChain)->pImageViews[i]->view;')
+        ud_body.append('                            *pLocalView = remap(((XGL_UPDATE_IMAGES*)pUpdateChain)->pImageViews[i]->view);')
         ud_body.append('                        }')
         ud_body.append('                        break;')
         ud_body.append('                    case XGL_STRUCTURE_TYPE_UPDATE_BUFFERS:')
@@ -2664,8 +2665,8 @@ class Subcommand(object):
         ud_body.append('                        pLocalUpdateChain = malloc(blockSize);')
         ud_body.append('                        memcpy(pLocalUpdateChain, pUpdateChain, blockSize);')
         ud_body.append('                        for (uint32_t i = 0; i < ((XGL_UPDATE_BUFFERS*)pLocalUpdateChain)->count; i++) {')
-        ud_body.append('                            XGL_BUFFER_VIEW localView = remap(((XGL_UPDATE_BUFFERS*)pUpdateChain)->pBufferViews[i]->view);')
-        ud_body.append('                            memcpy((void*)&((XGL_UPDATE_BUFFERS*)pLocalUpdateChain)->pBufferViews[i]->view, &localView, sizeof(XGL_BUFFER_VIEW));')
+        ud_body.append('                            XGL_BUFFER_VIEW* pLocalView = (XGL_BUFFER_VIEW*) &((XGL_UPDATE_BUFFERS*)pUpdateChain)->pBufferViews[i]->view;')
+        ud_body.append('                            *pLocalView = remap(((XGL_UPDATE_BUFFERS*)pUpdateChain)->pBufferViews[i]->view);')
         ud_body.append('                        }')
         ud_body.append('                        break;')
         ud_body.append('                    case XGL_STRUCTURE_TYPE_UPDATE_AS_COPY:')
@@ -2681,8 +2682,11 @@ class Subcommand(object):
         ud_body.append('                if (NULL == pLocalUpdateChainHEAD) {')
         ud_body.append('                    pLocalUpdateChainHEAD = pLocalUpdateChain;')
         ud_body.append('                }')
+        ud_body.append('                if (pPrev) {')
+        ud_body.append('                    pPrev->pNext = pLocalUpdateChain;')
+        ud_body.append('                }')
+        ud_body.append('                pPrev = (XGL_UPDATE_SAMPLERS*)pLocalUpdateChain;')
         ud_body.append('                pUpdateChain = (XGL_UPDATE_SAMPLERS*)pUpdateChain->pNext;')
-        ud_body.append('                pLocalUpdateChain = (void*)((XGL_UPDATE_SAMPLERS*)pLocalUpdateChain)->pNext;')
         ud_body.append('            }')
         ud_body.append('            m_xglFuncs.real_xglUpdateDescriptors(remap(pPacket->descriptorSet), pLocalUpdateChainHEAD);')
         ud_body.append('            pLocalUpdateChain = (XGL_UPDATE_SAMPLERS*)pLocalUpdateChainHEAD;')