Fix bug with indexing into varying pointer w/uniform index.
Issue #182.
This commit is contained in:
5
expr.cpp
5
expr.cpp
@@ -3794,7 +3794,7 @@ IndexExpr::GetType() const {
|
|||||||
elementType = sequentialType->GetElementType();
|
elementType = sequentialType->GetElementType();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (indexType->IsUniformType())
|
if (indexType->IsUniformType() && baseExprType->IsUniformType())
|
||||||
// If the index is uniform, the resulting type is just whatever the
|
// If the index is uniform, the resulting type is just whatever the
|
||||||
// element type is
|
// element type is
|
||||||
return elementType;
|
return elementType;
|
||||||
@@ -3904,7 +3904,8 @@ IndexExpr::GetLValueType() const {
|
|||||||
const PointerType *pt =
|
const PointerType *pt =
|
||||||
dynamic_cast<const PointerType *>(baseExprLValueType->GetBaseType());
|
dynamic_cast<const PointerType *>(baseExprLValueType->GetBaseType());
|
||||||
Assert(pt != NULL);
|
Assert(pt != NULL);
|
||||||
if (baseExprLValueType->IsUniformType() && indexType->IsUniformType())
|
if (baseExprLValueType->IsUniformType() && indexType->IsUniformType() &&
|
||||||
|
pt->IsVaryingType() == false)
|
||||||
return PointerType::GetUniform(pt->GetBaseType());
|
return PointerType::GetUniform(pt->GetBaseType());
|
||||||
else
|
else
|
||||||
return PointerType::GetVarying(pt->GetBaseType());
|
return PointerType::GetVarying(pt->GetBaseType());
|
||||||
|
|||||||
14
tests/ptr-varying-unif-index.ispc
Normal file
14
tests/ptr-varying-unif-index.ispc
Normal 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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user