glsl: Properly handle blocks that define the same field name.
authorIago Toral Quiroga <itoral@igalia.com>
Fri, 4 Apr 2014 13:11:15 +0000 (15:11 +0200)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 16 Apr 2014 05:18:43 +0000 (22:18 -0700)
commit6d0e30c6a332de9ea7ab00e1fd303df2fb337c64
treeae83bca029160740f6ddfb28258c8e5d61078d43
parent6ac5a5e383830d711793e425ddd285e17ffcd235
glsl: Properly handle blocks that define the same field name.

Currently we can have name space collisions between blocks that define the same
fields. For example:

in block
{
    vec4 Color;
} In[];

out block
{
    vec4 Color;
} Out;

These two blocks will assign the same interface name (block.Color) to the Color
field in flatten_named_interface_blocks_declarations.cpp, leading to havoc.
This was breaking badly the gl-320-primitive-shading test from ogl-samples.

The patch uses the block instance name to avoid collisions, producing names
like block.In.Color and block.Out.Color to avoid the name clash.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76394
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/lower_named_interface_blocks.cpp