X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fcompiler.cpp;h=db9017cfb675745779ca45e7654f092ad9d868e6;hb=99719790df8a1215465a68c7b1d87a495bff87eb;hp=347e16ad301dba1881b604713a68476095ccf0f2;hpb=9d798ac368bfd236a7632a3a15e51bd1112ea63d;p=libs%2Fgl.git diff --git a/source/glsl/compiler.cpp b/source/glsl/compiler.cpp index 347e16ad..db9017cf 100644 --- a/source/glsl/compiler.cpp +++ b/source/glsl/compiler.cpp @@ -114,7 +114,7 @@ void Compiler::append_module(Module &mod, DataFile::Collection *res) vector imports = NodeGatherer().apply(mod.shared); for(vector::iterator i=imports.begin(); i!=imports.end(); ++i) import(res, (*i)->module); - NodeRemover(set(imports.begin(), imports.end())).apply(mod.shared); + NodeRemover().apply(mod.shared, set(imports.begin(), imports.end())); append_stage(mod.shared); for(list::iterator i=mod.stages.begin(); i!=mod.stages.end(); ++i) @@ -171,6 +171,7 @@ void Compiler::generate(Stage &stage) inject_block(stage.content, module->shared.content); DeclarationReorderer().apply(stage); + BlockResolver().apply(stage); FunctionResolver().apply(stage); VariableResolver().apply(stage); InterfaceGenerator().apply(stage); @@ -184,15 +185,14 @@ bool Compiler::optimize(Stage &stage) { ConstantConditionEliminator().apply(stage); - set inlineable = InlineableFunctionLocator().apply(stage); - FunctionInliner(inlineable).apply(stage); + FunctionInliner().apply(stage); + BlockResolver().apply(stage); + VariableResolver().apply(stage); - set unused = UnusedVariableLocator().apply(stage); - set unused2 = UnusedFunctionLocator().apply(stage); - unused.insert(unused2.begin(), unused2.end()); - NodeRemover(unused).apply(stage); + bool result = UnusedVariableRemover().apply(stage); + result |= UnusedFunctionRemover().apply(stage); - return !unused.empty(); + return result; } void Compiler::finalize(Stage &stage)