咨询Vulkan中扩展(Extensions)与层(Layers)的关系及相关困惑
Vulkan扩展(Extensions)与层(Layers)的关系及疑问
我对Vulkan中*扩展(Extensions)与层(Layers)*的关系及区别一直没太搞清楚,目前我自己的理解是:
- 层是一种拦截Vulkan API调用的机制,能形成一条从应用程序到ICD(Installable Client Driver)的调用链,每层会依次执行自身功能
- 扩展则是用来提供额外能力,增强Vulkan原有功能的组件
但我有个困惑点:在枚举或查询扩展信息时,必须指定对应的层。比如vkEnumerateInstanceExtensionProperties函数的定义:
VkResult vkEnumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
这个函数的第一个参数就是层名称,这意味着扩展是由层提供的——这让层的概念从单纯的函数调用拦截器,变成了同时能提供额外功能的「模块」。
这是不是表示,要激活某个扩展,我必须先找到并启用提供该扩展的层,而不能直接激活扩展本身、不用关注它所属的层?
内容的提问来源于stack exchange,提问作者SZYoo
相关产品推荐
相关产品推荐

