[Mesa-dev] [PATCH 1/3] glsl: skip buffer variables when filling UniformRemapTable

Tapani Pälli tapani.palli at intel.com
Tue Oct 20 03:24:56 PDT 2015



On 10/20/2015 01:11 PM, Lofstedt, Marta wrote:
>
> If you also remove the uniforms[i].array_elements in the same manner, the assert in:
> ES31-CTS.explicit_uniform_location.uniform-loc-arrays-of-arrays
> Is also avoided.

Are you referring to one of the loops iterating uniforms in this same 
place the patch is touching?

For me it looks like the problem with arrays-of-arrays test is that it 
will assign overlapping locations currently for uniforms if we have 
'arrays of arrays' situation going on.

For example with

layout(location = 0) uniform float uni[2][2]

uni[0] gets location 0, but uni[1] has gets location 0 too. I haven't 
quite figured out yet where the issue is but the location counter gets 
reset for each array item and starts again from 0 while it should 
actually maintain its count ..


>> -----Original Message-----
>> From: mesa-dev [mailto:mesa-dev-bounces at lists.freedesktop.org] On
>> Behalf Of Tapani Pälli
>> Sent: Tuesday, October 20, 2015 11:24 AM
>> To: mesa-dev at lists.freedesktop.org
>> Subject: [Mesa-dev] [PATCH 1/3] glsl: skip buffer variables when filling
>> UniformRemapTable
>>
>> UniformRemapTable is used only for remapping user specified uniform
>> locations to driver internally used ones, shader storage buffer variables
>> should not utilize uniform locations.
>>
>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>> ---
>>   src/glsl/link_uniforms.cpp | 7 +++++--
>>   1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp index
>> fe00aa3..f7b87a1 100644
>> --- a/src/glsl/link_uniforms.cpp
>> +++ b/src/glsl/link_uniforms.cpp
>> @@ -1180,7 +1180,8 @@ link_assign_uniform_locations(struct
>> gl_shader_program *prog,
>>
>>      /* Reserve all the explicit locations of the active uniforms. */
>>      for (unsigned i = 0; i < num_uniforms; i++) {
>> -      if (uniforms[i].type->is_subroutine())
>> +      if (uniforms[i].type->is_subroutine() ||
>> +          uniforms[i].is_shader_storage)
>>            continue;
>>
>>         if (uniforms[i].remap_location != UNMAPPED_UNIFORM_LOC) { @@ -
>> 1200,8 +1201,10 @@ link_assign_uniform_locations(struct
>> gl_shader_program *prog,
>>      /* Reserve locations for rest of the uniforms. */
>>      for (unsigned i = 0; i < num_uniforms; i++) {
>>
>> -      if (uniforms[i].type->is_subroutine())
>> +      if (uniforms[i].type->is_subroutine() ||
>> +          uniforms[i].is_shader_storage)
>>            continue;
>> +
>>         /* Built-in uniforms should not get any location. */
>>         if (uniforms[i].builtin)
>>            continue;
>> --
>> 2.4.3
>>
>> _______________________________________________
>> 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