我来到这个问题调查管道衍生品是否提供好处。以下是我从供应商那里找到的一些资源:
提示和技巧:Vulkan 的注意事项,Nvidia,2019 年 6 月 6 日
不要期望 Pipeline Derivatives 会加速。
Vulkan 使用建议,三星
管道衍生品让应用程序将“子”管道表示为类似“父”的增量状态变化;在某些架构上,这可以降低在相似状态之间切换的成本。许多移动 GPU 主要通过流水线缓存获得性能,因此流水线衍生产品通常不会为便携式移动应用程序带来任何好处。
建议
- 在应用程序执行的早期创建管道。避免在绘制时创建管道。
- 为所有管道创建使用单个管道缓存。
- 在应用程序运行之间将管道缓存写入文件。
- 避免管道衍生品。
面向移动开发人员的 Vulkan 最佳实践 - 管道管理,Arm 软件,2019 年 7 月 11 日
别
- 在没有管道缓存的情况下在绘制时创建管道(引入性能卡顿)。
- 使用管道衍生产品,因为它们不受支持。
Vulkan 样本、LunarG、API-Samples/pipeline_derivative/pipeline_derivative.cpp
/*
VULKAN_SAMPLE_SHORT_DESCRIPTION
This sample creates pipeline derivative and draws with it.
Pipeline derivatives should allow for faster creation of pipelines.
In this sample, we'll create the default pipeline, but then modify
it slightly and create a derivative. The derivatve will be used to
render a simple cube.
We may later find that the pipeline is too simple to show any speedup,
or that replacing the fragment shader is too expensive, so this sample
can be updated then.
*/
似乎没有任何供应商实际上建议使用管道衍生产品,除非可能是为了加快管道创建速度。
对我来说,这在理论上似乎是一个好主意,理论上的实现在实践中并不重要。
此外,如果驱动程序应该从多个管道的共同父级中受益,它应该完全能够自动化该祖先检测。“共同祖先”可以基于提供最佳加速的任何特定共同管道状态来合成。为什么要通过 API 明确指定它?