Update defaults for variability of pointed-to types.

Now, if rate qualifiers aren't used to specify otherwise, varying
pointers point to uniform types by default.  As before, uniform
pointers point to varying types by default.

   float *foo;  // varying pointer to uniform float
   float * uniform foo;  // uniform pointer to varying float

These defaults seem to require the least amount of explicit
uniform/varying qualifiers for most common cases, though TBD if it
would be easier to have a single rule that e.g. the pointed-to type
is always uniform by default.
This commit is contained in:
Matt Pharr
2012-02-17 16:52:03 -08:00
parent ad429db7e8
commit 6d7ff7eba2
54 changed files with 187 additions and 131 deletions

View File

@@ -427,7 +427,7 @@ AtomicType::GetString() const {
if (isConst) ret += "const ";
switch (variability) {
case Uniform: ret += "uniform "; break;
case Varying: /*ret += "varying ";*/ break;
case Varying: ret += "varying "; break;
case Unbound: ret += "/*unbound*/ "; break;
}
}
@@ -986,9 +986,17 @@ PointerType::ResolveUnboundVariability(Variability v) const {
Assert(m->errorCount > 0);
return NULL;
}
return new PointerType(baseType->ResolveUnboundVariability(v),
(variability == Unbound) ? v : variability,
isConst);
Assert(v != Unbound);
Variability ptrVariability = (variability == Unbound) ? v : variability;
Variability childVariability = (ptrVariability == Varying) ?
Uniform : Varying;
if (dynamic_cast<const StructType *>(baseType))
// struct members are varying by default.. (FIXME!!!)
childVariability = Varying;
return new PointerType(baseType->ResolveUnboundVariability(childVariability),
ptrVariability, isConst);
}
@@ -1030,7 +1038,7 @@ PointerType::GetString() const {
if (isConst) ret += " const";
switch (variability) {
case Uniform: ret += " uniform"; break;
case Varying: /*ret += " varying";*/ break;
case Varying: ret += " varying"; break;
case Unbound: ret += " /*unbound*/"; break;
}
@@ -1964,7 +1972,7 @@ StructType::GetString() const {
switch (variability) {
case Uniform: ret += "uniform "; break;
case Varying: /*ret += "varying ";*/ break;
case Varying: ret += "varying "; break;
case Unbound: ret += "/*unbound*/ "; break;
}