diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 65cf1c2918881..fb771b80afa7e 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -5494,6 +5494,8 @@ ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/texture_source_vk.cc + ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/texture_source_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/texture_vk.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/texture_vk.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/tracked_objects_vk.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/tracked_objects_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/vertex_descriptor_vk.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/vertex_descriptor_vk.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/vk.h + ../../../flutter/LICENSE @@ -8320,6 +8322,8 @@ FILE: ../../../flutter/impeller/renderer/backend/vulkan/texture_source_vk.cc FILE: ../../../flutter/impeller/renderer/backend/vulkan/texture_source_vk.h FILE: ../../../flutter/impeller/renderer/backend/vulkan/texture_vk.cc FILE: ../../../flutter/impeller/renderer/backend/vulkan/texture_vk.h +FILE: ../../../flutter/impeller/renderer/backend/vulkan/tracked_objects_vk.cc +FILE: ../../../flutter/impeller/renderer/backend/vulkan/tracked_objects_vk.h FILE: ../../../flutter/impeller/renderer/backend/vulkan/vertex_descriptor_vk.cc FILE: ../../../flutter/impeller/renderer/backend/vulkan/vertex_descriptor_vk.h FILE: ../../../flutter/impeller/renderer/backend/vulkan/vk.h diff --git a/impeller/renderer/backend/vulkan/BUILD.gn b/impeller/renderer/backend/vulkan/BUILD.gn index be72d061fb56c..7a7822cc9f92c 100644 --- a/impeller/renderer/backend/vulkan/BUILD.gn +++ b/impeller/renderer/backend/vulkan/BUILD.gn @@ -106,6 +106,8 @@ impeller_component("vulkan") { "texture_source_vk.h", "texture_vk.cc", "texture_vk.h", + "tracked_objects_vk.cc", + "tracked_objects_vk.h", "vertex_descriptor_vk.cc", "vertex_descriptor_vk.h", "vk.h", diff --git a/impeller/renderer/backend/vulkan/command_encoder_vk.cc b/impeller/renderer/backend/vulkan/command_encoder_vk.cc index 4cd2284dc5cfc..8ee5cf8204ffe 100644 --- a/impeller/renderer/backend/vulkan/command_encoder_vk.cc +++ b/impeller/renderer/backend/vulkan/command_encoder_vk.cc @@ -11,93 +11,10 @@ #include "impeller/renderer/backend/vulkan/fence_waiter_vk.h" #include "impeller/renderer/backend/vulkan/gpu_tracer_vk.h" #include "impeller/renderer/backend/vulkan/texture_vk.h" +#include "impeller/renderer/backend/vulkan/tracked_objects_vk.h" namespace impeller { -class TrackedObjectsVK { - public: - explicit TrackedObjectsVK(const std::weak_ptr& context, - const std::shared_ptr& pool, - std::unique_ptr probe) - : desc_pool_(context), probe_(std::move(probe)) { - if (!pool) { - return; - } - auto buffer = pool->CreateCommandBuffer(); - if (!buffer) { - return; - } - pool_ = pool; - buffer_ = std::move(buffer); - is_valid_ = true; - } - - ~TrackedObjectsVK() { - if (!buffer_) { - return; - } - pool_->CollectCommandBuffer(std::move(buffer_)); - } - - bool IsValid() const { return is_valid_; } - - void Track(std::shared_ptr object) { - if (!object) { - return; - } - tracked_objects_.insert(std::move(object)); - } - - void Track(std::shared_ptr buffer) { - if (!buffer) { - return; - } - tracked_buffers_.insert(std::move(buffer)); - } - - bool IsTracking(const std::shared_ptr& buffer) const { - if (!buffer) { - return false; - } - return tracked_buffers_.find(buffer) != tracked_buffers_.end(); - } - - void Track(std::shared_ptr texture) { - if (!texture) { - return; - } - tracked_textures_.insert(std::move(texture)); - } - - bool IsTracking(const std::shared_ptr& texture) const { - if (!texture) { - return false; - } - return tracked_textures_.find(texture) != tracked_textures_.end(); - } - - vk::CommandBuffer GetCommandBuffer() const { return *buffer_; } - - DescriptorPoolVK& GetDescriptorPool() { return desc_pool_; } - - GPUProbe& GetGPUProbe() const { return *probe_.get(); } - - private: - DescriptorPoolVK desc_pool_; - // `shared_ptr` since command buffers have a link to the command pool. - std::shared_ptr pool_; - vk::UniqueCommandBuffer buffer_; - std::set> tracked_objects_; - std::set> tracked_buffers_; - std::set> tracked_textures_; - std::unique_ptr probe_; - bool is_valid_ = false; - - TrackedObjectsVK(const TrackedObjectsVK&) = delete; - - TrackedObjectsVK& operator=(const TrackedObjectsVK&) = delete; -}; - CommandEncoderFactoryVK::CommandEncoderFactoryVK( const std::weak_ptr& context) : context_(context) {} diff --git a/impeller/renderer/backend/vulkan/tracked_objects_vk.cc b/impeller/renderer/backend/vulkan/tracked_objects_vk.cc new file mode 100644 index 0000000000000..47b8477309dcb --- /dev/null +++ b/impeller/renderer/backend/vulkan/tracked_objects_vk.cc @@ -0,0 +1,88 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "impeller/renderer/backend/vulkan/tracked_objects_vk.h" + +#include "impeller/renderer/backend/vulkan/gpu_tracer_vk.h" + +namespace impeller { + +TrackedObjectsVK::TrackedObjectsVK( + const std::weak_ptr& context, + const std::shared_ptr& pool, + std::unique_ptr probe) + : desc_pool_(context), probe_(std::move(probe)) { + if (!pool) { + return; + } + auto buffer = pool->CreateCommandBuffer(); + if (!buffer) { + return; + } + pool_ = pool; + buffer_ = std::move(buffer); + is_valid_ = true; +} + +TrackedObjectsVK::~TrackedObjectsVK() { + if (!buffer_) { + return; + } + pool_->CollectCommandBuffer(std::move(buffer_)); +} + +bool TrackedObjectsVK::IsValid() const { + return is_valid_; +} + +void TrackedObjectsVK::Track(std::shared_ptr object) { + if (!object) { + return; + } + tracked_objects_.insert(std::move(object)); +} + +void TrackedObjectsVK::Track(std::shared_ptr buffer) { + if (!buffer) { + return; + } + tracked_buffers_.insert(std::move(buffer)); +} + +bool TrackedObjectsVK::IsTracking( + const std::shared_ptr& buffer) const { + if (!buffer) { + return false; + } + return tracked_buffers_.find(buffer) != tracked_buffers_.end(); +} + +void TrackedObjectsVK::Track(std::shared_ptr texture) { + if (!texture) { + return; + } + tracked_textures_.insert(std::move(texture)); +} + +bool TrackedObjectsVK::IsTracking( + const std::shared_ptr& texture) const { + if (!texture) { + return false; + } + return tracked_textures_.find(texture) != tracked_textures_.end(); +} + +vk::CommandBuffer TrackedObjectsVK::GetCommandBuffer() const { + return *buffer_; +} + +DescriptorPoolVK& TrackedObjectsVK::GetDescriptorPool() { + return desc_pool_; +} + +GPUProbe& TrackedObjectsVK::GetGPUProbe() const { + return *probe_.get(); +} + +} // namespace impeller diff --git a/impeller/renderer/backend/vulkan/tracked_objects_vk.h b/impeller/renderer/backend/vulkan/tracked_objects_vk.h new file mode 100644 index 0000000000000..687b085b53708 --- /dev/null +++ b/impeller/renderer/backend/vulkan/tracked_objects_vk.h @@ -0,0 +1,61 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_TRACKED_OBJECTS_VK_H_ +#define FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_TRACKED_OBJECTS_VK_H_ + +#include + +#include "impeller/renderer/backend/vulkan/command_encoder_vk.h" +#include "impeller/renderer/backend/vulkan/context_vk.h" + +namespace impeller { + +/// @brief A per-frame object used to track resource lifetimes and allocate +/// command buffers and descriptor sets. +class TrackedObjectsVK { + public: + explicit TrackedObjectsVK(const std::weak_ptr& context, + const std::shared_ptr& pool, + std::unique_ptr probe); + + ~TrackedObjectsVK(); + + bool IsValid() const; + + void Track(std::shared_ptr object); + + void Track(std::shared_ptr buffer); + + bool IsTracking(const std::shared_ptr& buffer) const; + + void Track(std::shared_ptr texture); + + bool IsTracking(const std::shared_ptr& texture) const; + + vk::CommandBuffer GetCommandBuffer() const; + + DescriptorPoolVK& GetDescriptorPool(); + + GPUProbe& GetGPUProbe() const; + + private: + DescriptorPoolVK desc_pool_; + // `shared_ptr` since command buffers have a link to the command pool. + std::shared_ptr pool_; + vk::UniqueCommandBuffer buffer_; + std::set> tracked_objects_; + std::set> tracked_buffers_; + std::set> tracked_textures_; + std::unique_ptr probe_; + bool is_valid_ = false; + + TrackedObjectsVK(const TrackedObjectsVK&) = delete; + + TrackedObjectsVK& operator=(const TrackedObjectsVK&) = delete; +}; + +} // namespace impeller + +#endif // FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_TRACKED_OBJECTS_VK_H_