From 1bee73e46f654b1a91d6567e10d6d031ecb34b6e Mon Sep 17 00:00:00 2001 From: Anish Bhobe Date: Sun, 6 Apr 2025 19:31:12 +0200 Subject: [PATCH] [WIP] Move to shared_ptr. --- aster/include/aster/core/buffer.h | 5 ++ aster/include/aster/core/global.h | 2 +- aster/include/aster/core/image.h | 4 ++ aster/include/aster/core/image_view.h | 7 ++- aster/include/aster/systems/commit_manager.h | 2 - aster/include/aster/systems/image_manager.h | 2 +- aster/include/aster/systems/manager.h | 63 ++----------------- .../include/aster/systems/resource_manager.h | 5 +- aster/include/aster/systems/view_manager.h | 2 +- 9 files changed, 24 insertions(+), 68 deletions(-) diff --git a/aster/include/aster/core/buffer.h b/aster/include/aster/core/buffer.h index 96dd789..aa962a6 100644 --- a/aster/include/aster/core/buffer.h +++ b/aster/include/aster/core/buffer.h @@ -65,6 +65,11 @@ struct Buffer } void Destroy(); + ~Buffer() + { + Destroy(); + } + void Write(usize offset, usize size, const void *data); void Allocate(const Device *device, usize size, vk::BufferUsageFlags bufferUsage, diff --git a/aster/include/aster/core/global.h b/aster/include/aster/core/global.h index 1268586..bfac76f 100644 --- a/aster/include/aster/core/global.h +++ b/aster/include/aster/core/global.h @@ -222,4 +222,4 @@ struct fmt::formatter> : nested_fo }; template -using Ref = eastl::intrusive_ptr; \ No newline at end of file +using Ref = std::shared_ptr; \ No newline at end of file diff --git a/aster/include/aster/core/image.h b/aster/include/aster/core/image.h index ac304f1..2912779 100644 --- a/aster/include/aster/core/image.h +++ b/aster/include/aster/core/image.h @@ -106,6 +106,10 @@ struct Image } void Destroy(); + ~Image() + { + Destroy(); + } static bool Conforms(const Image &) diff --git a/aster/include/aster/core/image_view.h b/aster/include/aster/core/image_view.h index 072a40f..825b65b 100644 --- a/aster/include/aster/core/image_view.h +++ b/aster/include/aster/core/image_view.h @@ -56,7 +56,7 @@ struct View [[nodiscard]] bool IsValid() const { - return m_Image; + return Cast(m_Image); } void @@ -67,6 +67,11 @@ struct View m_Image->DestroyView(Take(m_View)); } + + ~View() + { + Destroy(); + } }; struct ImageView : View diff --git a/aster/include/aster/systems/commit_manager.h b/aster/include/aster/systems/commit_manager.h index 4dbdbd9..be684fd 100644 --- a/aster/include/aster/systems/commit_manager.h +++ b/aster/include/aster/systems/commit_manager.h @@ -82,8 +82,6 @@ class CommitManager }; }; - static_assert(sizeof(Entry) == 24); - eastl::vector m_Data; FreeList m_FreeList; eastl::intrusive_hash_map m_InUse; diff --git a/aster/include/aster/systems/image_manager.h b/aster/include/aster/systems/image_manager.h index 2c83d84..fbf3556 100644 --- a/aster/include/aster/systems/image_manager.h +++ b/aster/include/aster/systems/image_manager.h @@ -18,7 +18,7 @@ static Ref CastImage(const concepts::ImageRef auto &from) { assert(TTo::Conforms(*from.get())); - return Recast(from.get()); + return std::reinterpret_pointer_cast(from); } struct Texture2DCreateInfo diff --git a/aster/include/aster/systems/manager.h b/aster/include/aster/systems/manager.h index 7d77c30..8dee644 100644 --- a/aster/include/aster/systems/manager.h +++ b/aster/include/aster/systems/manager.h @@ -27,66 +27,19 @@ class Manager /** * Constructor for the Manager class template. * @param device Device with which resources are created. - * @param maxCount Max number of resources that can be created (maxCount <= Handle::INDEX_MASK) */ - explicit Manager(const Device *device, const u32 maxCount) - : m_Data{maxCount} - , m_Device{device} + explicit Manager(const Device *device, const u32) + : m_Device{device} { - for (auto &element : m_Data) - { - m_FreeList.Push(element); - } } virtual ~Manager() { - if constexpr (concepts::DeviceDestructible) - { - for (auto &element : m_Data) - { - element.Destroy(m_Device); - } - } - m_Device = nullptr; } - // TODO: Work on deletion!! - void - Sweep() - requires concepts::DeviceDestructible - { - for (i64 i = m_Data.size() - 1; i >= 0; --i) - { - if (auto *pIter = &m_Data[i]; !pIter->IsReferenced()) - { - pIter->Destroy(m_Device); - m_FreeList.Push(*pIter); - } - } - } - - void - Sweep() - requires concepts::SelfDestructible - { - for (i64 i = m_Data.size() - 1; i >= 0; --i) - { - if (auto *pIter = &m_Data[i]; !pIter->IsValid()) - { - pIter->Destroy(); - m_FreeList.Push(*pIter); - } - } - } - PIN_MEMORY(Manager); - private: - eastl::vector m_Data; // Data also keeps the freelist during 'not use'. - FreeList m_FreeList; - protected: const Device *m_Device; @@ -97,15 +50,9 @@ class Manager [[nodiscard]] Handle Alloc() { - ERROR_IF(m_FreeList.Empty(), "Max buffers allocated.") THEN_ABORT(-1); - - Type &pAlloc = m_FreeList.Pop(); - memset(&pAlloc, 0, sizeof pAlloc); - if constexpr (concepts::SelfDestructible) - { - pAlloc.m_Device = m_Device; - } - return {&pAlloc}; + auto object = std::make_shared(); + object->m_Device = m_Device; + return object; } }; } // namespace systems \ No newline at end of file diff --git a/aster/include/aster/systems/resource_manager.h b/aster/include/aster/systems/resource_manager.h index df18dcd..8629f30 100644 --- a/aster/include/aster/systems/resource_manager.h +++ b/aster/include/aster/systems/resource_manager.h @@ -138,10 +138,7 @@ class ResourceManager void Update() { - m_Views.Sweep(); - m_Images.Sweep(); - m_Buffers.Sweep(); - m_Samplers.Sweep(); + // TODO: Remove } ~ResourceManager() = default; diff --git a/aster/include/aster/systems/view_manager.h b/aster/include/aster/systems/view_manager.h index a25738b..076811a 100644 --- a/aster/include/aster/systems/view_manager.h +++ b/aster/include/aster/systems/view_manager.h @@ -20,7 +20,7 @@ static Ref CastView(const concepts::ImageViewRef auto &from) { assert(TTo::ImageType::Conforms(*from->m_Image.get())); - return Recast(from.get()); + return std::reinterpret_pointer_cast(from); } template