Fix for struct with undound members

This commit is contained in:
Vsevolod Livinskiy
2016-02-06 17:08:17 +03:00
parent e1cb6ca15b
commit 6ea03bb3af
2 changed files with 25 additions and 1 deletions

View File

@@ -6784,9 +6784,12 @@ lUniformValueToVarying(FunctionEmitContext *ctx, llvm::Value *value,
type->GetAsVaryingType()->LLVMType(g->ctx);
llvm::Value *retValue = llvm::UndefValue::get(llvmType);
const StructType *structType = CastType<StructType>(type->GetAsVaryingType());
for (int i = 0; i < collectionType->GetElementCount(); ++i) {
llvm::Value *v = ctx->ExtractInst(value, i, "get_element");
if (collectionType->GetElementType(i)->IsVaryingType())
// If struct has "bound uniform" member, we don't need to cast it to varying
if (!(structType != NULL && structType->GetElementType(i)->IsUniformType()))
v = lUniformValueToVarying(ctx, v, collectionType->GetElementType(i));
retValue = ctx->InsertInst(retValue, v, i, "set_element");
}