mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 17:10:11 +01:00
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:
parent
0898047e7b
commit
ce3dfa19ab
1 changed files with 14 additions and 0 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue