X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fglsl%2Fcompiler.cpp;h=55a69f0df38ecaf1b681f9a698e6bbc2abed02da;hb=518f751d385b733adbf43fe4056403740709edec;hp=cedd25e759bf2e48bf87b7afb27c10488e712fda;hpb=f7b29fcfe408965c9cba79095eb05c49eca4a98e;p=libs%2Fgl.git diff --git a/source/glsl/compiler.cpp b/source/glsl/compiler.cpp index cedd25e7..55a69f0d 100644 --- a/source/glsl/compiler.cpp +++ b/source/glsl/compiler.cpp @@ -82,7 +82,7 @@ void Compiler::compile(Mode mode) OptimizeResult result = optimize(*i); if(result==REDO_PREVIOUS) i = module->stages.begin(); - else + else if(result!=REDO_STAGE) ++i; } for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) @@ -223,8 +223,6 @@ void Compiler::generate(Stage &stage, Mode mode) stage.required_features.glsl_version = module->shared.required_features.glsl_version; inject_block(stage.content, module->shared.content); - DeclarationReorderer().apply(stage); - // Initial resolving pass BlockHierarchyResolver().apply(stage); FunctionResolver().apply(stage); @@ -235,7 +233,6 @@ void Compiler::generate(Stage &stage, Mode mode) InterfaceGenerator().apply(stage); VariableResolver().apply(stage); - DeclarationReorderer().apply(stage); FunctionResolver().apply(stage); ConstantSpecializer().apply(stage, (mode==PROGRAM && specialized ? &spec_values : 0)); if(mode==PROGRAM) @@ -246,7 +243,7 @@ Compiler::OptimizeResult Compiler::optimize(Stage &stage) { ConstantConditionEliminator().apply(stage); - FunctionInliner().apply(stage); + bool any_inlined = FunctionInliner().apply(stage); BlockHierarchyResolver().apply(stage); VariableResolver().apply(stage); @@ -255,7 +252,7 @@ Compiler::OptimizeResult Compiler::optimize(Stage &stage) bool any_removed = UnusedVariableRemover().apply(stage); any_removed |= UnusedFunctionRemover().apply(stage); - return any_removed ? REDO_PREVIOUS : NEXT_STAGE; + return any_removed ? REDO_PREVIOUS : any_inlined ? REDO_STAGE : NEXT_STAGE; } void Compiler::finalize(Stage &stage, Mode mode)