这似乎是Fire特定的GPU问题,我很感激任何帮助或建议。
在大多数情况下,我的塔防游戏能够以60 fps的速度运行,即使有数十个敌人和塔都在每个方向射击。然而,在看似随机的时间(即使没有任何事情发生 - 就像坐在主菜单上)非常均匀间隔400毫秒的故障以大约2-3秒的间隔暂停游戏。然后突然间连线将消失,16x16像素的纹理块会随机呈现。
这两个故障看起来是相互排斥的,就像我说的那样,只需启动游戏并从主菜单导航到水平选择屏幕即可触发,其中加载了最少的资源并且发生了很少的游戏逻辑。我使用OpenSL来获得音效,我注意到禁用sfx会将连接时间改为280ms。
然后我手动将帧速率从60 fps强制到30 fps(通过在帧滴答循环中插入睡眠),两个毛刺完全消失。
这是一个屏幕上限,演示纹理不呈现。无论深度/模板值是否打开或关闭,都会在所有32位渲染表面中发生此错误。
谢谢!
编辑:实际上,显然纹理闪烁发生在任何帧率,然而,在40到45 fps之间的某个地方,400毫秒的故障消失了。
答案 0 :(得分:2)
好的,这是一个非常微妙的驱动程序错误,不一定特定于Kindle Fire。我希望能帮助别人避免将来出现类似的痛苦。我已经清楚地概述了这些症状,但是这个bug的来源是设置剪刀矩形。
从本质上讲,我们有许多动画UI元素可以放大和缩小屏幕,所以我们用剪刀矩形变得非常时髦。触发器似乎是将剪刀矩形设置在屏幕外,然后在水平方向外部渲染。这样做会使GPU处于一种微妙的搞砸状态,这似乎不会立即显现,但逐渐变得更糟。
此外,这似乎修复了我们在Droid RAZR上遇到的一个错误,它有一个与Fire相同的GPU。这个错误是我们在logcat中看到的5秒钟冻结:
W/SharedBufferStack(14208): waitForCondition(LockCondition) timed out (identity=173, status=0). CPU may be pegged. trying again.
显然,这些类型的错误很难追踪并确定准确的条件,但它绝对与屏幕外剪刀裁剪之外的渲染有关。