SPV 1.4: Implement the 5 new loop controls.
This commit is contained in:
parent
0c1e71a123
commit
1f4d04687b
12 changed files with 312 additions and 35 deletions
|
|
@ -1116,7 +1116,12 @@ public:
|
|||
first(testFirst),
|
||||
unroll(false),
|
||||
dontUnroll(false),
|
||||
dependency(0)
|
||||
dependency(0),
|
||||
minIterations(0),
|
||||
maxIterations(iterationsInfinite),
|
||||
iterationMultiple(1),
|
||||
peelCount(0),
|
||||
partialCount(0)
|
||||
{ }
|
||||
|
||||
virtual TIntermLoop* getAsLoopNode() { return this; }
|
||||
|
|
@ -1128,14 +1133,36 @@ public:
|
|||
bool testFirst() const { return first; }
|
||||
|
||||
void setUnroll() { unroll = true; }
|
||||
void setDontUnroll() { dontUnroll = true; }
|
||||
void setDontUnroll() {
|
||||
dontUnroll = true;
|
||||
peelCount = 0;
|
||||
partialCount = 0;
|
||||
}
|
||||
bool getUnroll() const { return unroll; }
|
||||
bool getDontUnroll() const { return dontUnroll; }
|
||||
|
||||
static const unsigned int dependencyInfinite = 0xFFFFFFFF;
|
||||
static const unsigned int iterationsInfinite = 0xFFFFFFFF;
|
||||
void setLoopDependency(int d) { dependency = d; }
|
||||
int getLoopDependency() const { return dependency; }
|
||||
|
||||
void setMinIterations(unsigned int v) { minIterations = v; }
|
||||
unsigned int getMinIterations() const { return minIterations; }
|
||||
void setMaxIterations(unsigned int v) { maxIterations = v; }
|
||||
unsigned int getMaxIterations() const { return maxIterations; }
|
||||
void setIterationMultiple(unsigned int v) { iterationMultiple = v; }
|
||||
unsigned int getIterationMultiple() const { return iterationMultiple; }
|
||||
void setPeelCount(unsigned int v) {
|
||||
peelCount = v;
|
||||
dontUnroll = false;
|
||||
}
|
||||
unsigned int getPeelCount() const { return peelCount; }
|
||||
void setPartialCount(unsigned int v) {
|
||||
partialCount = v;
|
||||
dontUnroll = false;
|
||||
}
|
||||
unsigned int getPartialCount() const { return partialCount; }
|
||||
|
||||
protected:
|
||||
TIntermNode* body; // code to loop over
|
||||
TIntermTyped* test; // exit condition associated with loop, could be 0 for 'for' loops
|
||||
|
|
@ -1144,6 +1171,11 @@ protected:
|
|||
bool unroll; // true if unroll requested
|
||||
bool dontUnroll; // true if request to not unroll
|
||||
unsigned int dependency; // loop dependency hint; 0 means not set or unknown
|
||||
unsigned int minIterations; // as per the SPIR-V specification
|
||||
unsigned int maxIterations; // as per the SPIR-V specification
|
||||
unsigned int iterationMultiple; // as per the SPIR-V specification
|
||||
unsigned int peelCount; // as per the SPIR-V specification
|
||||
unsigned int partialCount; // as per the SPIR-V specification
|
||||
};
|
||||
|
||||
//
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue