Android 5.1上的Adreno 420驱动程序错误

时间:2015-04-08 18:15:41

标签: android c++ opengl-es-2.0

只是想分享一个经验,我必须看到是否有人遇到过这样的问题,如果他们找到了原因,更重要的是他们如何修复它。

问题非常简单:在Nexus 6上调试本机代码时,作为Adreno 420 GPU,eglSwapBuffer在使用Android 5.1(5.0完美运行)的某些情况下可能会崩溃。 由于我无法复制它,我无法告诉你出了什么问题。根据文档,elgSwapBuffer内部调用glFlush;因此,如果我在调用eglSwapBuffer之前调用glFlush,它会突然运行。 我的猜测是驱动程序没有正确刷新,因此在交换缓冲区时会崩溃。

对此有何评论?

干杯, d

2 个答案:

答案 0 :(得分:1)

我有同样的问题,我可以重现它。它显然是因为在渲染过程中由于深层嵌套循环而耗尽堆栈内存。

Android Lollipop 5.1: Fatal signal 11 (SIGSEGV), code 2, fault addr 0x9e985ff8 in tid 4093 (RenderThread) / when using lot of nine patch graphics

我已经向谷歌问题跟踪器报告过了:

https://code.google.com/p/android/issues/detail?id=163100

更新:同时我找到了解决此问题的方法。它绝对不是一个长期的解决方案,但目前,它是阻止我的应用程序崩溃的最佳选择。

我禁用了特定图形图层的GPU渲染。它减慢了一点,但不显着。

所以现在噩梦已经结束了,但我仍然认为,这个问题必须在驱动程序本身上修复。不能用5.0.2及以下版本完美的东西立即停止使用5.1。

答案 1 :(得分:0)

我在N6上也看到了一些奇怪的行为,虽然我不能排除app bug,但我认为Adreno驱动程序应该受到责备。

具体来说,在横向模式下,我们的GLSurfaceView只呈现其中一半的内容,但偶尔会闪烁所有内容。并且在呈现某些场景时会出现间歇性闪烁。在一个额外的怪异的情况下,我已经看到屏幕的一半完全冻结,卡在app内容上,即使在通过主页按钮返回启动器之后。它似乎有点像使用多流传输而其中一个流丢失了。