mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[Impeller] move TrackedObjectsVK to separate file. (flutter/engine#49773)
I've been thinking about making object tracking per-frame instead of per cmd pass. To make that easier to experiment with, I'd like to move this to its own file.
This commit is contained in:
parent
7f10aa5957
commit
1e3b95a400
@ -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
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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) {}
|
||||
|
||||
@ -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
|
||||
@ -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_
|
||||
Loading…
x
Reference in New Issue
Block a user