glsl: generate named interface block names correctly
authorTimothy Arceri <timothy.arceri@collabora.com>
Fri, 11 Mar 2016 05:15:02 +0000 (16:15 +1100)
committerTimothy Arceri <timothy.arceri@collabora.com>
Thu, 31 Mar 2016 01:49:47 +0000 (12:49 +1100)
commit8765a9e0fe2987caa6af7473cbc4c55754621806
tree3933cacd1356feb8507449fbaccb316c61a4a530
parent7ebc3deaad77d11aa7086720ba4c3469a8878de3
glsl: generate named interface block names correctly

Firstly this updates the named interface lowering pass to store the
interface without the arrays removed.

Note we need to remove the arrays in the interface/varying matching
code to not regress things but in future this should be fixed
futher as it would seem we currently successfully match interface
blocks with differnt array sizes.

Since we now know if the interface was an array we can reduce the
IR flags from_named_ifc_block_array and from_named_ifc_block_nonarray
to just from_named_ifc_block.

Next rather than having a different code path for named interface
blocks in program_resource_visitor we just make use of the one used
by UBOs this allows us to now handle arrays of arrays correctly.

Finally we add a new param to the recursion function
named_ifc_member this is because we only want to process a single
member at a time. Note that this is also the glsl_struct_field
from the original ifc type before lowering rather than the type
from the lowered variable. This fixes a bug in Mesa where we would
generate the names like WithInstArray[0].g[0][0] when it should be
WithInstArray[0].g[0] for the following interface.

   out WithInstArray {
      float g[3];
   } instArray[2];

Reviewed-by: Dave Airlie <airlied@redhat.com>
src/compiler/glsl/ir.h
src/compiler/glsl/link_interface_blocks.cpp
src/compiler/glsl/link_uniforms.cpp
src/compiler/glsl/link_varyings.cpp
src/compiler/glsl/linker.h
src/compiler/glsl/lower_named_interface_blocks.cpp