X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fvalidate.cpp;h=6f0869ea141897813c4e4f3190a81082457ceed1;hb=9bec9da4ec633a541cf6048beed99629fefae2b9;hp=6d0f8e51ac2cb9a95ee94883f8a7449f0c97fa44;hpb=4c805f55d89919d6971d600102ab4d6d65d56dc3;p=libs%2Fgl.git diff --git a/source/glsl/validate.cpp b/source/glsl/validate.cpp index 6d0f8e51..6f0869ea 100644 --- a/source/glsl/validate.cpp +++ b/source/glsl/validate.cpp @@ -112,6 +112,32 @@ void DeclarationValidator::visit(FunctionDeclaration &func) TraversingVisitor::visit(func); } + +void ReferenceValidator::visit(VariableReference &var) +{ + if(!var.declaration) + error(var, format("Use of undeclared variable '%s'", var.name)); + else if(stage->type!=Stage::VERTEX && var.declaration->interface=="in" && !var.declaration->linked_declaration) + error(var, format("Use of unlinked input variable '%s'", var.name)); +} + +void ReferenceValidator::visit(InterfaceBlockReference &iface) +{ + /* An interface block reference without a declaration should be impossible + since references are generated based on existing declarations. */ + if(!iface.declaration) + error(iface, format("Use of undeclared interface block '%s'", iface.name)); + else if(stage->type!=Stage::VERTEX && iface.declaration->interface=="in" && !iface.declaration->linked_block) + error(iface, format("Use of unlinked input block '%s'", iface.name)); +} + +void ReferenceValidator::visit(VariableDeclaration &var) +{ + if(!var.type_declaration) + error(var, format("Use of undeclared type '%s'", var.type)); + TraversingVisitor::visit(var); +} + } // namespace SL } // namespace GL } // namespace Msp