启用保守光栅化失败:加载vkGetPhysicalDeviceProperties2KHR函数出错求助
问题原因及解决办法
核心问题在于你对VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME的处理错误:这个扩展是实例级扩展,而非设备级扩展,你不应该把它放到设备扩展列表里,而是要在创建Vulkan实例时启用它。
具体修正步骤
- 调整扩展归属
将VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME从DEVICE_EXTENSIONS移到实例扩展列表中,比如:const std::vector<const char*> INSTANCE_EXTENSIONS = { VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, // 其他你需要的实例级扩展,比如VK_KHR_SURFACE等 }; - 创建实例时启用该扩展
在创建Vulkan实例的vk::InstanceCreateInfo中指定启用这个实例扩展:vk::InstanceCreateInfo instance_create_info = {}; instance_create_info.enabledExtensionCount = INSTANCE_EXTENSIONS.size(); instance_create_info.ppEnabledExtensionNames = INSTANCE_EXTENSIONS.data(); // 配置其他实例创建参数... vk::Instance instance = vk::createInstance(instance_create_info); - 重新加载函数
完成实例创建并启用对应扩展后,再调用vkGetInstanceProcAddr加载vkGetPhysicalDeviceProperties2KHR函数,此时就能成功获取到函数指针了。
额外说明
你提到的VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME确实是设备级扩展,这部分的处理是正确的。不过注意你的vulkaninfo输出里显示用的是lavapipe软件渲染器,它的Vulkan实现不完全合规,后续测试保守光栅化功能时可能会遇到其他问题,建议优先使用硬件驱动提供的Vulkan实例。
内容的提问来源于stack exchange,提问作者Makogan
相关产品推荐
相关产品推荐

