[Mesa-dev] [PATCH 2/2] glsl: allow linking ES shaders with desktop shaders in desktop GL

Timothy Arceri tarceri at itsqueeze.com
Wed May 16 07:04:29 UTC 2018


In GLES shader versions must match but there is nothing
in the ARB_ES*_compatibility specs that say they must match.

This fixes some compilation errors in Google Earth VR.
---
 src/compiler/glsl/linker.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index f060c5316fa..2b7ee0ad5a6 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -83,6 +83,7 @@
 #include "builtin_functions.h"
 #include "shader_cache.h"
 
+#include "main/context.h"
 #include "main/imports.h"
 #include "main/shaderobj.h"
 #include "main/enums.h"
@@ -4799,7 +4800,8 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
       min_version = MIN2(min_version, prog->Shaders[i]->Version);
       max_version = MAX2(max_version, prog->Shaders[i]->Version);
 
-      if (prog->Shaders[i]->IsES != prog->Shaders[0]->IsES) {
+      if (!_mesa_is_desktop_gl(ctx) &&
+          prog->Shaders[i]->IsES != prog->Shaders[0]->IsES) {
          linker_error(prog, "all shaders must use same shading "
                       "language version\n");
          goto done;
@@ -4817,7 +4819,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
    /* In desktop GLSL, different shader versions may be linked together.  In
     * GLSL ES, all shader versions must be the same.
     */
-   if (prog->Shaders[0]->IsES && min_version != max_version) {
+   if (!_mesa_is_desktop_gl(ctx) && min_version != max_version) {
       linker_error(prog, "all shaders must use same shading "
                    "language version\n");
       goto done;
-- 
2.17.0



More information about the mesa-dev mailing list