Adreno 220 GLSL错误

kea*_*ine 5 android opengl-es glsl opengl-es-2.0

我们在使用Adreno 220 GPU的索尼Xperia S手机上遇到GLSL alpha测试问题.设备正在运行Android 4.0.4.

Adreno 200,Adreno 205,Adreno 225以及Tegra2,Mali400PowerVR GPU上它运行良好.

着色器代码:

// vertex
            uniform highp mat4 uMVPMatrix;
            attribute highp vec4 aPosition;
            attribute highp vec2 aTextureCoord;
            varying mediump vec2 vTextureCoord;
            void main() {
              gl_Position = uMVPMatrix * aPosition;
              vTextureCoord = aTextureCoord;
            } 

// fragment
            precision mediump float;
            varying mediump vec2 vTextureCoord;
            uniform sampler2D sTexture;
            uniform sampler2D sAlpha;
            uniform vec4 uBlendColor;
            void main() {
             vec4 base = texture2D(sTexture, vTextureCoord);
             if(texture2D(sAlpha, vTextureCoord).r < 0.5){ discard; }
             else { gl_FragColor = base * uBlendColor; }
            }
Run Code Online (Sandbox Code Playgroud)

bug的屏幕截图: 越野车

在其他设备上更正结果: 没有错误

请告知可能导致此类视觉故障的原因,找到原因的方法以及可能的解决方法.

编辑:同样的错误确认HTC Rezound的旧库存ROM.有关详细信息,请参阅我的回答

kea*_*ine 0

我要求在 xda-developers 上的不同固件上测试应用程序。在某些设备上它工作得很好,而在另一些设备上却出现了这种视觉故障。

所以我得出的结论是,这与 OpenGL 驱动程序中的一些错误有关,该错误已在某些非库存 ROM 中修复。

编辑:确认它是旧版高通 Adreno 220 驱动程序中的一个错误。在配备 4.0.3 ROM 的HTC Rezound手机(也是 Adreno 220)上也存在同样的错误,它不仅出现在我的应用程序中,而且还出现在某些游戏中 - 某些对象上缺少某些线条或像素。生根并安装 CM 4.1 后,错误消失了。