ULRE/inc/hgl/graph/VKMemory.h

52 lines
1.7 KiB
C
Raw Normal View History

#ifndef HGL_GRAPH_VULKAN_MEMORY_INCLUDE
#define HGL_GRAPH_VULKAN_MEMORY_INCLUDE
#include<hgl/graph/VK.h>
VK_NAMESPACE_BEGIN
2020-10-21 12:09:15 +08:00
class GPUMemory
{
VkDevice device;
VkDeviceMemory memory;
VkMemoryRequirements req;
uint32_t index;
uint32_t properties;
2020-11-30 13:58:48 +08:00
VkMappedMemoryRange memory_range;
private:
2020-10-21 12:39:22 +08:00
friend class GPUDevice;
2020-11-30 13:58:48 +08:00
GPUMemory(VkDevice dev,VkDeviceMemory dm,const VkMemoryRequirements &mr,const uint32 i,const uint32_t p);
public:
2020-10-21 12:09:15 +08:00
virtual ~GPUMemory();
operator VkDeviceMemory(){return memory;}
const VkMemoryRequirements &GetRequirements ()const{return req;}
const uint32_t GetType ()const{return req.memoryTypeBits;}
const VkDeviceSize GetSize ()const{return req.size;}
2021-02-10 18:53:39 +08:00
const VkDeviceSize GetAlignment ()const{return req.alignment;}
const uint32_t GetTypeIndex ()const{return index;}
const uint32_t GetProperties ()const{return properties;}
void * Map ();
void * Map (VkDeviceSize offset,VkDeviceSize size);
void Unmap ();
bool Write (const void *ptr,VkDeviceSize start, VkDeviceSize size);
bool Write (const void *ptr, VkDeviceSize size) {return Write(ptr,0,size);}
bool Write (const void *ptr) {return Write(ptr,0,req.size);}
bool BindBuffer (VkBuffer buffer);
bool BindImage (VkImage image);
2020-11-30 13:58:48 +08:00
void Flush (VkDeviceSize,VkDeviceSize);
void Flush (VkDeviceSize size){Flush(0,size);}
2020-10-21 12:09:15 +08:00
};//class GPUMemory
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MEMORY_INCLUDE