mesa: additional error checking, fix error codes

This commit is contained in:
Brian Paul
2008-07-03 13:49:48 -06:00
parent d866cb3712
commit 7acb7c1ac0
+36 -20
View File
@@ -360,6 +360,22 @@ copy_string(GLchar *dst, GLsizei maxLength, GLsizei *length, const GLchar *src)
}
static GLboolean
_mesa_is_program(GLcontext *ctx, GLuint name)
{
struct gl_shader_program *shProg = _mesa_lookup_shader_program(ctx, name);
return shProg ? GL_TRUE : GL_FALSE;
}
static GLboolean
_mesa_is_shader(GLcontext *ctx, GLuint name)
{
struct gl_shader *shader = _mesa_lookup_shader(ctx, name);
return shader ? GL_TRUE : GL_FALSE;
}
/**
* Called via ctx->Driver.AttachShader()
*/
@@ -372,12 +388,21 @@ _mesa_attach_shader(GLcontext *ctx, GLuint program, GLuint shader)
GLuint n;
GLuint i;
if (!shProg || !sh) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glAttachShader(bad program or shader name)");
if (!shProg) {
GLenum err = _mesa_is_shader(ctx, program)
? GL_INVALID_OPERATION : GL_INVALID_VALUE;
_mesa_error(ctx, err, "glAttachShader(bad program or shader name)");
return;
}
if (!sh) {
GLenum err = _mesa_is_program(ctx, shader)
? GL_INVALID_OPERATION : GL_INVALID_VALUE;
_mesa_error(ctx, err, "glAttachShader(bad program or shader name)");
return;
}
n = shProg->NumShaders;
for (i = 0; i < n; i++) {
@@ -445,7 +470,9 @@ _mesa_bind_attrib_location(GLcontext *ctx, GLuint program, GLuint index,
GLint i, oldIndex;
if (!shProg) {
_mesa_error(ctx, GL_INVALID_VALUE, "glBindAttribLocation(program)");
GLenum err = _mesa_is_shader(ctx, program)
? GL_INVALID_OPERATION : GL_INVALID_VALUE;
_mesa_error(ctx, err, "glBindAttribLocation(program)");
return;
}
@@ -458,6 +485,11 @@ _mesa_bind_attrib_location(GLcontext *ctx, GLuint program, GLuint index,
return;
}
if (index >= ctx->Const.VertexProgram.MaxAttribs) {
_mesa_error(ctx, GL_INVALID_VALUE, "glBindAttribLocation(index)");
return;
}
if (shProg->LinkStatus) {
/* get current index/location for the attribute */
oldIndex = _mesa_get_attrib_location(ctx, program, name);
@@ -946,22 +978,6 @@ _mesa_get_uniform_location(GLcontext *ctx, GLuint program, const GLchar *name)
}
static GLboolean
_mesa_is_program(GLcontext *ctx, GLuint name)
{
struct gl_shader_program *shProg = _mesa_lookup_shader_program(ctx, name);
return shProg ? GL_TRUE : GL_FALSE;
}
static GLboolean
_mesa_is_shader(GLcontext *ctx, GLuint name)
{
struct gl_shader *shader = _mesa_lookup_shader(ctx, name);
return shader ? GL_TRUE : GL_FALSE;
}
/**
* Called via ctx->Driver.ShaderSource()