When can I free resources and structures passed to a vulkan vkCreateXXX function?

只谈情不闲聊 提交于 2019-12-12 17:23:06

问题


I'm starting to learn Vulkan, and want to know if VkCreate[...] functions copy the resources pointed in structs into his own buffers.

To clarify my question, in this code I load a SPIR shader into my own mkShader struct and then I create the shadermodule with vkCreateShaderModule.

static VkShaderModule mkVulkanCreateShaderModule(MkVulkanContext *vc,
                     const char *filename)
{
    VkShaderModule shaderModule;
    struct mkShader *shader = mkVulkanLoadShaderBinary(filename);
    VkShaderModuleCreateInfo createInfo = {0};
    createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
    createInfo.codeSize = shader->size;
    createInfo.pCode = (uint32_t *)shader->buffer;

    if (vkCreateShaderModule(vc->device, &createInfo, NULL,
                 &shaderModule) != VK_SUCCESS) {
        printf(ANSI_COLOR_RED
               "Failed to create shader module\n" ANSI_COLOR_RESET);
        assert(0);
        exit(EXIT_FAILURE);
    }
    mkVulkanFreeShaderBinary(shader);
    return shaderModule;
}

As you can see I'm freeing the mkShader struct with mkVulkanFreeShaderBinaryafter shader module creation and I'm not receiving any error from my program. So my question is if this is safe to do, or I have to keep the mkShader struct until I destroy the shader module. And also, if this is valid to all VkCreate[...] functions or not, and if this information is anywhere in the Vulkan spec.


回答1:


See Object Lifetime of the Vulkan specification.

The ownership of application-owned memory is immediately acquired by any Vulkan command it is passed into. Ownership of such memory must be released back to the application at the end of the duration of the command, so that the application can alter or free this memory as soon as all the commands that acquired it have returned.

In other words, anything you allocate you are free to delete as soon as a Vulkan function call returns. Additionally, once you've created your pipeline, you're free to destroy the VkShaderModule too.



来源:https://stackoverflow.com/questions/51391163/when-can-i-free-resources-and-structures-passed-to-a-vulkan-vkcreatexxx-function

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!