mesa/sso: Add gl_pipeline_object::InfoLog support

V2 (idr):
* Keep the behavior of other info logs in Mesa: and empty info log
  reports a GL_INFO_LOG_LENGTH of zero.
* Use a NULL pointer to denote an empty info log.
* Split out from previous uber patch.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Gregory Hainaut 2013-06-28 19:22:15 -07:00 committed by Ian Romanick
parent 658eaa3229
commit aa46ad26b1
2 changed files with 24 additions and 3 deletions

View file

@ -2807,6 +2807,8 @@ struct gl_pipeline_object
GLbitfield Flags; /**< Mask of GLSL_x flags */
GLboolean EverBound; /**< Has the pipeline object been created */
GLchar *InfoLog;
};
/**

View file

@ -80,6 +80,7 @@ _mesa_new_pipeline_object(struct gl_context *ctx, GLuint name)
mtx_init(&obj->Mutex, mtx_plain);
obj->RefCount = 1;
obj->Flags = _mesa_get_shader_flags();
obj->InfoLog = NULL;
}
return obj;
@ -572,9 +573,7 @@ _mesa_GetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params)
*params = pipe->ActiveProgram ? pipe->ActiveProgram->Name : 0;
return;
case GL_INFO_LOG_LENGTH:
/* FINISHME: Implement the info log.
*/
*params = 0;
*params = pipe->InfoLog ? strlen(pipe->InfoLog) + 1 : 0;
return;
case GL_VALIDATE_STATUS:
/* FINISHME: Implement validation status.
@ -621,4 +620,24 @@ void GLAPIENTRY
_mesa_GetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize,
GLsizei *length, GLchar *infoLog)
{
GET_CURRENT_CONTEXT(ctx);
struct gl_pipeline_object *pipe = lookup_pipeline_object(ctx, pipeline);
if (!pipe) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glGetProgramPipelineInfoLog(pipeline)");
return;
}
if (bufSize < 0) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glGetProgramPipelineInfoLog(bufSize)");
return;
}
if (pipe->InfoLog)
_mesa_copy_string(infoLog, bufSize, length, pipe->InfoLog);
else
*length = 0;
}