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

Ian Romanick idr at freedesktop.org
Tue May 28 13:03:37 PDT 2013


On 05/24/2013 01:17 PM, gregory hainaut wrote:
> 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.

Ugh!  I'll submit a spec bug. :(

>>>> 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
> _______________________________________________
> 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