X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Fcompiler.cpp;h=4f2080ab9c59afb8c8b6018aed6cac2d60c40d09;hp=5b488f4d4a8f74ac1216e1f6be193b9510d95f63;hb=e9a898f315b5d1396f196d785913a283c30940f2;hpb=bdef3de6559629f25121de2e014383d7f773266b diff --git a/source/glsl/compiler.cpp b/source/glsl/compiler.cpp index 5b488f4d..4f2080ab 100644 --- a/source/glsl/compiler.cpp +++ b/source/glsl/compiler.cpp @@ -82,27 +82,27 @@ void Compiler::compile(Mode mode) if(specialized && mode!=PROGRAM) throw invalid_operation("Compiler::compile"); - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - generate(*i); + for(Stage &s: module->stages) + generate(s); ConstantIdAssigner().apply(*module, features); - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - validate(*i); + for(Stage &s: module->stages) + validate(s); GlobalInterfaceValidator().apply(*module); bool valid = true; - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - if(!check_errors(*i)) + for(Stage &s: module->stages) + if(!check_errors(s)) valid = false; if(!valid) throw invalid_shader_source(get_diagnostics()); if(specialized) { - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - ConstantSpecializer().apply(*i, spec_values); + for(Stage &s: module->stages) + ConstantSpecializer().apply(s, spec_values); } - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ) + for(auto i=module->stages.begin(); i!=module->stages.end(); ) { OptimizeResult result = optimize(*i); if(result==REDO_PREVIOUS) @@ -112,8 +112,8 @@ void Compiler::compile(Mode mode) } LocationAllocator().apply(*module, features); - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - finalize(*i, mode); + for(Stage &s: module->stages) + finalize(s, mode); compiled = true; } @@ -128,10 +128,10 @@ string Compiler::get_combined_glsl() const unsigned source_count = module->source_map.get_count(); for(unsigned i=1; isource_map.get_name(i)); - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) + for(Stage &s: module->stages) { - glsl += format("#pragma MSP stage(%s)\n", Stage::get_stage_name(i->type)); - glsl += Formatter().apply(*i); + glsl += format("#pragma MSP stage(%s)\n", Stage::get_stage_name(s.type)); + glsl += Formatter().apply(s); glsl += '\n'; } @@ -142,8 +142,8 @@ vector Compiler::get_stages() const { vector stage_types; stage_types.reserve(module->stages.size()); - for(list::const_iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - stage_types.push_back(i->type); + for(const Stage &s: module->stages) + stage_types.push_back(s.type); return stage_types; } @@ -151,9 +151,9 @@ string Compiler::get_stage_glsl(Stage::Type stage_type) const { if(!compiled) throw invalid_operation("Compiler::get_stage_glsl"); - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - if(i->type==stage_type) - return Formatter().apply(*i); + auto i = find_member(module->stages, stage_type, &Stage::type); + if(i!=module->stages.end()) + return Formatter().apply(*i); throw key_error(Stage::get_stage_name(stage_type)); } @@ -170,9 +170,9 @@ const map &Compiler::get_vertex_attributes() const { if(!compiled) throw invalid_operation("Compiler::get_vertex_attributes"); - for(list::const_iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - if(i->type==Stage::VERTEX) - return i->locations; + auto i = find_member(module->stages, Stage::VERTEX, &Stage::type); + if(i!=module->stages.end()) + return i->locations; throw invalid_operation("Compiler::get_vertex_attributes"); } @@ -180,9 +180,9 @@ const map &Compiler::get_fragment_outputs() const { if(!compiled) throw invalid_operation("Compiler::get_fragment_outputs"); - for(list::const_iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - if(i->type==Stage::FRAGMENT) - return i->locations; + auto i = find_member(module->stages, Stage::FRAGMENT, &Stage::type); + if(i!=module->stages.end()) + return i->locations; throw invalid_operation("Compiler::get_fragment_outputs"); } @@ -207,19 +207,19 @@ const SourceMap &Compiler::get_source_map() const string Compiler::get_stage_debug(Stage::Type stage_type) const { - for(list::iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - if(i->type==stage_type) - return DumpTree().apply(*i); + auto i = find_member(module->stages, stage_type, &Stage::type); + if(i!=module->stages.end()) + return DumpTree().apply(*i); throw key_error(Stage::get_stage_name(stage_type)); } string Compiler::get_diagnostics() const { string combined; - for(list::const_iterator i=module->stages.begin(); i!=module->stages.end(); ++i) - for(vector::const_iterator j=i->diagnostics.begin(); j!=i->diagnostics.end(); ++j) - if(j->source!=INTERNAL_SOURCE) - append(combined, "\n", format("%s:%d: %s", module->source_map.get_name(j->source), j->line, j->message)); + for(const Stage &s: module->stages) + for(const Diagnostic &d: s.diagnostics) + if(d.source!=INTERNAL_SOURCE) + append(combined, "\n", format("%s:%d: %s", module->source_map.get_name(d.source), d.line, d.message)); return combined; } @@ -228,15 +228,15 @@ void Compiler::append_module(const Module &mod, ModuleCache &mod_cache) module->source_map.merge_from(mod.source_map); vector imports; - for(NodeList::const_iterator i=mod.shared.content.body.begin(); i!=mod.shared.content.body.end(); ++i) - if(Import *imp = dynamic_cast(i->get())) + for(const RefPtr &s: mod.shared.content.body) + if(Import *imp = dynamic_cast(s.get())) imports.push_back(imp); - for(vector::iterator i=imports.begin(); i!=imports.end(); ++i) - import(mod_cache, (*i)->module); + for(Import *i: imports) + import(mod_cache, i->module); append_stage(mod.shared); - for(list::const_iterator i=mod.stages.begin(); i!=mod.stages.end(); ++i) - append_stage(*i); + for(const Stage &s: mod.stages) + append_stage(s); } void Compiler::append_stage(const Stage &stage) @@ -246,11 +246,10 @@ void Compiler::append_stage(const Stage &stage) target = &module->shared; else { - list::iterator i; - for(i=module->stages.begin(); (i!=module->stages.end() && i->typestages, [&stage](const Stage &s){ return s.type>=stage.type; }); if(i==module->stages.end() || i->type>stage.type) { - list::iterator j = module->stages.insert(i, stage.type); + auto j = module->stages.insert(i, stage.type); if(i!=module->stages.end()) i->previous = &*j; i = j; @@ -263,9 +262,9 @@ void Compiler::append_stage(const Stage &stage) if(stage.required_features.glsl_version>target->required_features.glsl_version) target->required_features.glsl_version = stage.required_features.glsl_version; - for(NodeList::const_iterator i=stage.content.body.begin(); i!=stage.content.body.end(); ++i) - if(!dynamic_cast(i->get())) - target->content.body.push_back(*i); + for(const RefPtr &s: stage.content.body) + if(!dynamic_cast(s.get())) + target->content.body.push_back(s); } void Compiler::import(ModuleCache &mod_cache, const string &name) @@ -338,12 +337,8 @@ void Compiler::validate(Stage &stage) bool Compiler::check_errors(Stage &stage) { stable_sort(stage.diagnostics, &diagnostic_line_order); - - for(vector::const_iterator i=stage.diagnostics.begin(); i!=stage.diagnostics.end(); ++i) - if(i->severity==Diagnostic::ERR) - return false; - - return true; + return !any_of(stage.diagnostics.begin(), stage.diagnostics.end(), + [](const Diagnostic &d){ return d.severity==Diagnostic::ERR; }); } bool Compiler::diagnostic_line_order(const Diagnostic &diag1, const Diagnostic &diag2) @@ -407,9 +402,9 @@ void Compiler::finalize(Stage &stage, Mode mode) void Compiler::inject_block(Block &target, const Block &source) { - NodeList::iterator insert_point = target.body.begin(); - for(NodeList::const_iterator i=source.body.begin(); i!=source.body.end(); ++i) - target.body.insert(insert_point, (*i)->clone()); + auto insert_point = target.body.begin(); + for(const RefPtr &s: source.body) + target.body.insert(insert_point, s->clone()); } } // namespace SL