On converting fixed function programs to generate GLSL, the linker
became cranky that we were trying to make something that wasn't a
linked vertex+fragment program. Given that the Mesa GLES2 drivers
also support desktop GL with EXT_sso, just telling the linker to shut
up seems like the easiest solution.
* 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) {
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 */