[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, ¶ms[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