ncnn icon indicating copy to clipboard operation
ncnn copied to clipboard

ncnn 是否可以支持增加自定义 enabledExtensions ?

Open XingRay opened this issue 6 months ago • 0 comments

detail | 详细描述 | 詳細な説明

我正在开发一个在windos上和android端都能运行的demo, 需要通过ncnn运行模型,识别关键点并输出点位和输入图像一起显示在屏幕上

在android上可以直接使用ncnnn创建的vkInstance创建swapchian显示图像, 但是在windows下无法创建swapchain, 原因时 windows下创建swapchian需要在创建 vkInstance 时添加 glfw 的 extension,但是目前没有找到可以添加 extension 的方法

我查看了源码 src/gpu.cpp

std::vector<const char*> enabledExtensions; ... if (support_VK_KHR_external_memory_capabilities) enabledExtensions.push_back("VK_KHR_external_memory_capabilities"); if (support_VK_KHR_get_physical_device_properties2) enabledExtensions.push_back("VK_KHR_get_physical_device_properties2"); if (support_VK_KHR_get_surface_capabilities2) enabledExtensions.push_back("VK_KHR_get_surface_capabilities2"); if (support_VK_KHR_portability_enumeration) enabledExtensions.push_back("VK_KHR_portability_enumeration"); if (support_VK_KHR_surface) enabledExtensions.push_back("VK_KHR_surface"); #if ENABLE_VALIDATION_LAYER if (support_VK_EXT_debug_utils) enabledExtensions.push_back("VK_EXT_debug_utils"); if (support_VK_EXT_validation_features) enabledExtensions.push_back("VK_EXT_validation_features"); if (support_VK_EXT_validation_flags) enabledExtensions.push_back("VK_EXT_validation_flags"); #endif // ENABLE_VALIDATION_LAYER #if ANDROID_API >= 26 if (support_VK_KHR_android_surface) enabledExtensions.push_back("VK_KHR_android_surface"); #endif // ANDROID_API >= 26 ...

在android平台添加了 extension: enabledExtensions.push_back("VK_KHR_android_surface");

,但是在windows平台无法通过api添加响应的 extension , 比如 glfw 需要的 extension,

希望可以增加一个方法, 可以让开发者在创建 VulkanDevice 时, 可以添加指定的 extension , 比如:

ncnn::external_extensions.pusn_back("required_extension_xxx");

然后在 gpu.cpp 中读取上面的 ncnn::external_extensions 添加到 enabledExtensions 中

或者其他更好的方式支持手动添加 extension

XingRay avatar Aug 14 '25 15:08 XingRay