On Wed, 2015-06-17 at 23:02 -0400, Ilia Mirkin wrote: > This was apparently missed when KHR_debug or ARB_sso support was added.
SSO was still missing when I added KHR_debug, but this should have been picked up by the object label piglit test I wrote. However the test was broken, it failed to fail :( I've sent a patch to fix this: http://lists.freedesktop.org/archives/piglit/2015-June/016281.html Your patch looks good to me and passes the fix piglit test. Reviewed-by: Timothy Arceri <t_arc...@yahoo.com.au> > Add label support to pipeline objects just like all the other > debug-related objects. > > Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> > Cc: "10.5 10.6" <mesa-sta...@lists.freedesktop.org> > --- > src/mesa/main/mtypes.h | 2 ++ > src/mesa/main/objectlabel.c | 10 ++++++++-- > src/mesa/main/pipelineobj.c | 21 +++++++++++---------- > src/mesa/main/pipelineobj.h | 3 +++ > 4 files changed, 24 insertions(+), 12 deletions(-) > > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index ffa7f0c..983b9dc 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -2815,6 +2815,8 @@ struct gl_pipeline_object > > mtx_t Mutex; > > + GLchar *Label; /**< GL_KHR_debug */ > + > /** > * Programs used for rendering > * > diff --git a/src/mesa/main/objectlabel.c b/src/mesa/main/objectlabel.c > index aecb5b1..5626054 100644 > --- a/src/mesa/main/objectlabel.c > +++ b/src/mesa/main/objectlabel.c > @@ -30,6 +30,7 @@ > #include "enums.h" > #include "fbobject.h" > #include "objectlabel.h" > +#include "pipelineobj.h" > #include "queryobj.h" > #include "samplerobj.h" > #include "shaderobj.h" > @@ -214,8 +215,13 @@ get_label_pointer(struct gl_context *ctx, GLenum > identifier, GLuint name, > } > break; > case GL_PROGRAM_PIPELINE: > - /* requires GL 4.2 */ > - goto invalid_enum; > + { > + struct gl_pipeline_object *pipe = > + _mesa_lookup_pipeline_object(ctx, name); > + if (pipe) > + labelPtr = &pipe->Label; > + } > + break; > default: > goto invalid_enum; > } > diff --git a/src/mesa/main/pipelineobj.c b/src/mesa/main/pipelineobj.c > index b4795ff..279ae20 100644 > --- a/src/mesa/main/pipelineobj.c > +++ b/src/mesa/main/pipelineobj.c > @@ -65,6 +65,7 @@ _mesa_delete_pipeline_object(struct gl_context *ctx, > > _mesa_reference_shader_program(ctx, &obj->ActiveProgram, NULL); > mtx_destroy(&obj->Mutex); > + free(obj->Label); > ralloc_free(obj); > } > > @@ -136,8 +137,8 @@ _mesa_free_pipeline_data(struct gl_context *ctx) > * a non-existent ID. The spec defines ID 0 as being technically > * non-existent. > */ > -static inline struct gl_pipeline_object * > -lookup_pipeline_object(struct gl_context *ctx, GLuint id) > +struct gl_pipeline_object * > +_mesa_lookup_pipeline_object(struct gl_context *ctx, GLuint id) > { > if (id == 0) > return NULL; > @@ -225,7 +226,7 @@ _mesa_UseProgramStages(GLuint pipeline, GLbitfield > stages, GLuint program) > { > GET_CURRENT_CONTEXT(ctx); > > - struct gl_pipeline_object *pipe = lookup_pipeline_object(ctx, pipeline); > + struct gl_pipeline_object *pipe = _mesa_lookup_pipeline_object(ctx, > pipeline); > struct gl_shader_program *shProg = NULL; > GLbitfield any_valid_stages; > > @@ -337,7 +338,7 @@ _mesa_ActiveShaderProgram(GLuint pipeline, GLuint program) > { > GET_CURRENT_CONTEXT(ctx); > struct gl_shader_program *shProg = NULL; > - struct gl_pipeline_object *pipe = lookup_pipeline_object(ctx, pipeline); > + struct gl_pipeline_object *pipe = _mesa_lookup_pipeline_object(ctx, > pipeline); > > if (program != 0) { > shProg = _mesa_lookup_shader_program_err(ctx, program, > @@ -399,7 +400,7 @@ _mesa_BindProgramPipeline(GLuint pipeline) > */ > if (pipeline) { > /* non-default pipeline object */ > - newObj = lookup_pipeline_object(ctx, pipeline); > + newObj = _mesa_lookup_pipeline_object(ctx, pipeline); > if (!newObj) { > _mesa_error(ctx, GL_INVALID_OPERATION, > "glBindProgramPipeline(non-gen name)"); > @@ -468,7 +469,7 @@ _mesa_DeleteProgramPipelines(GLsizei n, const GLuint > *pipelines) > > for (i = 0; i < n; i++) { > struct gl_pipeline_object *obj = > - lookup_pipeline_object(ctx, pipelines[i]); > + _mesa_lookup_pipeline_object(ctx, pipelines[i]); > > if (obj) { > assert(obj->Name == pipelines[i]); > @@ -568,7 +569,7 @@ _mesa_IsProgramPipeline(GLuint pipeline) > { > GET_CURRENT_CONTEXT(ctx); > > - struct gl_pipeline_object *obj = lookup_pipeline_object(ctx, pipeline); > + struct gl_pipeline_object *obj = _mesa_lookup_pipeline_object(ctx, > pipeline); > if (obj == NULL) > return GL_FALSE; > > @@ -582,7 +583,7 @@ void GLAPIENTRY > _mesa_GetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params) > { > GET_CURRENT_CONTEXT(ctx); > - struct gl_pipeline_object *pipe = lookup_pipeline_object(ctx, pipeline); > + struct gl_pipeline_object *pipe = _mesa_lookup_pipeline_object(ctx, > pipeline); > > /* Are geometry shaders available in this context? > */ > @@ -841,7 +842,7 @@ _mesa_ValidateProgramPipeline(GLuint pipeline) > { > GET_CURRENT_CONTEXT(ctx); > > - struct gl_pipeline_object *pipe = lookup_pipeline_object(ctx, pipeline); > + struct gl_pipeline_object *pipe = _mesa_lookup_pipeline_object(ctx, > pipeline); > > if (!pipe) { > _mesa_error(ctx, GL_INVALID_OPERATION, > @@ -859,7 +860,7 @@ _mesa_GetProgramPipelineInfoLog(GLuint pipeline, GLsizei > bufSize, > { > GET_CURRENT_CONTEXT(ctx); > > - struct gl_pipeline_object *pipe = lookup_pipeline_object(ctx, pipeline); > + struct gl_pipeline_object *pipe = _mesa_lookup_pipeline_object(ctx, > pipeline); > > if (!pipe) { > _mesa_error(ctx, GL_INVALID_VALUE, > diff --git a/src/mesa/main/pipelineobj.h b/src/mesa/main/pipelineobj.h > index b57bcb9..6dee775 100644 > --- a/src/mesa/main/pipelineobj.h > +++ b/src/mesa/main/pipelineobj.h > @@ -45,6 +45,9 @@ _mesa_init_pipeline(struct gl_context *ctx); > extern void > _mesa_free_pipeline_data(struct gl_context *ctx); > > +extern struct gl_pipeline_object * > +_mesa_lookup_pipeline_object(struct gl_context *ctx, GLuint id); > + > extern void > _mesa_reference_pipeline_object_(struct gl_context *ctx, > struct gl_pipeline_object **ptr, _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev