VkDynamicColorBlendState color_blend;
VkDynamicDepthStencilState depth_stencil;
+ VkShaderModule vert_shader_module;
+ VkShaderModule frag_shader_module;
+
VkDescriptorPool desc_pool;
VkDescriptorSet desc_set;
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;
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"
((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;
}
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"
"}\n";
return demo_prepare_shader(demo, VK_SHADER_STAGE_VERTEX,
+ &demo->vert_shader_module,
(const void *) vertShaderText,
strlen(vertShaderText));
}
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"
"}\n";
return demo_prepare_shader(demo, VK_SHADER_STAGE_FRAGMENT,
+ &demo->frag_shader_module,
(const void *) fragShaderText,
strlen(fragShaderText));
}
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)