我开始学习 Vulkan,想知道 VkCreate[...] 函数是否将结构中指向的资源复制到他自己的缓冲区中。
为了澄清我的问题,在这段代码中,我将一个SPIR着色器加载到我自己的 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;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我在mkVulkanFreeShaderBinary创建着色器模块之后释放了 mkShader 结构,并且我没有从我的程序中收到任何错误。所以我的问题是这样做是否安全,或者我必须保留 mkShader 结构,直到我销毁着色器模块。而且,这是否对所有 VkCreate[...] 函数都有效,并且此信息是否在 Vulkan 规范中的任何位置。
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |