Go to the documentation of this file.
32 #include <unordered_map>
45 class VulkanMemoryPage;
46 class VulkanMemoryManager;
68 rhs.UnalignedOffset = 0;
79 rhs.UnalignedOffset = 0;
99 VkDeviceSize PageSize,
100 uint32_t MemoryTypeIndex,
102 VkMemoryAllocateFlags AllocateFlags) noexcept;
107 m_ParentMemoryMgr {rhs.m_ParentMemoryMgr },
108 m_AllocationMgr {std::move(rhs.m_AllocationMgr)},
109 m_VkMemory {std::move(rhs.m_VkMemory) },
110 m_CPUMemory {rhs.m_CPUMemory }
112 rhs.m_CPUMemory =
nullptr;
143 void* m_CPUMemory =
nullptr;
154 VkDeviceSize DeviceLocalPageSize,
155 VkDeviceSize HostVisiblePageSize,
156 VkDeviceSize DeviceLocalReserveSize,
157 VkDeviceSize HostVisibleReserveSize) :
177 m_Pages {std::move(rhs.m_Pages) },
202 VulkanMemoryAllocation
Allocate(VkDeviceSize Size, VkDeviceSize Alignment, uint32_t MemoryTypeIndex,
bool HostVisible, VkMemoryAllocateFlags AllocateFlags);
203 VulkanMemoryAllocation
Allocate(
const VkMemoryRequirements& MemReqs, VkMemoryPropertyFlags MemoryProps, VkMemoryAllocateFlags AllocateFlags);
229 VkMemoryAllocateFlags _AllocateFlags) :
251 std::unordered_multimap<MemoryPageIndex, VulkanMemoryPage, MemoryPageIndex::Hasher>
m_Pages;
bool IsEmpty() const
Definition: VariableSizeAllocationsManager.hpp:356
const VkDeviceSize m_HostVisibleReserveSize
Definition: VulkanMemoryManager.hpp:256
std::array< VkDeviceSize, 2 > m_PeakUsedSize
Definition: VulkanMemoryManager.hpp:262
Definition: VulkanMemoryManager.hpp:220
bool IsFull() const
Definition: VariableSizeAllocationsManager.hpp:355
VulkanMemoryPage(VulkanMemoryManager &ParentMemoryMgr, VkDeviceSize PageSize, uint32_t MemoryTypeIndex, bool IsHostVisible, VkMemoryAllocateFlags AllocateFlags) noexcept
Definition: VulkanMemoryManager.cpp:43
VulkanMemoryManager(VulkanMemoryManager &&rhs) noexcept
Definition: VulkanMemoryManager.hpp:172
std::string m_MgrName
Definition: VulkanMemoryManager.hpp:212
const bool IsHostVisible
Definition: VulkanMemoryManager.hpp:224
Definition: VariableSizeAllocationsManager.hpp:64
Diligent::IMemoryAllocator & m_Allocator
Definition: VulkanMemoryManager.hpp:217
Definition: VulkanLogicalDevice.hpp:88
VulkanMemoryAllocation() noexcept
Definition: VulkanMemoryManager.hpp:50
bool operator==(const MemoryPageIndex &rhs) const
Definition: VulkanMemoryManager.hpp:235
OffsetType GetMaxSize() const
Definition: VariableSizeAllocationsManager.hpp:357
const VkDeviceSize m_HostVisiblePageSize
Definition: VulkanMemoryManager.hpp:254
DEFINE_VULKAN_OBJECT_WRAPPER(DeviceMemory) DeviceMemoryWrapper
Definition: VulkanLogicalDevice.hpp:73
void OnFreeAllocation(VkDeviceSize Size, bool IsHostVisble)
Definition: VulkanMemoryManager.cpp:241
const VulkanLogicalDevice & m_LogicalDevice
Definition: VulkanMemoryManager.hpp:214
OffsetType GetUsedSize() const
Definition: VariableSizeAllocationsManager.hpp:359
std::array< VkDeviceSize, 2 > m_CurrAllocatedSize
Definition: VulkanMemoryManager.hpp:263
const VkDeviceSize m_DeviceLocalPageSize
Definition: VulkanMemoryManager.hpp:253
~VulkanMemoryManager()
Definition: VulkanMemoryManager.cpp:246
VulkanMemoryAllocation(VulkanMemoryAllocation &&rhs) noexcept
Definition: VulkanMemoryManager.hpp:62
VulkanMemoryAllocation Allocate(VkDeviceSize Size, VkDeviceSize Alignment, uint32_t MemoryTypeIndex, bool HostVisible, VkMemoryAllocateFlags AllocateFlags)
Definition: VulkanMemoryManager.cpp:161
Definition: VulkanMemoryManager.hpp:243
MemoryPageIndex(uint32_t _MemoryTypeIndex, bool _IsHostVisible, VkMemoryAllocateFlags _AllocateFlags)
Definition: VulkanMemoryManager.hpp:227
~VulkanMemoryAllocation()
Definition: VulkanMemoryManager.cpp:35
VulkanMemoryPage & operator=(VulkanMemoryPage &)=delete
VkDeviceSize UnalignedOffset
Definition: VulkanMemoryManager.hpp:91
VulkanMemoryManager(std::string MgrName, const VulkanLogicalDevice &LogicalDevice, const VulkanPhysicalDevice &PhysicalDevice, Diligent::IMemoryAllocator &Allocator, VkDeviceSize DeviceLocalPageSize, VkDeviceSize HostVisiblePageSize, VkDeviceSize DeviceLocalReserveSize, VkDeviceSize HostVisibleReserveSize)
Definition: VulkanMemoryManager.hpp:150
VulkanMemoryAllocation(VulkanMemoryPage *_Page, VkDeviceSize _UnalignedOffset, VkDeviceSize _Size) noexcept
Definition: VulkanMemoryManager.hpp:56
const uint32_t MemoryTypeIndex
Definition: VulkanMemoryManager.hpp:222
std::unordered_multimap< MemoryPageIndex, VulkanMemoryPage, MemoryPageIndex::Hasher > m_Pages
Definition: VulkanMemoryManager.hpp:251
size_t OffsetType
Definition: VariableSizeAllocationsManager.hpp:67
~VulkanMemoryPage()
Definition: VulkanMemoryManager.cpp:88
std::array< std::atomic_int64_t, 2 > m_CurrUsedSize
Definition: VulkanMemoryManager.hpp:261
virtual void OnNewPageCreated(VulkanMemoryPage &NewPage)
Definition: VulkanMemoryManager.hpp:209
virtual void OnPageDestroy(VulkanMemoryPage &Page)
Definition: VulkanMemoryManager.hpp:210
bool IsEmpty() const
Definition: VulkanMemoryManager.hpp:119
std::size_t ComputeHash(const ArgsType &... Args)
Definition: HashUtils.hpp:57
VkDeviceMemory GetVkMemory() const
Definition: VulkanMemoryManager.hpp:128
const VulkanPhysicalDevice & m_PhysicalDevice
Definition: VulkanMemoryManager.hpp:215
const VkDeviceSize m_DeviceLocalReserveSize
Definition: VulkanMemoryManager.hpp:255
Definition: VulkanMemoryManager.hpp:95
std::mutex m_PagesMtx
Definition: VulkanMemoryManager.hpp:219
size_t operator()(const MemoryPageIndex &PageIndex) const
Definition: VulkanMemoryManager.hpp:245
bool IsFull() const
Definition: VulkanMemoryManager.hpp:120
VkDeviceSize GetPageSize() const
Definition: VulkanMemoryManager.hpp:121
VkDeviceSize Size
Definition: VulkanMemoryManager.hpp:92
void ShrinkMemory()
Definition: VulkanMemoryManager.cpp:213
VkDeviceSize GetUsedSize() const
Definition: VulkanMemoryManager.hpp:122
Definition: VulkanPhysicalDevice.hpp:37
Base interface for a raw memory allocator.
Definition: MemoryAllocator.h:41
const VkMemoryAllocateFlags AllocateFlags
Definition: VulkanMemoryManager.hpp:223
VulkanMemoryPage * Page
Definition: VulkanMemoryManager.hpp:90
Definition: VulkanMemoryManager.hpp:146
VulkanMemoryPage(VulkanMemoryPage &&rhs) noexcept
Definition: VulkanMemoryManager.hpp:106
std::array< VkDeviceSize, 2 > m_PeakAllocatedSize
Definition: VulkanMemoryManager.hpp:264
Definition: VulkanCommandBuffer.hpp:33
VulkanMemoryAllocation & operator=(const VulkanMemoryAllocation &)=delete
VulkanMemoryAllocation Allocate(VkDeviceSize size, VkDeviceSize alignment)
Definition: VulkanMemoryManager.cpp:99
VulkanMemoryManager & operator=(const VulkanMemoryManager &)=delete
void * GetCPUMemory() const
Definition: VulkanMemoryManager.hpp:129
Definition: VulkanMemoryManager.hpp:48