glave: codegen - remove manually written WsiX11 replay funcs.
authorPeter Lohrmann <peterl@valvesoftware.com>
Thu, 2 Apr 2015 17:06:19 +0000 (10:06 -0700)
committerPeter Lohrmann <peterl@valvesoftware.com>
Thu, 2 Apr 2015 17:06:19 +0000 (10:06 -0700)
* The code to replay these entrypoints is now in the non-codegen'd glvreplay_xgl_xglreplay.cpp

tools/glave/scripts/vk_generate.py
tools/glave/src/glv_extensions/glvreplay_xgl/codegen/glvreplay_xgl_replay.h
tools/glave/src/glv_extensions/glvreplay_xgl/codegen/glvreplay_xgl_replay_gen.cpp
tools/glave/src/glv_extensions/glvreplay_xgl/glvreplay_xgl_xglreplay.cpp

index 1d59dfd..6f2f15a 100755 (executable)
@@ -1806,6 +1806,10 @@ class Subcommand(object):
         rc_body.append('    glv_replay::GLV_REPLAY_RESULT manually_handle_xglFreeMemory(struct_xglFreeMemory* pPacket);')
         rc_body.append('    glv_replay::GLV_REPLAY_RESULT manually_handle_xglMapMemory(struct_xglMapMemory* pPacket);')
         rc_body.append('    glv_replay::GLV_REPLAY_RESULT manually_handle_xglUnmapMemory(struct_xglUnmapMemory* pPacket);')
+        rc_body.append('    glv_replay::GLV_REPLAY_RESULT manually_handle_xglWsiX11AssociateConnection(struct_xglWsiX11AssociateConnection* pPacket);')
+        rc_body.append('    glv_replay::GLV_REPLAY_RESULT manually_handle_xglWsiX11GetMSC(struct_xglWsiX11GetMSC* pPacket);')
+        rc_body.append('    glv_replay::GLV_REPLAY_RESULT manually_handle_xglWsiX11CreatePresentableImage(struct_xglWsiX11CreatePresentableImage* pPacket);')
+        rc_body.append('    glv_replay::GLV_REPLAY_RESULT manually_handle_xglWsiX11QueuePresent(struct_xglWsiX11QueuePresent* pPacket);')
         rc_body.append(self._map_decl('XGL_GPU_MEMORY', 'XGLAllocInfo', 'm_mapData'))
         # Custom code for 1-off memory mapping functions
         rc_body.append('    void add_entry_to_mapData(XGL_GPU_MEMORY handle, XGL_GPU_SIZE size)')
@@ -2050,81 +2054,22 @@ class Subcommand(object):
 
     def _gen_replay_wsi_associate_connection(self):
         wac_body = []
-        wac_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
-        wac_body.append('            //associate with the replayers Wsi connection rather than tracers')
-        wac_body.append('            replayResult = m_xglFuncs.real_xglWsiX11AssociateConnection(remap(pPacket->gpu), &(m_display->m_WsiConnection));')
-        wac_body.append('#elif defined(WIN32)')
-        wac_body.append('            //TBD')
-        wac_body.append('            replayResult = XGL_SUCCESS;')
-        wac_body.append('#endif')
+        wac_body.append('            returnValue = manually_handle_xglWsiX11AssociateConnection(pPacket);')
         return "\n".join(wac_body)
 
     def _gen_replay_wsi_get_msc(self):
         wgm_body = []
-        wgm_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
-        wgm_body.append('            xcb_window_t window = m_display->m_XcbWindow;')
-        wgm_body.append('            replayResult = m_xglFuncs.real_xglWsiX11GetMSC(remap(pPacket->device), window, pPacket->crtc, pPacket->pMsc);')
-        wgm_body.append('#elif defined(WIN32)')
-        wgm_body.append('            //TBD')
-        wgm_body.append('            replayResult = XGL_SUCCESS;')
-        wgm_body.append('#else')
-        
-        wgm_body.append('#endif')
+        wgm_body.append('            returnValue = manually_handle_xglWsiX11GetMSC(pPacket);')
         return "\n".join(wgm_body)
 
     def _gen_replay_wsi_create_presentable_image(self):
         cpi_body = []
-        cpi_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
-        cpi_body.append('            XGL_IMAGE img;')
-        cpi_body.append('            XGL_GPU_MEMORY mem;')
-        cpi_body.append('            m_display->imageHeight.push_back(pPacket->pCreateInfo->extent.height);')
-        cpi_body.append('            m_display->imageWidth.push_back(pPacket->pCreateInfo->extent.width);')
-        cpi_body.append('            replayResult = m_xglFuncs.real_xglWsiX11CreatePresentableImage(remap(pPacket->device), pPacket->pCreateInfo, &img, &mem);')
-        cpi_body.append('            if (replayResult == XGL_SUCCESS)')
-        cpi_body.append('            {')
-        cpi_body.append('                if (pPacket->pImage != NULL)')
-        cpi_body.append('                    add_to_map(pPacket->pImage, &img);')
-        cpi_body.append('                if(pPacket->pMem != NULL)')
-        cpi_body.append('                    add_to_map(pPacket->pMem, &mem);')
-        cpi_body.append('                m_display->imageHandles.push_back(img);')
-        cpi_body.append('                m_display->imageMemory.push_back(mem);')
-        cpi_body.append('            }')
-        cpi_body.append('#elif defined(WIN32)')
-        cpi_body.append('            //TBD')
-        cpi_body.append('            replayResult = XGL_SUCCESS;')
-        cpi_body.append('#endif')
+        cpi_body.append('            returnValue = manually_handle_xglWsiX11CreatePresentableImage(pPacket);')
         return "\n".join(cpi_body)
 
     def _gen_replay_wsi_queue_present(self):
         wqp_body = []
-        wqp_body.append('#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)')
-        wqp_body.append('            XGL_WSI_X11_PRESENT_INFO pInfo;')
-        wqp_body.append('            std::vector<int>::iterator it;')
-        wqp_body.append('            memcpy(&pInfo, pPacket->pPresentInfo, sizeof(XGL_WSI_X11_PRESENT_INFO));')
-        wqp_body.append('            pInfo.srcImage = remap(pPacket->pPresentInfo->srcImage);')
-        wqp_body.append('            // use replayers Xcb window')
-        wqp_body.append('            pInfo.destWindow = m_display->m_XcbWindow;')
-        wqp_body.append('            replayResult = m_xglFuncs.real_xglWsiX11QueuePresent(remap(pPacket->queue), &pInfo, remap(pPacket->fence));')
-        wqp_body.append('            it = std::find(m_screenshotFrames.begin(), m_screenshotFrames.end(), m_display->m_frameNumber);')
-        wqp_body.append('            if (it != m_screenshotFrames.end())')
-        wqp_body.append('            {')
-        wqp_body.append('                for(unsigned int i=0; i<m_display->imageHandles.size(); i++)')
-        wqp_body.append('                {')
-        wqp_body.append('                    if (m_display->imageHandles[i] == pInfo.srcImage)')
-        wqp_body.append('                    {')
-        wqp_body.append('                        char frameName[32];')
-        wqp_body.append('                        sprintf(frameName, "%d",m_display->m_frameNumber);')
-        wqp_body.append('                        glvWritePPM(frameName, m_display->imageWidth[i], m_display->imageHeight[i],')
-        wqp_body.append('                            m_display->imageHandles[i], m_display->imageMemory[i], &m_xglFuncs);')
-        wqp_body.append('                        break;')
-        wqp_body.append('                    }')
-        wqp_body.append('                }')
-        wqp_body.append('            }')
-        wqp_body.append('#elif defined(WIN32)')
-        wqp_body.append('            //TBD')
-        wqp_body.append('            replayResult = XGL_SUCCESS;')
-        wqp_body.append('#endif')
-        wqp_body.append('            m_display->m_frameNumber++;')
+        wqp_body.append('            returnValue = manually_handle_xglWsiX11QueuePresent(pPacket);')
         return "\n".join(wqp_body)
 
     def _gen_replay_free_memory(self):
@@ -2187,7 +2132,8 @@ class Subcommand(object):
         custom_check_ret_val = ['EnumerateGpus', 'GetGpuInfo', 'CreateDevice', 'GetExtensionSupport', 'QueueSubmit', 'GetObjectInfo',
                                 'GetFormatInfo', 'GetImageSubresourceInfo', 'CreateDescriptorSetLayout', 'CreateGraphicsPipeline',
                                 'CreateFramebuffer', 'CreateRenderPass', 'BeginCommandBuffer', 'StorePipeline', 'GetMultiGpuCompatibility',
-                                'DestroyObject', 'WaitForFences', 'FreeMemory', 'MapMemory', 'UnmapMemory']
+                                'DestroyObject', 'WaitForFences', 'FreeMemory', 'MapMemory', 'UnmapMemory',
+                                'WsiX11AssociateConnection', 'WsiX11GetMSC', 'WsiX11CreatePresentableImage', 'WsiX11QueuePresent']
         # multi-gpu Open funcs w/ list of local params to create
         custom_open_params = {'OpenSharedMemory': (-1,),
                               'OpenSharedQueueSemaphore': (-1,),
@@ -2593,6 +2539,7 @@ class GlaveReplayHeader(Subcommand):
         header_txt.append('#include "glv_trace_packet_identifiers.h"\n')
         header_txt.append('extern "C" {\n')
         header_txt.append('#include "glv_vk_vk_structs.h"\n')
+        header_txt.append('#include "glv_vk_vkwsix11ext_structs.h"\n')
         header_txt.append('}\n')
         header_txt.append('#include "xgl.h"')
         header_txt.append('#include "xglDbg.h"')
@@ -2617,7 +2564,6 @@ class GlaveReplayC(Subcommand):
         header_txt = []
         header_txt.append('#include "glvreplay_xgl_replay.h"\n')
         header_txt.append('#include "glvreplay_xgl.h"\n')
-        header_txt.append('#include "glvreplay_xgl_write_ppm.h"\n')
         header_txt.append('#include "glvreplay_main.h"\n')
         header_txt.append('#include <algorithm>')
         header_txt.append('#include <queue>')
index dd0c523..4ed0643 100644 (file)
@@ -42,6 +42,8 @@ extern "C" {
 
 #include "glv_vk_vk_structs.h"
 
+#include "glv_vk_vkwsix11ext_structs.h"
+
 }
 
 #include "xgl.h"
@@ -118,6 +120,10 @@ private:
     glv_replay::GLV_REPLAY_RESULT manually_handle_xglFreeMemory(struct_xglFreeMemory* pPacket);
     glv_replay::GLV_REPLAY_RESULT manually_handle_xglMapMemory(struct_xglMapMemory* pPacket);
     glv_replay::GLV_REPLAY_RESULT manually_handle_xglUnmapMemory(struct_xglUnmapMemory* pPacket);
+    glv_replay::GLV_REPLAY_RESULT manually_handle_xglWsiX11AssociateConnection(struct_xglWsiX11AssociateConnection* pPacket);
+    glv_replay::GLV_REPLAY_RESULT manually_handle_xglWsiX11GetMSC(struct_xglWsiX11GetMSC* pPacket);
+    glv_replay::GLV_REPLAY_RESULT manually_handle_xglWsiX11CreatePresentableImage(struct_xglWsiX11CreatePresentableImage* pPacket);
+    glv_replay::GLV_REPLAY_RESULT manually_handle_xglWsiX11QueuePresent(struct_xglWsiX11QueuePresent* pPacket);
     std::map<XGL_GPU_MEMORY, XGLAllocInfo> m_mapData;
     void add_entry_to_mapData(XGL_GPU_MEMORY handle, XGL_GPU_SIZE size)
     {
index 8652272..a69c8f4 100644 (file)
@@ -28,8 +28,6 @@
 
 #include "glvreplay_xgl.h"
 
-#include "glvreplay_xgl_write_ppm.h"
-
 #include "glvreplay_main.h"
 
 #include <algorithm>
@@ -1179,87 +1177,25 @@ glv_replay::GLV_REPLAY_RESULT xglReplay::replay(glv_trace_packet_header *packet)
         case GLV_TPI_XGL_xglWsiX11AssociateConnection:
         {
             struct_xglWsiX11AssociateConnection* pPacket = (struct_xglWsiX11AssociateConnection*)(packet->pBody);
-#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)
-            //associate with the replayers Wsi connection rather than tracers
-            replayResult = m_xglFuncs.real_xglWsiX11AssociateConnection(remap(pPacket->gpu), &(m_display->m_WsiConnection));
-#elif defined(WIN32)
-            //TBD
-            replayResult = XGL_SUCCESS;
-#endif
-            CHECK_RETURN_VALUE(xglWsiX11AssociateConnection);
+            returnValue = manually_handle_xglWsiX11AssociateConnection(pPacket);
             break;
         }
         case GLV_TPI_XGL_xglWsiX11GetMSC:
         {
             struct_xglWsiX11GetMSC* pPacket = (struct_xglWsiX11GetMSC*)(packet->pBody);
-#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)
-            xcb_window_t window = m_display->m_XcbWindow;
-            replayResult = m_xglFuncs.real_xglWsiX11GetMSC(remap(pPacket->device), window, pPacket->crtc, pPacket->pMsc);
-#elif defined(WIN32)
-            //TBD
-            replayResult = XGL_SUCCESS;
-#else
-#endif
-            CHECK_RETURN_VALUE(xglWsiX11GetMSC);
+            returnValue = manually_handle_xglWsiX11GetMSC(pPacket);
             break;
         }
         case GLV_TPI_XGL_xglWsiX11CreatePresentableImage:
         {
             struct_xglWsiX11CreatePresentableImage* pPacket = (struct_xglWsiX11CreatePresentableImage*)(packet->pBody);
-#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)
-            XGL_IMAGE img;
-            XGL_GPU_MEMORY mem;
-            m_display->imageHeight.push_back(pPacket->pCreateInfo->extent.height);
-            m_display->imageWidth.push_back(pPacket->pCreateInfo->extent.width);
-            replayResult = m_xglFuncs.real_xglWsiX11CreatePresentableImage(remap(pPacket->device), pPacket->pCreateInfo, &img, &mem);
-            if (replayResult == XGL_SUCCESS)
-            {
-                if (pPacket->pImage != NULL)
-                    add_to_map(pPacket->pImage, &img);
-                if(pPacket->pMem != NULL)
-                    add_to_map(pPacket->pMem, &mem);
-                m_display->imageHandles.push_back(img);
-                m_display->imageMemory.push_back(mem);
-            }
-#elif defined(WIN32)
-            //TBD
-            replayResult = XGL_SUCCESS;
-#endif
-            CHECK_RETURN_VALUE(xglWsiX11CreatePresentableImage);
+            returnValue = manually_handle_xglWsiX11CreatePresentableImage(pPacket);
             break;
         }
         case GLV_TPI_XGL_xglWsiX11QueuePresent:
         {
             struct_xglWsiX11QueuePresent* pPacket = (struct_xglWsiX11QueuePresent*)(packet->pBody);
-#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)
-            XGL_WSI_X11_PRESENT_INFO pInfo;
-            std::vector<int>::iterator it;
-            memcpy(&pInfo, pPacket->pPresentInfo, sizeof(XGL_WSI_X11_PRESENT_INFO));
-            pInfo.srcImage = remap(pPacket->pPresentInfo->srcImage);
-            // use replayers Xcb window
-            pInfo.destWindow = m_display->m_XcbWindow;
-            replayResult = m_xglFuncs.real_xglWsiX11QueuePresent(remap(pPacket->queue), &pInfo, remap(pPacket->fence));
-            it = std::find(m_screenshotFrames.begin(), m_screenshotFrames.end(), m_display->m_frameNumber);
-            if (it != m_screenshotFrames.end())
-            {
-                for(unsigned int i=0; i<m_display->imageHandles.size(); i++)
-                {
-                    if (m_display->imageHandles[i] == pInfo.srcImage)
-                    {
-                        char frameName[32];
-                        sprintf(frameName, "%d",m_display->m_frameNumber);
-                        glvWritePPM(frameName, m_display->imageWidth[i], m_display->imageHeight[i],
-                            m_display->imageHandles[i], m_display->imageMemory[i], &m_xglFuncs);
-                        break;
-                    }
-                }
-            }
-#elif defined(WIN32)
-            //TBD
-            replayResult = XGL_SUCCESS;
-#endif
-            m_display->m_frameNumber++;
-            CHECK_RETURN_VALUE(xglWsiX11QueuePresent);
+            returnValue = manually_handle_xglWsiX11QueuePresent(pPacket);
             break;
         }
         default:
index 9ed889c..b431c22 100644 (file)
@@ -27,6 +27,7 @@
 #include "glvreplay_xgl_replay.h"
 #include "glvreplay_xgl.h"
 #include "glvreplay_xgl_settings.h"
+#include "glvreplay_xgl_write_ppm.h"
 
 #include <algorithm>
 #include <queue>
@@ -946,3 +947,97 @@ glv_replay::GLV_REPLAY_RESULT xglReplay::manually_handle_xglUnmapMemory(struct_x
     return returnValue;
 }
 
+glv_replay::GLV_REPLAY_RESULT xglReplay::manually_handle_xglWsiX11AssociateConnection(struct_xglWsiX11AssociateConnection* pPacket)
+{
+    XGL_RESULT replayResult = XGL_ERROR_UNKNOWN;
+    glv_replay::GLV_REPLAY_RESULT returnValue = glv_replay::GLV_REPLAY_SUCCESS;
+#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)
+    //associate with the replayers Wsi connection rather than tracers
+    replayResult = m_xglFuncs.real_xglWsiX11AssociateConnection(remap(pPacket->gpu), &(m_display->m_WsiConnection));
+#elif defined(WIN32)
+    //TBD
+    replayResult = XGL_SUCCESS;
+#endif
+    CHECK_RETURN_VALUE(xglWsiX11AssociateConnection);
+    return returnValue;
+}
+
+glv_replay::GLV_REPLAY_RESULT xglReplay::manually_handle_xglWsiX11GetMSC(struct_xglWsiX11GetMSC* pPacket)
+{
+    XGL_RESULT replayResult = XGL_ERROR_UNKNOWN;
+    glv_replay::GLV_REPLAY_RESULT returnValue = glv_replay::GLV_REPLAY_SUCCESS;
+#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)
+    xcb_window_t window = m_display->m_XcbWindow;
+    replayResult = m_xglFuncs.real_xglWsiX11GetMSC(remap(pPacket->device), window, pPacket->crtc, pPacket->pMsc);
+#elif defined(WIN32)
+    //TBD
+    replayResult = XGL_SUCCESS;
+#else
+#endif
+    CHECK_RETURN_VALUE(xglWsiX11GetMSC);
+    return returnValue;
+}
+
+glv_replay::GLV_REPLAY_RESULT xglReplay::manually_handle_xglWsiX11CreatePresentableImage(struct_xglWsiX11CreatePresentableImage* pPacket)
+{
+    XGL_RESULT replayResult = XGL_ERROR_UNKNOWN;
+    glv_replay::GLV_REPLAY_RESULT returnValue = glv_replay::GLV_REPLAY_SUCCESS;
+#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)
+    XGL_IMAGE img;
+    XGL_GPU_MEMORY mem;
+    m_display->imageHeight.push_back(pPacket->pCreateInfo->extent.height);
+    m_display->imageWidth.push_back(pPacket->pCreateInfo->extent.width);
+    replayResult = m_xglFuncs.real_xglWsiX11CreatePresentableImage(remap(pPacket->device), pPacket->pCreateInfo, &img, &mem);
+    if (replayResult == XGL_SUCCESS)
+    {
+        if (pPacket->pImage != NULL)
+            add_to_map(pPacket->pImage, &img);
+        if(pPacket->pMem != NULL)
+            add_to_map(pPacket->pMem, &mem);
+        m_display->imageHandles.push_back(img);
+        m_display->imageMemory.push_back(mem);
+    }
+#elif defined(WIN32)
+    //TBD
+    replayResult = XGL_SUCCESS;
+#endif
+    CHECK_RETURN_VALUE(xglWsiX11CreatePresentableImage);
+    return returnValue;
+}
+
+glv_replay::GLV_REPLAY_RESULT xglReplay::manually_handle_xglWsiX11QueuePresent(struct_xglWsiX11QueuePresent* pPacket)
+{
+    XGL_RESULT replayResult = XGL_ERROR_UNKNOWN;
+    glv_replay::GLV_REPLAY_RESULT returnValue = glv_replay::GLV_REPLAY_SUCCESS;
+#if defined(PLATFORM_LINUX) || defined(XCB_NVIDIA)
+    XGL_WSI_X11_PRESENT_INFO pInfo;
+    std::vector<int>::iterator it;
+    memcpy(&pInfo, pPacket->pPresentInfo, sizeof(XGL_WSI_X11_PRESENT_INFO));
+    pInfo.srcImage = remap(pPacket->pPresentInfo->srcImage);
+    // use replayers Xcb window
+    pInfo.destWindow = m_display->m_XcbWindow;
+    replayResult = m_xglFuncs.real_xglWsiX11QueuePresent(remap(pPacket->queue), &pInfo, remap(pPacket->fence));
+    it = std::find(m_screenshotFrames.begin(), m_screenshotFrames.end(), m_display->m_frameNumber);
+    if (it != m_screenshotFrames.end())
+    {
+        for(unsigned int i=0; i<m_display->imageHandles.size(); i++)
+        {
+            if (m_display->imageHandles[i] == pInfo.srcImage)
+            {
+                char frameName[32];
+                sprintf(frameName, "%d",m_display->m_frameNumber);
+                glvWritePPM(frameName, m_display->imageWidth[i], m_display->imageHeight[i],
+                    m_display->imageHandles[i], m_display->imageMemory[i], &m_xglFuncs);
+                break;
+            }
+        }
+    }
+#elif defined(WIN32)
+    //TBD
+    replayResult = XGL_SUCCESS;
+#endif
+    m_display->m_frameNumber++;
+    CHECK_RETURN_VALUE(xglWsiX11QueuePresent);
+    return returnValue;
+}
+