HLSL: Non-functional: Move partial flattened access into symbol node.
Lays the groundwork for fixing issue #954. Partial flattenings were previously tracked through a stack of active subsets in the parse context, but full functionality needs AST nodes to represent this across time, removing the need for parsecontext tracking.
This commit is contained in:
parent
02a14e7c99
commit
d1be7545c6
4 changed files with 26 additions and 36 deletions
|
|
@ -945,7 +945,11 @@ public:
|
|||
// per process threadPoolAllocator, then it causes increased memory usage per compile
|
||||
// it is essential to use "symbol = sym" to assign to symbol
|
||||
TIntermSymbol(int i, const TString& n, const TType& t)
|
||||
: TIntermTyped(t), id(i), constSubtree(nullptr)
|
||||
: TIntermTyped(t), id(i),
|
||||
#ifdef ENABLE_HLSL
|
||||
flattenSubset(-1),
|
||||
#endif
|
||||
constSubtree(nullptr)
|
||||
{ name = n; }
|
||||
virtual int getId() const { return id; }
|
||||
virtual const TString& getName() const { return name; }
|
||||
|
|
@ -956,9 +960,16 @@ public:
|
|||
const TConstUnionArray& getConstArray() const { return constArray; }
|
||||
void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; }
|
||||
TIntermTyped* getConstSubtree() const { return constSubtree; }
|
||||
#ifdef ENABLE_HLSL
|
||||
void setFlattenSubset(int subset) { flattenSubset = subset; }
|
||||
int getFlattenSubset() const { return flattenSubset; } // -1 means full object
|
||||
#endif
|
||||
|
||||
protected:
|
||||
int id; // the unique id of the symbol this node represents
|
||||
#ifdef ENABLE_HLSL
|
||||
int flattenSubset; // how deeply the flattened object rooted at id has been dereferenced
|
||||
#endif
|
||||
TString name; // the name of the symbol this node represents
|
||||
TConstUnionArray constArray; // if the symbol is a front-end compile-time constant, this is its value
|
||||
TIntermTyped* constSubtree;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue