Bug 1399501 - Part1: Use SH_GLSL_COMPATIBILITY_OUTPUT for OpenGL version less than 3.2 draft
authorChih-Yi Leu <subsevenx2001@gmail.com>
Thu, 28 Sep 2017 11:26:37 +0800
changeset 675495 08207d897ea18b5930675a0c105f200c24fefc1c
parent 675302 aa40f93369300af2aed79741293511c0263a8f33
child 675496 455ae1d65bb4102c56d025545c62ed813cc75a0b
push id83134
push userbmo:cleu@mozilla.com
push dateThu, 05 Oct 2017 09:50:57 +0000
bugs1399501
milestone58.0a1
Bug 1399501 - Part1: Use SH_GLSL_COMPATIBILITY_OUTPUT for OpenGL version less than 3.2 MozReview-Commit-ID: 7e71pyQAbNt
dom/canvas/WebGLShaderValidator.cpp
--- 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: