From e8b33af103fc291036029508992a15e4bbea201d Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Wed, 3 Apr 2024 19:45:35 -0700 Subject: [PATCH] [Impeller] dont inc shared_ptr count for every command/pipeline in render_pass_vk (flutter/engine#51874) We have to pay to inc/dec the shared_ptr, but all pipelines are persisted indefinitely so we shouldn't need to worry about dangling ptrs. --- .../impeller/renderer/backend/vulkan/render_pass_vk.cc | 6 ++---- .../impeller/renderer/backend/vulkan/render_pass_vk.h | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/engine/src/flutter/impeller/renderer/backend/vulkan/render_pass_vk.cc b/engine/src/flutter/impeller/renderer/backend/vulkan/render_pass_vk.cc index ba5d68f08e..86fadc770c 100644 --- a/engine/src/flutter/impeller/renderer/backend/vulkan/render_pass_vk.cc +++ b/engine/src/flutter/impeller/renderer/backend/vulkan/render_pass_vk.cc @@ -24,7 +24,6 @@ #include "impeller/renderer/backend/vulkan/sampler_vk.h" #include "impeller/renderer/backend/vulkan/shared_object_vk.h" #include "impeller/renderer/backend/vulkan/texture_vk.h" -#include "impeller/renderer/backend/vulkan/vk.h" #include "vulkan/vulkan_handles.hpp" namespace impeller { @@ -298,8 +297,7 @@ SharedHandleVK RenderPassVK::CreateVKFramebuffer( // |RenderPass| void RenderPassVK::SetPipeline( const std::shared_ptr>& pipeline) { - pipeline_ = pipeline; - + pipeline_ = pipeline.get(); if (!pipeline_) { return; } @@ -456,7 +454,7 @@ fml::Status RenderPassVK::Draw() { fml::StatusCode::kAborted, "Could not create pipeline variant with immutable sampler."); } - pipeline_ = std::move(pipeline_variant); + pipeline_ = pipeline_variant.get(); } const auto& context_vk = ContextVK::Cast(*context_); diff --git a/engine/src/flutter/impeller/renderer/backend/vulkan/render_pass_vk.h b/engine/src/flutter/impeller/renderer/backend/vulkan/render_pass_vk.h index f0fba63e59..84b94b6b9f 100644 --- a/engine/src/flutter/impeller/renderer/backend/vulkan/render_pass_vk.h +++ b/engine/src/flutter/impeller/renderer/backend/vulkan/render_pass_vk.h @@ -49,7 +49,7 @@ class RenderPassVK final : public RenderPass { size_t vertex_count_ = 0u; bool has_index_buffer_ = false; bool has_label_ = false; - std::shared_ptr> pipeline_; + const Pipeline* pipeline_; bool pipeline_uses_input_attachments_ = false; std::shared_ptr immutable_sampler_;