[Mesa-dev] [PATCH] mesa: add GL_PROGRAM_PIPELINE support in KHR_debug calls
Timothy Arceri
t_arceri at yahoo.com.au
Thu Jun 18 04:02:41 PDT 2015
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_arceri at yahoo.com.au>
> Add label support to pipeline objects just like all the other
> debug-related objects.
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> Cc: "10.5 10.6" <mesa-stable at 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,
More information about the mesa-dev
mailing list