Search code examples
androidopengl-esglslglsles

Compile-time failure when reading texels from samplerExternalOES


Minimal failing fragment shader:

#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() {
}

On a Samsung G-930P, with OpenGL ES 3.2 V@145.0 (GIT@I5bc0f577f9), this fails to compile, with the shader log reading:

Internal compiler error: Error: array indexing out of boundary

On a Samsung G-930F - essentially the same phone, same Android version, etc. however with OpenGL ES 3.2 v1.r12p1-00dev0.60546d7cd0bfd82d0ba92ca3bb825c75, it compiles - and the latter device can correctly execute more complex shaders which read texels from samplerExternalOES.

Is this a bug in the OpenGL ES implementation on the G-930P? Is this an unreasonable way to specify the parameters of a function which wants to call texture on a samplerExternalOES?


Solution

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

    It sure looks like it ...

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

    It's not the same if you look inside the phone.

    The first phone (with version V@145.0) is based on a Qualcomm Snapdradon which uses an Adreno GPU, the second (12p1) is based on Samsung Exynos which uses a Mali GPU.

    To me it looks like this is bug in the Adreno device driver, and Mali's driver is handling it correctly.