为 Vulkan 提供显式管道缓存控制

为 Vulkan 提供显式管道缓存控制

💡 原文中文,约4600字,阅读约需11分钟。
📝

内容提要

Vulkan®工作组发布了VK_KHR_pipeline_binary扩展,允许应用程序直接管理管道缓存,绕过VkPipelineCache机制。该扩展提供了对二进制数据和缓存所需信息的访问,并与应用程序自己的缓存机制集成。VK_KHR_pipeline_binary扩展为高级需求提供了解决方案,但不需要这些功能的应用程序可以继续使用VkPipelineCache对象。该扩展还提供了一些属性,如pipelineBinaryInternalCache和pipelineBinaryPrefersInternalCache,以优化内部缓存的使用。

🎯

关键要点

  • Vulkan工作组发布VK_KHR_pipeline_binary扩展,允许应用程序直接管理管道缓存。
  • 该扩展绕过VkPipelineCache机制,提供对二进制数据和缓存信息的访问。
  • VK_KHR_pipeline_binary扩展为高级需求提供解决方案,但不需要这些功能的应用程序可以继续使用VkPipelineCache对象。
  • 扩展提供了pipelineBinaryInternalCache和pipelineBinaryPrefersInternalCache等属性,以优化内部缓存的使用。
  • VkPipelineCache对象在缓存大小和修剪受限的情况下难以使用,尤其是实现LRU缓存的应用程序。
  • 某些应用程序维护VkPipeline对象的缓存,VkPipelineCache API无法有效关联这些缓存条目。
  • VK_KHR_pipeline_binary扩展引入了一种新方法,允许应用程序与自己的缓存机制集成。
  • 驱动程序在创建管道时生成多个二进制blob,应用程序可以通过vkCreatePipelineBinariesKHR()和vkGetPipelineBinaryDataKHR()管理这些blob。
  • 应用程序可以使用vkGetPipelineKeyKHR()函数生成blob的密钥,以便与缓存关联。
  • 驱动程序的内部缓存可以提高性能,允许在不同管道之间共享blob。
  • VK_KHR_pipeline_binary扩展允许应用程序异步创建二进制对象,避免管道创建过程中的微卡顿。
  • 专用平台可能提供额外功能,使内部缓存更具吸引力,例如Steam的管道缓存内容分布功能。
  • 扩展公开了多个属性,允许应用程序直接从内部缓存中检索blob,或禁用内部缓存以避免重复工作。
  • VK_KHR_pipeline_binary扩展经过多年的开发,旨在提高应用程序性能并解决开发者问题。
➡️

继续阅读