summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/glsl/linker.cpp3
-rw-r--r--src/mesa/main/mtypes.h11
2 files changed, 13 insertions, 1 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 42075cbbe09..a7c38a3426a 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -1805,7 +1805,8 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
* present in a linked program. By checking for use of shading language
* version 1.00, we also catch the GL_ARB_ES2_compatibility case.
*/
- if (ctx->API == API_OPENGLES2 || prog->Version == 100) {
+ if (!prog->InternalSeparateShader &&
+ (ctx->API == API_OPENGLES2 || prog->Version == 100)) {
if (prog->_LinkedShaders[MESA_SHADER_VERTEX] == NULL) {
linker_error(prog, "program lacks a vertex shader\n");
} else if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) {
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index a7d1cb2b111..17c645a7ee5 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2135,6 +2135,17 @@ struct gl_shader_program
GLint RefCount; /**< Reference count */
GLboolean DeletePending;
+ /**
+ * Flags that the linker should not reject the program if it lacks
+ * a vertex or fragment shader. GLES2 doesn't allow separate
+ * shader objects, and would reject them. However, we internally
+ * build separate shader objects for fixed function programs, which
+ * we use for drivers/common/meta.c and for handling
+ * _mesa_update_state with no program bound (for example in
+ * glClear()).
+ */
+ GLboolean InternalSeparateShader;
+
GLuint NumShaders; /**< number of attached shaders */
struct gl_shader **Shaders; /**< List of attached the shaders */