微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自 QtWidget/QtWindow 的无效 VkSurfaceKHR 句柄

如何解决来自 QtWidget/QtWindow 的无效 VkSurfaceKHR 句柄

我尝试在 Ubuntu Linux 18.04 上的 Qt 5.10.1 C++ 应用程序中为 QWidget 派生类创建一个有效的 VkSurfaceKHR 表面对象。获取 vulkan 实例和表面的代码如下所示:

QVulkanInstance inst;

inst.setLayers(QByteArrayList() << "VK_LAYER_KHRONOS_validation");

if (!inst.create())
   qFatal("Failed to create Vulkan instance: %d",inst.errorCode());


   …  A QtWidget is created. code is omitted …

widget->show();

QWindow* realWindow = widget->windowHandle();

if ( !realWindow && widget->nativeParentWidget() )
    realWindow = widget->nativeParentWidget()->windowHandle();

realWindow->setSurfaceType ( QSurface::VulkanSurface );
realWindow->setVulkanInstance ( &inst );

m_VulkanSurface = QVulkanInstance::surfaceForWindow ( realWindow ); 

在成功创建 vulcan 实例并从中创建设备后,我在使用此表面的 vkGetPhysicalDeviceSurfaceSupportKHR 调用中遇到段错误,尽管 surfaceForWindow 不返回 0。

在崩溃前不久,我从 VK_LAYER_KHRONOS_validation_layer 收到了这些错误消息:

vkDebug: Validation: 0: Validation Error: [ VUID-vkGetPhysicalDeviceSurfaceSupportKHR-surface-parameter ] Object 0: VK_NULL_HANDLE,type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0x801f247e | Invalid VkSurfaceKHR Object 0x55555777b560. The Vulkan spec states: surface must be a valid VkSurfaceKHR handle (https://vulkan.lunarg.com/doc/view/1.2.154.0/linux/1.2-extensions/vkspec.html#VUID-vkGetPhysicalDeviceSurfaceSupportKHR-surface-parameter)

vkDebug: Validation: 0: Validation Error: [ UNASSIGNED-Threading-Info ] Object 0: handle = 0x55555777b560,type = VK_OBJECT_TYPE_SURFACE_KHR; | MessageID = 0x5d6b67e2 | Couldn't find VkSurfaceKHR Object 0x55555777b560. This should not happen and may indicate a bug in the application.

我在 Qt 上生成 Vulkan 表面的方法是否适用?

解决方法

我猜你错过了

 realWindow->show();

它对我有用,下面的代码:

    realWindow->setSurfaceType(QSurface::VulkanSurface);
    realWindow->show();
    realWindow->setVulkanInstance(&inst);
    surface = inst.surfaceForWindow(realWindow);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。