Bug 1399501 - Part1: Use SH_GLSL_COMPATIBILITY_OUTPUT for OpenGL version less than 3.2
MozReview-Commit-ID: 7e71pyQAbNt
--- a/dom/canvas/WebGLShaderValidator.cpp
+++ b/dom/canvas/WebGLShaderValidator.cpp
@@ -100,22 +100,28 @@ ChooseValidatorCompileOptions(const ShBu
static ShShaderOutput
ShaderOutput(gl::GLContext* gl)
{
if (gl->IsGLES()) {
return SH_ESSL_OUTPUT;
} else {
uint32_t version = gl->ShadingLanguageVersion();
+ // We need to support sampler arrays indexed with non-constant expressions,
+ // however, only GLSL 4.0 or newer or GLSL with gpu_shader5 extension enabled
+ // support it, so we pass SH_GLSL_COMPATIBILITY_OUTPUT to ANGLE if our OpenGL
+ // version is older than 3.2 in order to make sure gpu_shader5 is enabled
+ // properly in ANGLE.
switch (version) {
- case 100: return SH_GLSL_COMPATIBILITY_OUTPUT;
- case 120: return SH_GLSL_COMPATIBILITY_OUTPUT;
- case 130: return SH_GLSL_130_OUTPUT;
- case 140: return SH_GLSL_140_OUTPUT;
- case 150: return SH_GLSL_150_CORE_OUTPUT;
+ case 100:
+ case 120:
+ case 130:
+ case 140:
+ case 150: return SH_GLSL_COMPATIBILITY_OUTPUT;
+ case 320: return SH_GLSL_150_CORE_OUTPUT;
case 330: return SH_GLSL_330_CORE_OUTPUT;
case 400: return SH_GLSL_400_CORE_OUTPUT;
case 410: return SH_GLSL_410_CORE_OUTPUT;
case 420: return SH_GLSL_420_CORE_OUTPUT;
case 430: return SH_GLSL_430_CORE_OUTPUT;
case 440: return SH_GLSL_440_CORE_OUTPUT;
case 450: return SH_GLSL_450_CORE_OUTPUT;
default: