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

Compile-time failure when reading texels from samplerExternalOES

最小失败片段着色器:

#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),编译失败,着色器日志如下:

Internal compiler error: Error: array indexing out of boundary

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

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

Is this a bug in the OpenGL ES implementation on the G-930P?

看起来确实像...

On a Samsung G-930F - essentially the same phone, same Android version, etc. however with OpenGL ES 3.2 v1.r12p1-00dev0.60546d7cd0bfd82d0ba92ca3bb825c75,

往里看phone就不一样了。

第一个phone(版本 V@145.0)基于使用 Adreno GPU 的 Qualcomm Snapdradon,第二个 (12p1) 基于使用 Mali GPU 的三星 Exynos。

在我看来,这是 Adreno 设备驱动程序中的错误,Mali 的驱动程序正在正确处理它。