Fix bug with indexing into varying pointer w/uniform index.

Issue #182.
This commit is contained in:
Matt Pharr
2012-02-25 10:19:21 -08:00
parent 8603f9838f
commit 2a1c7f2d47
2 changed files with 17 additions and 2 deletions

View File

@@ -3794,7 +3794,7 @@ IndexExpr::GetType() const {
elementType = sequentialType->GetElementType();
}
if (indexType->IsUniformType())
if (indexType->IsUniformType() && baseExprType->IsUniformType())
// If the index is uniform, the resulting type is just whatever the
// element type is
return elementType;
@@ -3904,7 +3904,8 @@ IndexExpr::GetLValueType() const {
const PointerType *pt =
dynamic_cast<const PointerType *>(baseExprLValueType->GetBaseType());
Assert(pt != NULL);
if (baseExprLValueType->IsUniformType() && indexType->IsUniformType())
if (baseExprLValueType->IsUniformType() && indexType->IsUniformType() &&
pt->IsVaryingType() == false)
return PointerType::GetUniform(pt->GetBaseType());
else
return PointerType::GetVarying(pt->GetBaseType());

View File

@@ -0,0 +1,14 @@
export uniform int width() { return programCount; }
export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform float buf[programCount];
uniform float * varying ptr = &buf[programCount - 1 - programIndex];
ptr[0] = programIndex;
RET[programIndex] = buf[programIndex];
}
export void result(uniform float RET[]) {
RET[programIndex] = programCount - 1 - programIndex;
}