在Vulkan下,我应该期待“设备丢失”的情况正常吗?

时间:2017-05-07 03:04:19

标签: error-handling vulkan

我在问,因为我想知道我应该如何使用我的程序来防止设备丢失。

我应该只假设设备在硬件错误,驱动程序错误,API使用不当或非终止着色器程序的情况下丢失;或者我是否也应该在这种情况下预期设备丢失,例如,暂停和恢复我的笔记本电脑,最小化应用程序窗口,或者只是随机,因为实现感觉如此?

1 个答案:

答案 0 :(得分:1)

不幸的是,GPU,驱动程序和操作系统会有所不同,这导致了krOoze引用的一些模糊的规范措辞:

  

由于硬件错误,执行超时,电源管理事件和/或特定于平台的事件,逻辑设备可能会丢失。

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

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

在实践中,这些应该是相当罕见的事件,我相信(没有数据),这些天它主要是由热插拔(罕见)或行为不端的硬件/驱动程序/应用程序事件引起的,而不是更常规的事情,如设备睡眠。

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