mesa: Add a flag for shader programs to allow SSO linkage in GLES2.

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.
This commit is contained in:
Eric Anholt
2011-07-22 12:57:47 -07:00
parent f868cb0963
commit 57f7978b1d
2 changed files with 13 additions and 1 deletions

View File

@@ -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) {

View File

@@ -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 */