On 02/13/2015 02:21 AM, Eduardo Lima Mitev wrote: > Fixes 3 dEQP tests: > * dEQP-GLES3.functional.negative_api.state.get_program_info_log > * dEQP-GLES3.functional.negative_api.state.get_shader_info_log > * dEQP-GLES3.functional.negative_api.state.get_programiv > --- > src/mesa/main/shaderapi.c | 92 > +++++++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 86 insertions(+), 6 deletions(-) > > diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c > index 52eab46..01073ae 100644 > --- a/src/mesa/main/shaderapi.c > +++ b/src/mesa/main/shaderapi.c > @@ -546,7 +546,24 @@ get_programiv(struct gl_context *ctx, GLuint program, > GLenum pname, > || _mesa_is_gles3(ctx); > > if (!shProg) { > - _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramiv(program)"); > + /* Section 6.1.12 Shader and Program Queries, page 234 of the > + * OpenGL ES 3.0.4 spec states: > + * > + * "These commands will generate the error INVALID_VALUE if the > + * provided name is not the name of either a shader or program > object, > + * and INVALID_OPERATION if the provided name identifies an object > of > + * the other type." > + * > + * Also, Section 7.13. SHADER, PROGRAM, AND PROGRAM PIPELINE QUERIES, > + * page 161 of the OpenGL 4.5 spec states: > + * > + * "An INVALID_OPERATION error is generated if prgoram is the name > of a > + * shader object." > + */ > + if (_mesa_lookup_shader_err(ctx, program, "glGetProgramiv(program)")) { > + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetProgramiv(shader " > + "instead of program)");
You should go look at _mesa_lookup_shader_err. :) It already generates the correct error. Places that need to generate the INVALID_VALUE / INVALID_OPERATION for shader objects should use that instead of (ever) using _mesa_lookup_shader. See below... > + } > return; > } > > @@ -764,11 +781,42 @@ static void > get_program_info_log(struct gl_context *ctx, GLuint program, GLsizei bufSize, > GLsizei *length, GLchar *infoLog) > { > - struct gl_shader_program *shProg = _mesa_lookup_shader_program(ctx, > program); > + struct gl_shader_program *shProg; > + > + /* Section 2.5 GL Errors (page 18) of the OpenGL ES 3.0.4 spec and > + * section 2.3.1 (Errors) of the OpenGL 4.5 spec say: > + * > + * "If a negative number is provided where an argument of type sizei > or > + * sizeiptr is specified, an INVALID_VALUE error is generated." > + */ > + if (bufSize < 0) { > + _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramInfoLog(bufSize < 0)"); > + return; > + } > + > + shProg = _mesa_lookup_shader_program(ctx, program); > if (!shProg) { > - _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramInfoLog(program)"); > + /* Section 6.1.12 Shader and Program Queries, page 234 of the > + * OpenGL ES 3.0.4 spec states: > + * > + * "These commands will generate the error INVALID_VALUE if the > + * provided name is not the name of either a shader or program > object, > + * and INVALID_OPERATION if the provided name identifies an object > of > + * the other type." > + * > + * Also, Section 7.13. SHADER, PROGRAM, AND PROGRAM PIPELINE QUERIES, > + * page 161 of the OpenGL 4.5 spec states: > + * > + * "An INVALID_OPERATION error is generated if prgoram is the name > of a > + * shader object." > + */ > + if (_mesa_lookup_shader_err(ctx, program, "glGetProgramiv(program)")) { > + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetProgramiv(shader > instead " > + "of program)"); > + } The whole block above should just be: shProg = _mesa_lookup_shader_err(ctx, program) if (!shProg) return; > return; > } > + > _mesa_copy_string(infoLog, bufSize, length, shProg->InfoLog); > } > > @@ -777,11 +825,43 @@ static void > get_shader_info_log(struct gl_context *ctx, GLuint shader, GLsizei bufSize, > GLsizei *length, GLchar *infoLog) > { > - struct gl_shader *sh = _mesa_lookup_shader(ctx, shader); > - if (!sh) { > - _mesa_error(ctx, GL_INVALID_VALUE, "glGetShaderInfoLog(shader)"); > + struct gl_shader *sh; > + > + /* Section 2.5 GL Errors (page 18) of the OpenGL ES 3.0.4 spec and > + * section 2.3.1 (Errors) of the OpenGL 4.5 spec say: > + * > + * "If a negative number is provided where an argument of type sizei > or > + * sizeiptr is specified, an INVALID_VALUE error is generated." > + */ > + if (bufSize < 0) { > + _mesa_error(ctx, GL_INVALID_VALUE, "glGetShaderInfoLog(bufSize < 0)"); > return; > } > + > + sh = _mesa_lookup_shader(ctx, shader); > + if (!sh) { > + /* Section 6.1.12 Shader and Program Queries, page 234 of the > + * OpenGL ES 3.0.4 spec states: > + * > + * "These commands will generate the error INVALID_VALUE if the > + * provided name is not the name of either a shader or program > object, > + * and INVALID_OPERATION if the provided name identifies an object > of > + * the other type." > + * > + * Also, Section 7.13. SHADER, PROGRAM, AND PROGRAM PIPELINE QUERIES, > + * page 161 of the OpenGL 4.5 spec states: > + * > + * "An INVALID_OPERATION error is generated if shader is the name > of a > + * program object." > + */ > + if (_mesa_lookup_shader_program_err(ctx, shader, > + "glGetShaderInfoLog(shader)")) { > + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetShaderInfoLog(program " > + "instead of shader)"); > + } > + return; > + } > + > _mesa_copy_string(infoLog, bufSize, length, sh->InfoLog); > } > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev