Vulkan - 从合并的管道缓存创建多个管道缓存

时间:2018-04-07 02:58:26

标签: vulkan

如果我理解正确,vkMergePipelineCaches很有用,因为它允许我们将从多个线程创建的缓存合并为一个,然后将其保存在磁盘上。

但是,重新启动应用程序后,我无法看到如何创建这些多个缓存。我在磁盘上的所有内容都是合并缓存,所以我是否需要在每个vkCreatePipelineCache调用上指向相同的大缓存(每个线程一个)?

如果我应该单独保存每个缓存,那么vkMergePipelineCaches的目的是什么?

1 个答案:

答案 0 :(得分:3)

  

我在磁盘上的所有内容都是合并缓存,所以我是否需要在每个vkCreatePipelineCache调用上指向相同的大缓存(每个线程一个)?

每个线程不需要一个缓存。 specification

  

许多对象类型是不可变的,这意味着对象一旦创建就无法更改。这些类型的对象永远不需要外部同步,除非它们在另一个线程上使用时不得被销毁。在某些特殊情况下,可变对象参数在内部同步,因此它们不需要外部同步。这方面的一个例子是在VkPipelineCachevkCreateGraphicsPipelines中使用vkCreateComputePipelines,其中围绕这种重量级命令的外部同步将是不切实际的。

读作:您可以在启动时加载单个大量缓存,然后让多个线程在管道创建期间使用它而不必担心同步问题

  

如果我应该单独保存每个缓存......

你不是。

  

...那么vkMergePipelineCaches的目的是什么?

vkMergePipelineCaches允许编程样式,如果您还没有,可以根据需要懒洋洋地创建管道缓存,然后允许您将多个此类缓存合并到单个缓存中以保持不变。后续运行不需要创建惰性缓存,因为它们可以使用加载的缓存。它不一定总是在线程之间总是有一个共享缓存,但在每种情况下都可能不方便,特别是从旧API移植时