Flatten uniform arrays

This checkin adds a --flatten-uniform-arrays option which can break
uniform arrays of samplers, textures, or UBOs up into individual
scalars named (e.g) myarray[0], myarray[1], etc.  These appear as
individual linkage objects.

Code notes:

- shouldFlatten internally calls shouldFlattenIO, and shouldFlattenUniform,
  but is the only flattening query directly called.

- flattenVariable will handle structs or arrays (but not yet arrayed structs;
  this is tested an an error is generated).

- There's some error checking around unhandled situations.  E.g, flattening
  uniform arrays with initializer lists is not implemented.

- This piggybacks on as much of the existing mechanism for struct flattening
  as it can.  E.g, it uses the same flattenMap, and the same
  flattenAccess() method.

- handleAssign() has been generalized to cope with either structs or arrays.

- Extended test infrastructure to test flattening ability.
This commit is contained in:
steve-lunarg 2016-09-16 13:26:37 -06:00
parent 6714bcc2ca
commit e0b9debda2
11 changed files with 872 additions and 46 deletions

View file

@ -145,7 +145,8 @@ public:
shiftSamplerBinding(0),
shiftTextureBinding(0),
shiftUboBinding(0),
autoMapBindings(false)
autoMapBindings(false),
flattenUniformArrays(false)
{
localSize[0] = 1;
localSize[1] = 1;
@ -176,6 +177,8 @@ public:
unsigned int getShiftUboBinding() const { return shiftUboBinding; }
void setAutoMapBindings(bool map) { autoMapBindings = map; }
bool getAutoMapBindings() const { return autoMapBindings; }
void setFlattenUniformArrays(bool flatten) { flattenUniformArrays = flatten; }
bool getFlattenUniformArrays() const { return flattenUniformArrays; }
void setVersion(int v) { version = v; }
int getVersion() const { return version; }
@ -385,6 +388,7 @@ protected:
unsigned int shiftTextureBinding;
unsigned int shiftUboBinding;
bool autoMapBindings;
bool flattenUniformArrays;
EProfile profile;
int version;