Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Impeller] move TrackedObjectsVK to separate file. #49773

Merged
merged 4 commits into from
Jan 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions ci/licenses_golden/licenses_flutter
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions impeller/renderer/backend/vulkan/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
85 changes: 1 addition & 84 deletions impeller/renderer/backend/vulkan/command_encoder_vk.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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<const ContextVK>& context,
const std::shared_ptr<CommandPoolVK>& pool,
std::unique_ptr<GPUProbe> 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<SharedObjectVK> object) {
if (!object) {
return;
}
tracked_objects_.insert(std::move(object));
}

void Track(std::shared_ptr<const DeviceBuffer> buffer) {
if (!buffer) {
return;
}
tracked_buffers_.insert(std::move(buffer));
}

bool IsTracking(const std::shared_ptr<const DeviceBuffer>& buffer) const {
if (!buffer) {
return false;
}
return tracked_buffers_.find(buffer) != tracked_buffers_.end();
}

void Track(std::shared_ptr<const TextureSourceVK> texture) {
if (!texture) {
return;
}
tracked_textures_.insert(std::move(texture));
}

bool IsTracking(const std::shared_ptr<const TextureSourceVK>& 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<CommandPoolVK> pool_;
vk::UniqueCommandBuffer buffer_;
std::set<std::shared_ptr<SharedObjectVK>> tracked_objects_;
std::set<std::shared_ptr<const DeviceBuffer>> tracked_buffers_;
std::set<std::shared_ptr<const TextureSourceVK>> tracked_textures_;
std::unique_ptr<GPUProbe> probe_;
bool is_valid_ = false;

TrackedObjectsVK(const TrackedObjectsVK&) = delete;

TrackedObjectsVK& operator=(const TrackedObjectsVK&) = delete;
};

CommandEncoderFactoryVK::CommandEncoderFactoryVK(
const std::weak_ptr<const ContextVK>& context)
: context_(context) {}
Expand Down
88 changes: 88 additions & 0 deletions impeller/renderer/backend/vulkan/tracked_objects_vk.cc
Original file line number Diff line number Diff line change
@@ -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<const ContextVK>& context,
const std::shared_ptr<CommandPoolVK>& pool,
std::unique_ptr<GPUProbe> 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<SharedObjectVK> object) {
if (!object) {
return;
}
tracked_objects_.insert(std::move(object));
}

void TrackedObjectsVK::Track(std::shared_ptr<const DeviceBuffer> buffer) {
if (!buffer) {
return;
}
tracked_buffers_.insert(std::move(buffer));
}

bool TrackedObjectsVK::IsTracking(
const std::shared_ptr<const DeviceBuffer>& buffer) const {
if (!buffer) {
return false;
}
return tracked_buffers_.find(buffer) != tracked_buffers_.end();
}

void TrackedObjectsVK::Track(std::shared_ptr<const TextureSourceVK> texture) {
if (!texture) {
return;
}
tracked_textures_.insert(std::move(texture));
}

bool TrackedObjectsVK::IsTracking(
const std::shared_ptr<const TextureSourceVK>& 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
61 changes: 61 additions & 0 deletions impeller/renderer/backend/vulkan/tracked_objects_vk.h
Original file line number Diff line number Diff line change
@@ -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 <memory>

#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<const ContextVK>& context,
const std::shared_ptr<CommandPoolVK>& pool,
std::unique_ptr<GPUProbe> probe);

~TrackedObjectsVK();

bool IsValid() const;

void Track(std::shared_ptr<SharedObjectVK> object);

void Track(std::shared_ptr<const DeviceBuffer> buffer);

bool IsTracking(const std::shared_ptr<const DeviceBuffer>& buffer) const;

void Track(std::shared_ptr<const TextureSourceVK> texture);

bool IsTracking(const std::shared_ptr<const TextureSourceVK>& 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<CommandPoolVK> pool_;
vk::UniqueCommandBuffer buffer_;
std::set<std::shared_ptr<SharedObjectVK>> tracked_objects_;
std::set<std::shared_ptr<const DeviceBuffer>> tracked_buffers_;
std::set<std::shared_ptr<const TextureSourceVK>> tracked_textures_;
std::unique_ptr<GPUProbe> 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_