Go to the documentation of this file.
30 #include <unordered_map>
60 class RenderDeviceVkImpl;
68 VkDeviceSize _AlignedOffset,
69 VkBuffer _vkBuffer) noexcept :
92 VkDeviceSize PageSize);
112 return m_Pages.size();
117 std::string m_HeapName;
118 const VkDeviceSize m_PageSize;
120 struct UploadPageInfo
125 Uint8* _CPUAddress) :
126 MemAllocation{std::move(_MemAllocation)},
127 Buffer {std::move(_Buffer) },
128 CPUAddress {_CPUAddress }
135 Uint8*
const CPUAddress =
nullptr;
137 std::vector<UploadPageInfo> m_Pages;
141 VkBuffer vkBuffer = VK_NULL_HANDLE;
142 Uint8* CurrCPUAddress =
nullptr;
143 VkDeviceSize CurrOffset = 0;
144 VkDeviceSize AvailableSize = 0;
146 void Reset(UploadPageInfo& NewPage, VkDeviceSize PageSize)
148 vkBuffer = NewPage.Buffer;
149 CurrCPUAddress = NewPage.CPUAddress;
151 AvailableSize = PageSize;
154 void Advance(VkDeviceSize SizeInBytes)
156 CurrCPUAddress += SizeInBytes;
157 CurrOffset += SizeInBytes;
158 AvailableSize -= SizeInBytes;
162 VkDeviceSize m_CurrFrameSize = 0;
163 VkDeviceSize m_PeakFrameSize = 0;
164 VkDeviceSize m_CurrAllocatedSize = 0;
165 VkDeviceSize m_PeakAllocatedSize = 0;
167 UploadPageInfo CreateNewPage(VkDeviceSize SizeInBytes)
const;
Render device implementation in Vulkan backend.
Definition: RenderDeviceVkImpl.hpp:58
uint64_t Uint64
64-bit unsigned integer
Definition: BasicTypes.h:50
void ReleaseAllocatedPages(Uint64 CmdQueueMask)
Definition: VulkanUploadHeap.cpp:140
VulkanUploadAllocation & operator=(const VulkanUploadAllocation &)=delete
Definition: VulkanUploadHeap.hpp:87
VulkanUploadAllocation Allocate(VkDeviceSize SizeInBytes, VkDeviceSize Alignment)
Definition: VulkanUploadHeap.cpp:93
VulkanUploadHeap & operator=(const VulkanUploadHeap &)=delete
DEFINE_VULKAN_OBJECT_WRAPPER(Buffer) BufferWrapper
Definition: VulkanLogicalDevice.hpp:69
void * CPUAddress
Definition: VulkanUploadHeap.hpp:82
VulkanUploadAllocation(void *_CPUAddress, VkDeviceSize _Size, VkDeviceSize _AlignedOffset, VkBuffer _vkBuffer) noexcept
Definition: VulkanUploadHeap.hpp:66
Definition: VulkanUploadHeap.hpp:62
VkDeviceSize AlignedOffset
Definition: VulkanUploadHeap.hpp:84
VulkanUploadHeap(RenderDeviceVkImpl &RenderDevice, std::string HeapName, VkDeviceSize PageSize)
Definition: VulkanUploadHeap.cpp:35
size_t GetStalePagesCount() const
Definition: VulkanUploadHeap.hpp:110
VulkanUploadAllocation() noexcept
Definition: VulkanUploadHeap.hpp:64
VkBuffer vkBuffer
Definition: VulkanUploadHeap.hpp:81
VkDeviceSize Size
Definition: VulkanUploadHeap.hpp:83
uint8_t Uint8
8-bit unsigned integer
Definition: BasicTypes.h:53
~VulkanUploadHeap()
Definition: VulkanUploadHeap.cpp:46
Definition: VulkanMemoryManager.hpp:48
The library uses Direct3D-style math:
Definition: AdvancedMath.hpp:37