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

Adreno 420 driver bug on Android 5.1

只是想分享一个经验,我想看看有没有人遇到过这样的问题,他们是否找到了原因,更重要的是他们是如何解决的。

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

对此有何评论?

干杯, D

我遇到了同样的问题,我可以重现。这显然是因为渲染过程中的深层嵌套循环耗尽了堆栈内存。

我已经将它报告给 google 问题跟踪器:

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

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

我禁用了特定图形层的 GPU 渲染。它会稍微减慢绘图速度,但影响不大。

所以噩梦暂时结束了,但我仍然认为,这个问题必须由驱动程序本身解决。不可能是在 5.0.2 及以下版本上完美运行的东西,立即停止在 5.1 上运行。

我在 N6 上也看到了一些奇怪的行为,虽然我不能排除应用程序错误,但在我看来应该归咎于 Adreno 驱动程序。

具体来说,在横向模式下,我们的 GLSurfaceView 只呈现一半的内容,但偶尔会闪烁所有内容。在渲染某些场景时,会出现间歇性闪烁。在一个更奇怪的情况下,我看到一半的屏幕完全冻结,卡在应用程序内容上,即使在通过主页按钮返回启动器之后也是如此。它看起来有点像如果它使用多流传输并且其中一个流丢失了。