mesa/sso: Implement _mesa_GetProgramPipelineiv
This was originally included in another patch, but it was split out by Ian Romanick. v2 (idr): * Trivial reformatting. * Remove GL_COMPUTE_SHADER. Compute shaders don't participate in pipeline objects anyway. Suggested by Matt Turner. v3 (idr): * Use _mesa_has_geometry_shaders. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
committed by
Ian Romanick
parent
c171834b49
commit
4719ad79ec
@@ -370,6 +370,64 @@ _mesa_IsProgramPipeline(GLuint pipeline)
|
||||
void GLAPIENTRY
|
||||
_mesa_GetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
struct gl_pipeline_object *pipe = lookup_pipeline_object(ctx, pipeline);
|
||||
|
||||
/* Are geometry shaders available in this context?
|
||||
*/
|
||||
const bool has_gs = _mesa_has_geometry_shaders(ctx);
|
||||
|
||||
if (!pipe) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGetProgramPipelineiv(pipeline)");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Object is created by any Pipeline call but glGenProgramPipelines,
|
||||
* glIsProgramPipeline and GetProgramPipelineInfoLog
|
||||
*/
|
||||
pipe->EverBound = GL_TRUE;
|
||||
|
||||
switch (pname) {
|
||||
case GL_ACTIVE_PROGRAM:
|
||||
*params = pipe->ActiveProgram ? pipe->ActiveProgram->Name : 0;
|
||||
return;
|
||||
case GL_INFO_LOG_LENGTH:
|
||||
/* FINISHME: Implement the info log.
|
||||
*/
|
||||
*params = 0;
|
||||
return;
|
||||
case GL_VALIDATE_STATUS:
|
||||
/* FINISHME: Implement validation status.
|
||||
*/
|
||||
*params = 0;
|
||||
return;
|
||||
case GL_VERTEX_SHADER:
|
||||
*params = pipe->CurrentProgram[MESA_SHADER_VERTEX]
|
||||
? pipe->CurrentProgram[MESA_SHADER_VERTEX]->Name : 0;
|
||||
return;
|
||||
case GL_TESS_EVALUATION_SHADER:
|
||||
/* NOT YET SUPPORTED */
|
||||
break;
|
||||
case GL_TESS_CONTROL_SHADER:
|
||||
/* NOT YET SUPPORTED */
|
||||
break;
|
||||
case GL_GEOMETRY_SHADER:
|
||||
if (!has_gs)
|
||||
break;
|
||||
*params = pipe->CurrentProgram[MESA_SHADER_GEOMETRY]
|
||||
? pipe->CurrentProgram[MESA_SHADER_GEOMETRY]->Name : 0;
|
||||
return;
|
||||
case GL_FRAGMENT_SHADER:
|
||||
*params = pipe->CurrentProgram[MESA_SHADER_FRAGMENT]
|
||||
? pipe->CurrentProgram[MESA_SHADER_FRAGMENT]->Name : 0;
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramPipelineiv(pname=%s)",
|
||||
_mesa_lookup_enum_by_nr(pname));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user