From d3fde4ac374b4047aff2b15efa7acd12a268e4f3 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sun, 17 Dec 2023 10:33:52 +0200 Subject: [PATCH] More emplace_back streamlining --- source/glsl/finalize.cpp | 3 +-- source/glsl/generate.cpp | 4 ++-- source/glsl/optimize.cpp | 10 +++------- source/glsl/validate.cpp | 8 +++----- 4 files changed, 9 insertions(+), 16 deletions(-) diff --git a/source/glsl/finalize.cpp b/source/glsl/finalize.cpp index 609f36e5..c8fc04a9 100644 --- a/source/glsl/finalize.cpp +++ b/source/glsl/finalize.cpp @@ -449,12 +449,11 @@ void FeatureConverter::apply(Stage &s, const Features &feat) void FeatureConverter::unsupported(const string &reason) { - Diagnostic diagnostic; + Diagnostic &diagnostic = stage->diagnostics.emplace_back(); diagnostic.severity = Diagnostic::ERR; diagnostic.source = GENERATED_SOURCE; diagnostic.line = 0; diagnostic.message = reason; - stage->diagnostics.push_back(diagnostic); } bool FeatureConverter::check_version(const Version &feature_version) const diff --git a/source/glsl/generate.cpp b/source/glsl/generate.cpp index 4c1039bd..de32b90a 100644 --- a/source/glsl/generate.cpp +++ b/source/glsl/generate.cpp @@ -205,8 +205,8 @@ void InterfaceGenerator::visit(VariableReference &var) if(i!=prev_vars.end() && i->second->interface=="out") { if(stage->type==Stage::GEOMETRY && i->second->array) - stage->diagnostics.push_back(Diagnostic(Diagnostic::WARN, var.source, var.line, - format("Can't access '%s' through automatic interface because it's an array", var.name))); + stage->diagnostics.emplace_back(Diagnostic::WARN, var.source, var.line, + format("Can't access '%s' through automatic interface because it's an array", var.name)); else { generate_interface(*i->second, "in", i->second->name); diff --git a/source/glsl/optimize.cpp b/source/glsl/optimize.cpp index 1403f4a2..45d8745d 100644 --- a/source/glsl/optimize.cpp +++ b/source/glsl/optimize.cpp @@ -357,7 +357,7 @@ void ExpressionInliner::visit(RefPtr &expr) expr->visit(*this); if(r_ref_info && r_ref_info->expression) { - ExpressionUse use; + ExpressionUse &use = r_ref_info->uses.emplace_back(); use.reference = &expr; use.ref_scope = current_block; use.containing_expr = current_expr; @@ -376,8 +376,6 @@ void ExpressionInliner::visit(RefPtr &expr) depend on local variables of that scope or may not always be executed. */ for(Block *i=r_ref_info->assign_scope->parent; (!use.blocked && i); i=i->parent) use.blocked = (i==current_block); - - r_ref_info->uses.push_back(use); } r_oper = expr->oper; r_ref_info = nullptr; @@ -706,12 +704,11 @@ void AggregateDismantler::visit(VariableDeclaration &var) { if(const VariableDeclaration *mem_decl = dynamic_cast(s.get())) { - AggregateMember member; + AggregateMember &member = aggre.members.emplace_back(); member.declaration = mem_decl; member.index = i; if(init_call) member.initializer = init_call->arguments[i]; - aggre.members.push_back(member); } ++i; } @@ -729,10 +726,9 @@ void AggregateDismantler::visit(VariableDeclaration &var) int size = literal_size->value.value(); for(int i=0; idiagnostics.emplace_back(); diag.severity = severity; diag.source = node.source; diag.line = node.line; diag.provoking_source = provoking_node.source; diag.provoking_line = provoking_node.line; diag.message = message; - stage->diagnostics.push_back(diag); last_provoker = &provoking_node; } @@ -991,7 +990,7 @@ void GlobalInterfaceValidator::visit(VariableDeclaration &var) { if(var.interface=="uniform") { - Uniform uni; + Uniform &uni = uniforms.emplace_back(); uni.node = &var; uni.type = var.type_declaration; uni.name = (var.block_declaration ? var.block_declaration->block_name : var.name); @@ -1006,8 +1005,7 @@ void GlobalInterfaceValidator::visit(VariableDeclaration &var) uni.bind_point = get_layout_value(var.layout.get(), "binding"); } - uniforms.push_back(uni); - check_uniform(uniforms.back()); + check_uniform(uni); } } -- 2.45.2