From a084108d8be8eb0b110ea876cef3e64ae3d6b88e Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Wed, 12 Apr 2023 14:54:46 -0700 Subject: [PATCH] [Impeller] Do not copy the command list when queueing a RenderPassGLES to the reactor (flutter/engine#41125) [Impeller] Do not copy the command list when queueing a RenderPassGLES to the reactor --- .../impeller/renderer/backend/gles/render_pass_gles.cc | 8 +++++--- .../impeller/renderer/backend/gles/render_pass_gles.h | 6 +++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/engine/src/flutter/impeller/renderer/backend/gles/render_pass_gles.cc b/engine/src/flutter/impeller/renderer/backend/gles/render_pass_gles.cc index ac6992b8859..3d371a6af78 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/render_pass_gles.cc +++ b/engine/src/flutter/impeller/renderer/backend/gles/render_pass_gles.cc @@ -520,11 +520,13 @@ bool RenderPassGLES::OnEncodeCommands(const Context& context) const { CanDiscardAttachmentWhenDone(stencil0->store_action); } + std::shared_ptr shared_this = shared_from_this(); return reactor_->AddOperation([pass_data, allocator = context.GetResourceAllocator(), - commands = commands_](const auto& reactor) { - auto result = - EncodeCommandsInReactor(*pass_data, allocator, reactor, commands); + render_pass = std::move(shared_this)]( + const auto& reactor) { + auto result = EncodeCommandsInReactor(*pass_data, allocator, reactor, + render_pass->commands_); FML_CHECK(result) << "Must be able to encode GL commands without error."; }); } diff --git a/engine/src/flutter/impeller/renderer/backend/gles/render_pass_gles.h b/engine/src/flutter/impeller/renderer/backend/gles/render_pass_gles.h index 48e50760aa9..c76948b65cf 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/render_pass_gles.h +++ b/engine/src/flutter/impeller/renderer/backend/gles/render_pass_gles.h @@ -4,13 +4,17 @@ #pragma once +#include + #include "flutter/fml/macros.h" #include "flutter/impeller/renderer/backend/gles/reactor_gles.h" #include "flutter/impeller/renderer/render_pass.h" namespace impeller { -class RenderPassGLES final : public RenderPass { +class RenderPassGLES final + : public RenderPass, + public std::enable_shared_from_this { public: // |RenderPass| ~RenderPassGLES() override;