tests: Better deal with shader modules
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 1321141..49a2bc3 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -168,6 +168,11 @@
     }
 
     delete m_depthStencil;
+    while (!m_shader_modules.empty())
+    {
+        delete m_shader_modules.back();
+        m_shader_modules.pop_back();
+    }
 
     // reset the driver
     delete m_device;
@@ -1047,7 +1052,7 @@
     std::vector<unsigned int> spv;
     VkShaderCreateInfo createInfo;
     VkShaderModuleCreateInfo moduleCreateInfo;
-    vk_testing::ShaderModule module;
+    vk_testing::ShaderModule *module = new vk_testing::ShaderModule();
     size_t shader_len;
 
     m_stage = stage;
@@ -1081,17 +1086,18 @@
         moduleCreateInfo.flags = 0;
     }
 
-    err = module.init_try(*m_device, moduleCreateInfo);
+    err = module->init_try(*m_device, moduleCreateInfo);
     assert(VK_SUCCESS == err);
 
     createInfo.sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO;
     createInfo.pNext = NULL;
-    createInfo.module = module.handle();
+    createInfo.module = module->handle();
     createInfo.pName = "main";
     createInfo.flags = 0;
 
     err = init_try(*m_device, createInfo);
     assert(VK_SUCCESS == err);
+    framework->m_shader_modules.push_back(module);
 }
 
 VkPipelineObj::VkPipelineObj(VkDeviceObj *device)
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index 7cabc34..351bf2e2 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -77,6 +77,7 @@
     VkPhysicalDevice gpu() {return objs[0];}
     VkRenderPass renderPass() {return m_renderPass;}
     VkFramebuffer framebuffer() {return m_framebuffer;}
+    std::vector<vk_testing::ShaderModule*> m_shader_modules;
     void InitViewport(float width, float height);
     void InitViewport();
     void InitRenderTarget();