2 // Created by adam.b on 06/06/17.
5 #ifndef VULKAN_PROJECT_DEVICEMEMORYMANAGER_H
6 #define VULKAN_PROJECT_DEVICEMEMORYMANAGER_H
8 #include <dali/graphics/vulkan/vulkan-types.h>
20 class DeviceMemoryManager;
23 * DeviceMemory represents continuous memory block with particular properties
24 * like being mappable etc. The actual memory is being allocated from DeviceMemory,
25 * however simplest use may assume use of whole DeviceMemory block for a single
31 DeviceMemory(DeviceMemoryManager& manager, Graphics& graphics,
32 const vk::MemoryRequirements& requirements, vk::MemoryPropertyFlags properties);
34 void* Map(uint32_t offset, uint32_t size);
38 void Bind( Image& image, uint32_t offset );
39 void Bind( Buffer& image, uint32_t offset );
42 DeviceMemoryManager& mManager;
45 vk::DeviceMemory mDeviceMemory;
46 vk::MemoryPropertyFlags mProperties;
47 vk::MemoryRequirements mRequirements;
49 std::atomic< uint32_t > mUserCount; // this is just a refcount
55 class DeviceMemoryManager
58 DeviceMemoryManager() = delete;
59 DeviceMemoryManager(Graphics& graphics);
60 ~DeviceMemoryManager() = default;
61 DeviceMemoryManager(const DeviceMemoryManager&) = delete;
62 DeviceMemoryManager(DeviceMemoryManager&&) = default;
64 DeviceMemoryManager& operator=(const DeviceMemoryManager&) = delete;
65 DeviceMemoryManager& operator=(DeviceMemoryManager&&) = default;
67 /* Allocates memory for VkImage */
68 vk::DeviceMemory& Allocate(vk::Image image, vk::MemoryPropertyFlags memoryFlags);
70 /* Allocates memory for VkBuffer */
71 vk::DeviceMemory& Allocate(vk::Buffer image, vk::MemoryPropertyFlags memoryFlags);
73 std::unique_ptr< DeviceMemory > Allocate(vk::MemoryRequirements requirements,
74 vk::MemoryPropertyFlags flags);
76 Graphics& GetGraphics() const
86 } // namespace Graphics
89 #endif //VULKAN_PROJECT_DEVICEMEMORYMANAGER_H