gpt4 book ai didi

vulkan - 我什么时候可以释放传递给 vulkan vkCreateXXX 函数的资源和结构?

转载 作者:行者123 更新时间:2023-12-03 22:15:18 27 4
gpt4 key购买 nike

我开始学习 Vulkan,想知道 VkCreate[...] 函数是否将结构中指向的资源复制到他自己的缓冲区中。

为了澄清我的问题,在这段代码中我加载了 斯皮尔 将着色器放入我自己的 mkShader 结构中,然后使用 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;
}

如您所见,我正在使用 mkVulkanFreeShaderBinary 释放 mkShader 结构。创建着色器模块后,我的程序没有收到任何错误。所以我的问题是这样做是否安全,或者我必须保留 mkShader 结构,直到我销毁着色器模块。而且,这是否对所有 VkCreate[...] 函数都有效,并且此信息是否在 Vulkan 规范中的任何位置。

最佳答案

Object Lifetime Vulkan 规范。

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.



换句话说,一旦 Vulkan 函数调用返回,您分配的任何内容都可以自由删除。此外,一旦您创建了管道,您就可以自由地销毁 VkShaderModule也。

关于vulkan - 我什么时候可以释放传递给 vulkan vkCreateXXX 函数的资源和结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51391163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com