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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user