[Mesa-dev] [PATCH] mesa: fix ARRAY_SIZE query for GetProgramResourceiv

Tapani Pälli tapani.palli at intel.com
Tue Sep 29 04:11:48 PDT 2015



On 09/29/2015 01:42 PM, Emil Velikov wrote:
> Hi guys,
>
> On 29 September 2015 at 10:30, Martin Peres
> <martin.peres at linux.intel.com> wrote:
>> On 28/09/15 13:51, Tapani Pälli wrote:
>>>
>>> Patch also refactors name length queries which were using array size
>>> in computation, this has to be done in same time to avoid regression in
>>> arb_program_interface_query-resource-query Piglit test.
>>>
>>> Fixes rest of the failures with
>>>      ES31-CTS.program_interface_query.no-locations
>>>
>>> v2: make additional check only for GS inputs
>>> v3: create helper function for resource name length
>>>       so that it gets calculated only in one place
>>>
>>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>>> Reviewed-by: Martin Peres <martin.peres at linux.intel.com> [v2]
>>> ---
>>>    src/mesa/main/program_resource.c |  8 ++--
>>>    src/mesa/main/shader_query.cpp   | 94
>>> ++++++++++++++++++++++++----------------
>>>    src/mesa/main/shaderapi.h        |  3 ++
>>>    3 files changed, 62 insertions(+), 43 deletions(-)
>>>
>>> diff --git a/src/mesa/main/program_resource.c
>>> b/src/mesa/main/program_resource.c
>>> index c609abe..eb71fdd 100644
>>> --- a/src/mesa/main/program_resource.c
>>> +++ b/src/mesa/main/program_resource.c
>>> @@ -111,11 +111,9 @@ _mesa_GetProgramInterfaceiv(GLuint program, GLenum
>>> programInterface,
>>>          for (i = 0, *params = 0; i < shProg->NumProgramResourceList; i++)
>>> {
>>>             if (shProg->ProgramResourceList[i].Type != programInterface)
>>>                continue;
>>> -         const char *name =
>>> -            _mesa_program_resource_name(&shProg->ProgramResourceList[i]);
>>> -         unsigned array_size =
>>> -
>>> _mesa_program_resource_array_size(&shProg->ProgramResourceList[i]);
>>> -         *params = MAX2(*params, strlen(name) + (array_size ? 3 : 0) +
>>> 1);
>>> +         unsigned len =
>>> +
>>> _mesa_program_resource_name_len(&shProg->ProgramResourceList[i]);
>>> +         *params = MAX2(*params, len + 1);
>>>          }
>>>          break;
>>>       case GL_MAX_NUM_ACTIVE_VARIABLES:
>>> diff --git a/src/mesa/main/shader_query.cpp
>>> b/src/mesa/main/shader_query.cpp
>>> index 99d9e10..a5572ff 100644
>>> --- a/src/mesa/main/shader_query.cpp
>>> +++ b/src/mesa/main/shader_query.cpp
>>> @@ -478,7 +478,7 @@ _mesa_program_resource_array_size(struct
>>> gl_program_resource *res)
>>>                 RESOURCE_XFB(res)->Size : 0;
>>>       case GL_PROGRAM_INPUT:
>>>       case GL_PROGRAM_OUTPUT:
>>> -      return RESOURCE_VAR(res)->data.max_array_access;
>>> +      return RESOURCE_VAR(res)->type->length;
>>>       case GL_UNIFORM:
>>>       case GL_VERTEX_SUBROUTINE_UNIFORM:
>>>       case GL_GEOMETRY_SUBROUTINE_UNIFORM:
>>> @@ -670,6 +670,57 @@ _mesa_program_resource_find_index(struct
>>> gl_shader_program *shProg,
>>>       return NULL;
>>>    }
>>>    +/* Function returns if resource name is expected to have index
>>> + * appended into it.
>>> + *
>>> + *
>>> + * Page 61 (page 73 of the PDF) in section 2.11 of the OpenGL ES 3.0
>>> + * spec says:
>>> + *
>>> + *     "If the active uniform is an array, the uniform name returned in
>>> + *     name will always be the name of the uniform array appended with
>>> + *     "[0]"."
>>> + *
>>> + * The same text also appears in the OpenGL 4.2 spec.  It does not,
>>> + * however, appear in any previous spec.  Previous specifications are
>>> + * ambiguous in this regard.  However, either name can later be passed
>>> + * to glGetUniformLocation (and related APIs), so there shouldn't be any
>>> + * harm in always appending "[0]" to uniform array names.
>>> + *
>>> + * Geometry shader stage has different naming convention where the
>>> 'normal'
>>> + * condition is an array, therefore for variables referenced in geometry
>>> + * stage we do not add '[0]'.
>>> + *
>>> + * Note, that TCS outputs and TES inputs should not have index appended
>>> + * either.
>>> + */
>>> +bool
>>> +add_index_to_name(struct gl_program_resource *res)
>>
>> static please!
>>
>> With this, you get:
>> Reviewed-by: Martin Peres <martin.peres at linux.intel.com>
>>
>> Thanks for the cleanup!
>>
> Would this be mesa-stable worthy material ?

We haven't had bugs filed for this but I guess it's just matter of time. 
Yes please!

// Tapani


More information about the mesa-dev mailing list