[Mesa-dev] [PATCH] mesa: fix glGetActiveUniformsiv regression

Ilia Mirkin imirkin at alum.mit.edu
Thu Apr 23 05:33:16 PDT 2015


On Thu, Apr 23, 2015 at 7:34 AM, Martin Peres
<martin.peres at linux.intel.com> wrote:
> On 23/04/15 14:19, Tapani Pälli wrote:
>>
>> Commit 7519ddb caused regression to glGetActiveUniformsiv.
>> Patch adds back validation loop of all given uniforms before
>> writing any values, not touching params in case of errors
>> is tested by the conformance suite.
>>
>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90149
>
>
> Not good for performance, but this is not too sensitive and we are just
> following the spec.

If you cared about performance, you could store the results from the
first loop and use them in the second one. Either with a malloc or
alloca, but that's not the end of the world.

>
> Reviewed-by: Martin Peres <martin.peres at linux.intel.com>
>
>> ---
>>   src/mesa/main/uniform_query.cpp | 20 ++++++++++++++++----
>>   1 file changed, 16 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/mesa/main/uniform_query.cpp
>> b/src/mesa/main/uniform_query.cpp
>> index 4e77b32..3e857ed 100644
>> --- a/src/mesa/main/uniform_query.cpp
>> +++ b/src/mesa/main/uniform_query.cpp
>> @@ -129,14 +129,26 @@ _mesa_GetActiveUniformsiv(GLuint program,
>>        res_prop = resource_prop_from_uniform_prop(pname);
>>   +   /* We need to first verify that each entry exists as active uniform.
>> If
>> +    * not, generate error and do not cause any other side effects.
>> +    *
>> +    * In the case of and error condition, Page 16 (section 2.3.1 Errors)
>> +    * of the OpenGL 4.5 spec says:
>> +    *
>> +    *     "If the generating command modifies values through a pointer
>> argu-
>> +    *     ment, no change is made to these values."
>> +    */
>>      for (int i = 0; i < uniformCount; i++) {
>> -      res = _mesa_program_resource_find_index(shProg, GL_UNIFORM,
>> -                                              uniformIndices[i]);
>> -      if (!res) {
>> +      if (!_mesa_program_resource_find_index(shProg, GL_UNIFORM,
>> +                                              uniformIndices[i])) {
>>            _mesa_error(ctx, GL_INVALID_VALUE,
>> "glGetActiveUniformsiv(index)");
>> -         break;
>> +         return;
>>         }
>> +   }
>>   +   for (int i = 0; i < uniformCount; i++) {
>> +      res = _mesa_program_resource_find_index(shProg, GL_UNIFORM,
>> +                                              uniformIndices[i]);
>>         if (!_mesa_program_resource_prop(shProg, res, uniformIndices[i],
>>                                          res_prop, &params[i],
>>                                          "glGetActiveUniformsiv"))
>
>
> _______________________________________________
> 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