glsl: Simplify the interface to link_invalidate_variable_locations
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 4 Oct 2013 17:46:29 +0000 (10:46 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 22 Oct 2013 22:23:30 +0000 (15:23 -0700)
commit63974c0f5b26e369a790505af6820d4bbcf451b2
tree227b453fc6e459d5cb04ae6a5baad96c5454134f
parent1eee0a9f016a1049869f4677f5919186ee3785a2
glsl: Simplify the interface to link_invalidate_variable_locations

The unit tests added in the previous commits prove some things about the
state of some internal data structures.  The most important of these is
that all built-in input and output variables have explicit_location
set.  This means that link_invalidate_variable_locations doesn't need to
know the range of non-generic shader inputs or outputs.  It can simply
reset location state depending on whether explicit_location is set.

There are two additional assumptions that were already implicit in the
code that comments now document.

  - ir_variable::is_unmatched_generic_inout is only used by the linker
    when connecting outputs from one shader stage to inputs of another
    shader stage.

  - Any varying that has explicit_location set must be a built-in.  This
    will be true until GL_ARB_separate_shader_objects is supported.

As a result, the input_base and output_base parameters to
link_invalidate_variable_locations are no longer necessary, and the code
for resetting locations and setting is_unmatched_generic_inout can be
simplified.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/glsl/linker.cpp
src/glsl/linker.h
src/glsl/tests/invalidate_locations_test.cpp