我应该期望 "device lost" 条件在 Vulkan 下正常吗?

Should I expect "device lost" conditions as normal under Vulkan?

我问这个问题是因为我想知道我的程序应该有多稳健以防止设备丢失。

我是否应该仅在出现硬件错误、驱动程序错误、API 使用不当或着色器程序未终止的情况下才会丢失设备?或者我是否也应该预计在诸如暂停和恢复我的笔记本电脑、最小化应用程序等情况下设备丢失 window,或者只是随机因为实施感觉如此?

不幸的是,它会因 GPU、驱动程序和 OS 而异,这导致 krOoze 引用的规范措辞有些模糊:

A logical device may become lost because of hardware errors, execution timeouts, power management events and/or platform-specific events.

作为参考,Android OS 本身没有任何需要丢失设备的内容——例如当应用程序进入后台或屏幕关闭时,它不会强制设备丢失。

但是,如果存在 GPU 异常(或重置),某些 driver/hardware 组合可能会报告设备丢失错误,除非驱动程序可以保证您的 VkDevice 中的任何内容都不会受到影响。这是一个令人惊讶的难以保证,例如。如果在问题发生时您的队列不是 运行,但您的一些数据仍然可能在脏缓存行中并且重置会使这些行无效而不是将它们写回内存,那么您的数据将是损坏。 exception/reset 可能是由硬件或驱动程序错误引起的,或者是由系统上的任何应用程序遇到看门狗超时引起的(着色器中的无限循环是一个简单的例子,但即使取得进展但只是花费太长时间也可能发生)。

实际上,这些应该是相当罕见的事件,而且我相信(没有数据)这些天它主要是由热插拔(罕见)或行为不当 hardware/driver/app 事件引起的,而不是设备睡眠等更常规的事情。

由于测试你的恢复代码会很困难,因此它可能会出现错误,我的建议是只做一些简单但繁重的事情,比如保存应用程序状态并自动重启你的应用程序,或者退出并要求用户重新启动。根据您正在构建的内容,做一些更复杂的事情可能是合理的,例如拆除和重新启动+恢复您的渲染器系统而不拆除您应用程序的其余部分。