glsl: handle unsigned int wraparound in link_shaders()
authorLars Hamre <chemecse@gmail.com>
Fri, 8 Apr 2016 14:06:23 +0000 (10:06 -0400)
committerTimothy Arceri <timothy.arceri@collabora.com>
Sat, 9 Apr 2016 01:06:04 +0000 (11:06 +1000)
commite25c24c6389e5dbbb7ebf59c302659e5d6417ed4
tree8d6109bc96ee4515798d206b8c5479f50ce2bfb2
parent6cc7aec5b05ff19d9bdf2b33c993257625d7c9fc
glsl: handle unsigned int wraparound in link_shaders()

v2: change check_explicit_uniform_locations() to return an
    unsigned 0 (Timothy Arceri)

We were storing the int result of check_explicit_uniform_locations()
in num_explicit_uniform_locs as an unsigned int which caused it to
be 4294967295 when a -1 was returned.

This in turn would cause the following error during linking:
error: count of uniform locations > MAX_UNIFORM_LOCATIONS(4294967295 > 98304)

Results from running piglit tests/all with this patch
and when ARB_explicit_uniform_location disabled:

changes:     178
fixes:       176
regressions: 2

The two regressions are for the following tests:
glean@glsl1-matrix column check (1)
glean@glsl1-matrix column check (2)
which regress from FAIL to CRASH.

The regressions are acceptable because the tests are currently failing due to
the aforementioned linker error.

Signed-off-by: Lars Hamre <chemecse@gmail.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
src/compiler/glsl/linker.cpp