add GPUMemory::Flush functions.

This commit is contained in:
hyzboy 2020-11-30 13:58:48 +08:00
parent 6a678287d0
commit b3789bca21
2 changed files with 27 additions and 8 deletions

View File

@ -11,18 +11,13 @@ class GPUMemory
uint32_t index; uint32_t index;
uint32_t properties; uint32_t properties;
VkMappedMemoryRange memory_range;
private: private:
friend class GPUDevice; friend class GPUDevice;
GPUMemory(VkDevice dev,VkDeviceMemory dm,const VkMemoryRequirements &mr,const uint32 i,const uint32_t p) GPUMemory(VkDevice dev,VkDeviceMemory dm,const VkMemoryRequirements &mr,const uint32 i,const uint32_t p);
{
device=dev;
memory=dm;
req=mr;
index=i;
properties=p;
}
public: public:
@ -48,6 +43,9 @@ public:
bool BindBuffer (VkBuffer buffer); bool BindBuffer (VkBuffer buffer);
bool BindImage (VkImage image); bool BindImage (VkImage image);
void Flush (VkDeviceSize,VkDeviceSize);
void Flush (VkDeviceSize size){Flush(0,size);}
};//class GPUMemory };//class GPUMemory
VK_NAMESPACE_END VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MEMORY_INCLUDE #endif//HGL_GRAPH_VULKAN_MEMORY_INCLUDE

View File

@ -24,6 +24,19 @@ GPUMemory *GPUDevice::CreateMemory(const VkMemoryRequirements &req,uint32_t prop
return(new GPUMemory(attr->device,memory,req,index,properties)); return(new GPUMemory(attr->device,memory,req,index,properties));
} }
GPUMemory::GPUMemory(VkDevice dev,VkDeviceMemory dm,const VkMemoryRequirements &mr,const uint32 i,const uint32_t p)
{
device=dev;
memory=dm;
req=mr;
index=i;
properties=p;
memory_range.sType =VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
memory_range.pNext =nullptr;
memory_range.memory =memory;
}
GPUMemory::~GPUMemory() GPUMemory::~GPUMemory()
{ {
vkFreeMemory(device,memory,nullptr); vkFreeMemory(device,memory,nullptr);
@ -57,6 +70,14 @@ void GPUMemory::Unmap()
vkUnmapMemory(device,memory); vkUnmapMemory(device,memory);
} }
void GPUMemory::Flush(VkDeviceSize offset,VkDeviceSize size)
{
memory_range.offset =offset;
memory_range.size =size;
vkFlushMappedMemoryRanges(device,1,&memory_range);
}
bool GPUMemory::Write(const void *ptr,VkDeviceSize start,VkDeviceSize size) bool GPUMemory::Write(const void *ptr,VkDeviceSize start,VkDeviceSize size)
{ {
if(!ptr)return(false); if(!ptr)return(false);