从samplerExternalOES读取纹素时编译时失败

时间:2016-11-17 18:58:33

标签: android opengl-es glsl glsles

最小失败片段着色器:

#version 320 es
#extension GL_OES_EGL_image_external_essl3 : require

precision highp float;
precision highp int;

vec4 x(samplerExternalOES sampler) {
    return texture(sampler, vec2(0, 0));
}

void main() {
}

在三星G-930P上,使用 OpenGL ES 3.2 V@145.0(GIT @ I5bc0f577f9),无法编译,着色器日志显示为:

  

内部编译器错误:错误:数组索引超出边界

在三星G-930F上 - 基本上是相同的手机,相同的Android版本等,但是使用 OpenGL ES 3.2 v1.r12p1-00dev0.60546d7cd0bfd82d0ba92ca3bb825c75 ,它可以编译 - 后一个设备可以正确执行更复杂的着色器,从samplerExternalOES读取纹素。

这是G-930P上OpenGL ES实施中的错误吗?这是一种不合理的方式来指定想要在texture上调用samplerExternalOES的函数的参数吗?

1 个答案:

答案 0 :(得分:1)

  

这是G-930P上OpenGL ES实施中的错误吗?

看起来确实如此...

  

在三星G-930F上 - 基本上是相同的手机,相同的Android版本等,但使用OpenGL ES 3.2 v1.r12p1-00dev0.60546d7cd0bfd82d0ba92ca3bb825c75,

如果你看一下手机内容就不一样了。

第一部手机(版本为V@145.0)基于使用Adreno GPU的Qualcomm Snapdradon,第二部手机(12p1)基于使用Mali GPU的Samsung Exynos。

对我而言,这似乎是Adreno设备驱动程序中的错误,Mali的驱动程序正在正确处理它。