glsl: order indices for samplers inside a struct array
authorTimothy Arceri <t_arceri@yahoo.com.au>
Sun, 30 Aug 2015 02:49:46 +0000 (12:49 +1000)
committerTimothy Arceri <t_arceri@yahoo.com.au>
Thu, 17 Sep 2015 01:26:39 +0000 (11:26 +1000)
commit874a0217fd8bba83b0bc2448f5156fdb82f77d7c
treea2f7c783f8aeef08299eb516939bf93022244a04
parentb5df52b1128049bf688cace6e581a16d5f1ad5bb
glsl: order indices for samplers inside a struct array

This allows the correct offset to be easily calculated for indirect
indexing when a struct array contains multiple samplers, or any crazy
nesting.

The indices for the folling struct will now look like this:
Sampler index: 0 Name: s[0].tex
Sampler index: 1 Name: s[1].tex
Sampler index: 2 Name: s[0].si.tex
Sampler index: 3 Name: s[1].si.tex
Sampler index: 4 Name: s[0].si.tex2
Sampler index: 5 Name: s[1].si.tex2

Before this change it looked like this:
Sampler index: 0 Name: s[0].tex
Sampler index: 3 Name: s[1].tex
Sampler index: 1 Name: s[0].si.tex
Sampler index: 4 Name: s[1].si.tex
Sampler index: 2 Name: s[0].si.tex2
Sampler index: 5 Name: s[1].si.tex2

struct S_inner {
   sampler2D tex;
   sampler2D tex2;
};

struct S {
   sampler2D tex;
   S_inner si;
};

uniform S s[2];

V3: Update comments with suggestions from Jason

V2: rename struct array counter to have better name

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/glsl/link_uniforms.cpp
src/glsl/linker.h