知识卡片
扩展显式启用换取零意外开销
内容
在OpenGL里,扩展一旦被驱动支持就可以随时被应用程序调用,驱动因此必须假设任何时刻都可能突然被要求提供某项扩展能力,只能一直保持相关状态就绪。Vulkan反过来要求应用程序在创建实例/设备时显式声明要启用哪些扩展和层,没有声明就无法使用,驱动也就可以放心关闭未声明扩展对应的检查和状态跟踪。这是”用不到就不用付代价”这条设计原则的具体实现:可选功能的性能成本只应该由实际使用它的人承担,而不该分摊给所有程序,也顺带避免了程序意外触发本不打算启用的特性、破坏可移植性。层(调试、校验、日志用)遵循同样的模式:开发期显式开启做详尽检查,发布期直接关闭,两者互不拖累对方的开销。
参考来源
《Vulkan 应用开发指南》第1章《Vulkan概述》