【问题标题】:Recognize crashed graphics driver识别崩溃的图形驱动程序
【发布时间】:2014-01-28 10:38:14
【问题描述】:

在我的笔记本电脑(dell xps 15、win8.1 x64、nvidia/intel gpu)上,我最多可以同时使用三个显示器,但如果我的笔记本电脑因为耗电而禁用显示器保存并重新打开它们,如果您移动鼠标,有时图形驱动程序会崩溃并会恢复。

一点也不神奇,但有时图形驱动程序无法完全恢复 - 除非我创建 OpenGL 上下文,否则它会正常运行 - 上下文将成功创建,一切正常 - 但 这是一个标准的 OpenGL 1.1 GDI 上下文,所有在 OpenGL 1.1 之后设计且未被 GDI 覆盖的函数指针都只是空指针,因此应用程序在加载资源时会立即崩溃。

我是否有机会检测到崩溃的驱动程序并告诉用户重新启动她/他的机器(这已经是我针对此问题采用的解决方案) - 或者我应该简单地告诉他/她,这可能是错误或不支持他们的OpenGL驱动版本?

哦,英特尔和英伟达 gpu 都无法创建更新的 OpenGL 上下文。确实奇怪的行为..

【问题讨论】:

  • 顺便说一句,您的网站似乎已关闭

标签: c++ opengl gpu gdi nvidia


【解决方案1】:

在 WDDM (Windows Vista/7/8) 中“无缝”处理驱动程序崩溃。通常,当显示驱动程序自行重置时,屏幕会变黑一段时间,然后系统托盘中会弹出一条小消息,告诉您发生了这种情况。 NV 和 AMD 驱动程序都执行此操作。也就是说,您所描述的行为在 NV 驱动程序中也经常发生 - 这种状态在完全重置之前无法创建 ICD OpenGL 上下文,这似乎是 NV 独有的。最好的解决方案是在您的软件启动时检查 GL 版本/扩展支持,如果实现不充分则打印错误。

通常,假设您的应用程序不是导致驱动程序重置的原因,在 OpenGL 中,驱动程序重置后您的应用程序将继续运行。上下文重置在 GL 的后台处理,驱动程序将为您重新加载所有资源。如果您使用robust context(新的 WGL 扩展),您可能能够检测到这种情况,但这听起来更像是在您的软件未运行时发生的问题。

【讨论】:

  • 是的,这不是我的应用程序造成的崩溃 - 但“普通”用户可能会简单地认为,我的游戏/应用程序有问题/导致问题并且可能会感到失望。
【解决方案2】:

但它是标准的 OpenGL 1.1 GDI 上下文,并且所有在 OpenGL 1.1 之后发明且未被 GDI 覆盖的函数指针都只是空指针,因此应用程序在加载资源时会立即崩溃。

您不是在测试所需扩展/OpenGL 版本的可用性吗?而且你不测试实际得到的函数指针是否有效?

对我来说,听起来你盲目地假设 OpenGL 扩展总是能正常加载。但是,如果它们未能向用户提供有意义的错误消息,则必须执行这些检查。

【讨论】:

  • 我知道,我应该做这些事情,我会在完成更高优先级的任务后立即实施它们。但我喜欢讨论这种行为并且知道,如果其他人有关于/或相同问题的信息:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
相关资源
最近更新 更多