From 2faace2ef241eed98ba5232ac758f830b509b9c9 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Wed, 22 Nov 2023 11:14:15 -0800 Subject: [PATCH] [Impeller] pass const ref to binding helpers. (flutter/engine#48318) No point in passing by value and moving, just pass a const ref through. Trivial performance improvement. # Before ```cpp /// Bind uniform buffer for resource named FragInfo. static bool BindFragInfo(ResourceBinder& command, BufferView view) { return command.BindResource(ShaderStage::kFragment, kResourceFragInfo, kMetadataFragInfo, std::move(view)); } /// Bind combined image sampler for resource named texture_sampler. static bool BindTextureSampler(ResourceBinder& command, std::shared_ptr texture, std::shared_ptr sampler) { return command.BindResource(ShaderStage::kFragment, kResourceTextureSampler, kMetadataTextureSampler, std::move(texture), std::move(sampler)); } ``` # After ```cpp /// Bind uniform buffer for resource named FragInfo. static bool BindFragInfo(ResourceBinder& command, const BufferView& view) { return command.BindResource(ShaderStage::kFragment, kResourceFragInfo, kMetadataFragInfo, view); } /// Bind combined image sampler for resource named texture_sampler. static bool BindTextureSampler(ResourceBinder& command, const std::shared_ptr& texture, const std::shared_ptr& sampler) { return command.BindResource(ShaderStage::kFragment, kResourceTextureSampler, kMetadataTextureSampler, texture, sampler); } ``` --- .../flutter/impeller/compiler/code_gen_template.h | 2 +- engine/src/flutter/impeller/compiler/reflector.cc | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/engine/src/flutter/impeller/compiler/code_gen_template.h b/engine/src/flutter/impeller/compiler/code_gen_template.h index 61f442d824d..e0f1a18257a 100644 --- a/engine/src/flutter/impeller/compiler/code_gen_template.h +++ b/engine/src/flutter/impeller/compiler/code_gen_template.h @@ -163,7 +163,7 @@ struct {{camel_case(shader_name)}}{{camel_case(shader_stage)}}Shader { return {{ proto.args.0.argument_name }}.BindResource({% for arg in proto.args %} {% if loop.is_first %} {{to_shader_stage(shader_stage)}}, kResource{{ proto.name }}, kMetadata{{ proto.name }}, {% else %} -std::move({{ arg.argument_name }}){% if not loop.is_last %}, {% endif %} +{{ arg.argument_name }}{% if not loop.is_last %}, {% endif %} {% endif %} {% endfor %}); } diff --git a/engine/src/flutter/impeller/compiler/reflector.cc b/engine/src/flutter/impeller/compiler/reflector.cc index d4114223384..1a7a68d3828 100644 --- a/engine/src/flutter/impeller/compiler/reflector.cc +++ b/engine/src/flutter/impeller/compiler/reflector.cc @@ -1137,7 +1137,7 @@ std::vector Reflector::ReflectBindPrototypes( .argument_name = "command", }); proto.args.push_back(BindPrototypeArgument{ - .type_name = "BufferView", + .type_name = "const BufferView&", .argument_name = "view", }); } @@ -1156,7 +1156,7 @@ std::vector Reflector::ReflectBindPrototypes( .argument_name = "command", }); proto.args.push_back(BindPrototypeArgument{ - .type_name = "BufferView", + .type_name = "const BufferView&", .argument_name = "view", }); } @@ -1175,11 +1175,11 @@ std::vector Reflector::ReflectBindPrototypes( .argument_name = "command", }); proto.args.push_back(BindPrototypeArgument{ - .type_name = "std::shared_ptr", + .type_name = "const std::shared_ptr&", .argument_name = "texture", }); proto.args.push_back(BindPrototypeArgument{ - .type_name = "std::shared_ptr", + .type_name = "const std::shared_ptr&", .argument_name = "sampler", }); } @@ -1198,7 +1198,7 @@ std::vector Reflector::ReflectBindPrototypes( .argument_name = "command", }); proto.args.push_back(BindPrototypeArgument{ - .type_name = "std::shared_ptr", + .type_name = "const std::shared_ptr&", .argument_name = "texture", }); } @@ -1217,7 +1217,7 @@ std::vector Reflector::ReflectBindPrototypes( .argument_name = "command", }); proto.args.push_back(BindPrototypeArgument{ - .type_name = "std::shared_ptr", + .type_name = "const std::shared_ptr&", .argument_name = "sampler", }); }