9.3. 管线的销毁
可调用如下命令来销毁一个图形或者计算管线:
void vkDestroyPipeline(
VkDevice device,
VkPipeline pipeline,
const VkAllocationCallbacks* pAllocator);
-
device是需要销毁管线的逻辑设备。 -
pipeline是需要被销毁的管线的handle。 -
pAllocator控制了CPU端内存分配,如 Memory Allocation 一章所描述。
9.4. 多管线的创建
可传递一个数组的VkGraphicsPipelineCreateInfo或者VkComputePipelineCreateInfo到vkCreateGraphicsPipelines 和 vkCreateComputePipelines命令。应用程序可以在单个调用中成组的创建相似的管线,Vulkan实现被鼓励寻求在组创建的机会中重用资源。
当一个应用程序尝试在单个命令中创建多个管线,也还是有可能一些子集会创建失败。 这种情况下,在输出的pPipelines对应入口点将被赋值为VK_NULL_HANDLE。 如果任何管线创建失败(例如,因为内存错误),vkCreate*Pipelines 命令将会返回一个错误码。 Vulkan实现将尝试创建所有的管线,那些失败的只返回VK_NULL_HANDLE 。
9.5. 管线衍生(Pipeline Derivatives)
一个管线衍生是父管线创建的一个子管线,父子管线拥有很大的共同性。 衍生管线的设计目标是用父管线当作起始点来创建管线会更加便宜,而且和父子管线之间切换或绑定会更加高效(CPU和GPU端都如此)。
设置Vk*PipelineCreateInfo的flag为VK_PIPELINE_CREATE_DERIVATIVE_BIT来创建衍生管线。 如果这个标志位被设置了,那么basePipelineHandle 或者basePipelineIndex 成员之一必须有有效的handle/索引来表示父管线。 如果使用了basePipelineHandle,那么父管线必须已经被创建好了。 如果使用了basePipelineIndex,那么可在同一个命令中创建父管线。 对于basePipelineHandle来说,VK_NULL_HANDLE表示一个无效的handle, 对于basePipelineIndex来说, -1 表示一个无效的索引。 如果使用了basePipelineIndex,基管线必须在数组中更早出现。 基管线必须带有VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT这个标志位被创建。
本文介绍Vulkan图形API中管线的创建、销毁及衍生过程。详细解释如何通过vkDestroyPipeline销毁管线,多管线创建的批量操作及其注意事项,并探讨管线衍生的概念与应用场景。
222

被折叠的 条评论
为什么被折叠?



