diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2015-08-10 13:40:32 -0600 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2015-08-10 13:51:33 -0600 |
| commit | 777ae4c32b7bc0596a8eb4678a4e3c21ec8efecd (patch) | |
| tree | 4e668797199859a263fa22bb8fdf335fbe9374ff | |
| parent | 4dada52d963e42ae530842d620e85eb6cbfb106b (diff) | |
| download | usermoji-777ae4c32b7bc0596a8eb4678a4e3c21ec8efecd.tar.xz | |
tests: Move DestroyShaderModule calls after pipeline creation
| -rw-r--r-- | demos/tri.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/demos/tri.c b/demos/tri.c index 98be41a9..fbeacfb7 100644 --- a/demos/tri.c +++ b/demos/tri.c @@ -218,6 +218,9 @@ struct demo { VkDynamicColorBlendState color_blend; VkDynamicDepthStencilState depth_stencil; + VkShaderModule vert_shader_module; + VkShaderModule frag_shader_module; + VkDescriptorPool desc_pool; VkDescriptorSet desc_set; @@ -1047,12 +1050,12 @@ static void demo_prepare_render_pass(struct demo *demo) static VkShader demo_prepare_shader(struct demo *demo, VkShaderStage stage, + VkShaderModule* pShaderModule, const void *code, size_t size) { VkShaderModuleCreateInfo moduleCreateInfo; VkShaderCreateInfo shaderCreateInfo; - VkShaderModule shaderModule; VkShader shader; VkResult err; @@ -1067,18 +1070,16 @@ static VkShader demo_prepare_shader(struct demo *demo, moduleCreateInfo.codeSize = size; moduleCreateInfo.pCode = code; moduleCreateInfo.flags = 0; - err = vkCreateShaderModule(demo->device, &moduleCreateInfo, &shaderModule); + err = vkCreateShaderModule(demo->device, &moduleCreateInfo, pShaderModule); if (err) { free((void *) moduleCreateInfo.pCode); } shaderCreateInfo.flags = 0; - shaderCreateInfo.module = shaderModule; + shaderCreateInfo.module = *pShaderModule; shaderCreateInfo.pName = "main"; err = vkCreateShader(demo->device, &shaderCreateInfo, &shader); assert(!err); - err = vkDestroyShaderModule(demo->device, shaderModule); - assert(!err); } else { // Create fake SPV structure to feed GLSL // to the driver "under the covers" @@ -1092,18 +1093,16 @@ static VkShader demo_prepare_shader(struct demo *demo, ((uint32_t *) moduleCreateInfo.pCode)[2] = stage; memcpy(((uint32_t *) moduleCreateInfo.pCode + 3), code, size + 1); - err = vkCreateShaderModule(demo->device, &moduleCreateInfo, &shaderModule); + err = vkCreateShaderModule(demo->device, &moduleCreateInfo, pShaderModule); if (err) { free((void *) moduleCreateInfo.pCode); } shaderCreateInfo.flags = 0; - shaderCreateInfo.module = shaderModule; + shaderCreateInfo.module = *pShaderModule; shaderCreateInfo.pName = "main"; err = vkCreateShader(demo->device, &shaderCreateInfo, &shader); assert(!err); - err = vkDestroyShaderModule(demo->device, shaderModule); - assert(!err); } return shader; } @@ -1140,7 +1139,8 @@ static VkShader demo_prepare_vs(struct demo *demo) vertShaderCode = demo_read_spv("tri-vert.spv", &size); return demo_prepare_shader(demo, VK_SHADER_STAGE_VERTEX, - vertShaderCode, size); + &demo->vert_shader_module, + vertShaderCode, size); } else { static const char *vertShaderText = "#version 140\n" @@ -1155,6 +1155,7 @@ static VkShader demo_prepare_vs(struct demo *demo) "}\n"; return demo_prepare_shader(demo, VK_SHADER_STAGE_VERTEX, + &demo->vert_shader_module, (const void *) vertShaderText, strlen(vertShaderText)); } @@ -1169,7 +1170,8 @@ static VkShader demo_prepare_fs(struct demo *demo) fragShaderCode = demo_read_spv("tri-frag.spv", &size); return demo_prepare_shader(demo, VK_SHADER_STAGE_FRAGMENT, - fragShaderCode, size); + &demo->frag_shader_module, + fragShaderCode, size); } else { static const char *fragShaderText = "#version 140\n" @@ -1183,6 +1185,7 @@ static VkShader demo_prepare_fs(struct demo *demo) "}\n"; return demo_prepare_shader(demo, VK_SHADER_STAGE_FRAGMENT, + &demo->frag_shader_module, (const void *) fragShaderText, strlen(fragShaderText)); } @@ -1287,6 +1290,8 @@ static void demo_prepare_pipeline(struct demo *demo) for (uint32_t i = 0; i < pipeline.stageCount; i++) { vkDestroyShader(demo->device, shaderStages[i].shader); } + vkDestroyShaderModule(demo->device, demo->frag_shader_module); + vkDestroyShaderModule(demo->device, demo->vert_shader_module); } static void demo_prepare_dynamic_states(struct demo *demo) |
