error-handling - 在 Vulkan 下,我是否应该正常预期 "device lost"条件?

标签 error-handling vulkan

我问这个问题是因为我想知道我的程序应该如何可靠地防止设备丢失。

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

最佳答案

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

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

仅供引用,Android 操作系统本身不存在任何需要设备丢失的情况 - 例如当应用程序进入后台或屏幕关闭时,它不会强制设备丢失。

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

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

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

关于error-handling - 在 Vulkan 下,我是否应该正常预期 "device lost"条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827416/

相关文章:

C# Visual Studio 2008 - Windows 窗体设计器中的设计时错误

laravel - Laravel 5处理所有错误

error-handling - 从 Promise : should it resolve(false) or reject()? 返回 false

textures - Vulkan 纹理模糊问题

graphics - Vulkan命令执行顺序

javascript - 如何在新的 Error 对象 Javascript 的消息中添加换行符?

kotlin - CoroutineExceptionHandler 应该如何处理 OutOfMemoryError 或其他 fatal error ?

Vulkan SDK设置: vkEnumerateInstanceExtensionProperties failed to find the VK_KHR_surface extension

c++ - vkGetPhysicalDeviceSurfaceCapabilitiesKHR 什么都不返回

directx-12 - DirectX 12/Mantle/Vulkan 和 HSA