[Mesa-dev] [PATCH 10/12] sso: update glGet: GL_PROGRAM_PIPELINE_BINDING

gregory hainaut gregory.hainaut at gmail.com
Fri May 24 13:17:19 PDT 2013


On Sat, 4 May 2013 11:35:22 +0200
gregory hainaut <gregory.hainaut at gmail.com> wrote:

> On Fri, 3 May 2013 12:04:48 -0700
> Matt Turner <mattst88 at gmail.com> wrote:
> 
> > On Fri, May 3, 2013 at 10:44 AM, Gregory Hainaut
> > <gregory.hainaut at gmail.com> wrote:
> > > ---
> > >  src/mesa/main/get.c              |    9 +++++++++
> > >  src/mesa/main/get_hash_params.py |    3 +++
> > >  2 files changed, 12 insertions(+)
> > >
> > > diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
> > > index 54159c0..6cbb7db 100644
> > > --- a/src/mesa/main/get.c
> > > +++ b/src/mesa/main/get.c
> > > @@ -369,6 +369,7 @@ EXTRA_EXT(ARB_map_buffer_alignment);
> > >  EXTRA_EXT(ARB_texture_cube_map_array);
> > >  EXTRA_EXT(ARB_texture_buffer_range);
> > >  EXTRA_EXT(ARB_texture_multisample);
> > > +EXTRA_EXT(ARB_separate_shader_objects);
> > >
> > >  static const int
> > >  extra_ARB_color_buffer_float_or_glcore[] = {
> > > @@ -889,6 +890,14 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
> > >           _mesa_problem(ctx, "driver doesn't implement GetTimestamp");
> > >        }
> > >        break;
> > > +   /* GL_ARB_separate_shader_objects */
> > > +   case GL_PROGRAM_PIPELINE_BINDING:
> > > +      if (ctx->Pipeline.Current) {
> > > +         v->value_int = ctx->Pipeline.Current->Name;
> > > +      } else {
> > > +         v->value_int = 0;
> > > +      }
> > > +      break;
> > >     }
> > >  }
> > 
> > This looks believable, but I can't find a description in the extension
> > spec or GL 4.1+ specs that say precisely what this query is supposed
> > to do. Looks like it's just mentioned in the extension spec, and not
> > at all in GL 4.1+ specs.
> 
> 
> Yes you're right that strange. There is also a couple of line in glGet man page.
> 
> GL_PROGRAM_PIPELINE_BINDING
>               
>                         params a single value, the name of the currently bound program pipeline
>                         object, or zero if no program pipeline object is bound.
>                         See glBindProgramPipeline.
>                     
> Both Nvidia and AMD support this query. I did a quick update on my piglit test, on the AMD side:
> * UseProgram(2)
> * BindPipeline(5) (the pipeline isn't really bound because UseProgram got an higher priority)
> * Get GL_PROGRAM_PIPELINE_BINDING => 5
> 
> I will try to check the behavior on Nvidia implementation.

Nvidia implementation "is" this one:
      if (ctx->_Shader) {
         v->value_int = ctx->_Shader->Name;
      } else {
         v->value_int = 0;
      }

So on my previous example
* UseProgram(2)
* BindPipeline(5)
* Get GL_PROGRAM_PIPELINE_BINDING => 0

There is no spec but the SSO spec was written by Nvidia so I would say that Nvidia is correct.

> > > diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
> > > index 2b97da6..43a11cf 100644
> > > --- a/src/mesa/main/get_hash_params.py
> > > +++ b/src/mesa/main/get_hash_params.py
> > > @@ -709,6 +709,9 @@ descriptor=[
> > >
> > >  # GL_ARB_texture_cube_map_array
> > >    [ "TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB", "LOC_CUSTOM, TYPE_INT, TEXTURE_CUBE_ARRAY_INDEX, extra_ARB_texture_cube_map_array" ],
> > > +
> > > +# GL_ARB_separate_shader_objects
> > > +  [ "PROGRAM_PIPELINE_BINDING", "LOC_CUSTOM, TYPE_INT, GL_PROGRAM_PIPELINE_BINDING, extra_ARB_separate_shader_objects" ],
> > >  ]},
> > >
> > >  # Enums restricted to OpenGL Core profile
> > > --
> > > 1.7.10.4
> > >
> > > _______________________________________________
> > > mesa-dev mailing list
> > > mesa-dev at lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list