shaderapi: Fix AttachShader error

Detect a duplicate Shader type as and error instead of silently allowing
it, restrict to ES2 API.

v2: Tapani Pälli <tapani.palli@intel.com>
    - make the check run time instead of compile time

v3: chadv
    - Quote spec on which error to generate.

Signed-off-by: bma <Bo.Ma@windriver.com>
Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-and-tested-by: Chad Versace <chad.versace@linux.intel.com>
This commit is contained in:
bma 2013-02-12 08:42:36 +02:00 committed by Chad Versace
parent 0898047e7b
commit ce3dfa19ab

View file

@ -207,6 +207,8 @@ attach_shader(struct gl_context *ctx, GLuint program, GLuint shader)
struct gl_shader *sh;
GLuint i, n;
const bool same_type_disallowed = _mesa_is_gles(ctx);
shProg = _mesa_lookup_shader_program_err(ctx, program, "glAttachShader");
if (!shProg)
return;
@ -227,6 +229,18 @@ attach_shader(struct gl_context *ctx, GLuint program, GLuint shader)
*/
_mesa_error(ctx, GL_INVALID_OPERATION, "glAttachShader");
return;
} else if (same_type_disallowed &&
shProg->Shaders[i]->Type == sh->Type) {
/* Shader with the same type is already attached to this program,
* OpenGL ES 2.0 and 3.0 specs say:
*
* "Multiple shader objects of the same type may not be attached
* to a single program object. [...] The error INVALID_OPERATION
* is generated if [...] another shader object of the same type
* as shader is already attached to program."
*/
_mesa_error(ctx, GL_INVALID_OPERATION, "glAttachShader");
return;
}
}