diff --git a/inc/hgl/graph/VKMemory.h b/inc/hgl/graph/VKMemory.h index 6013c68c..4d5c5759 100644 --- a/inc/hgl/graph/VKMemory.h +++ b/inc/hgl/graph/VKMemory.h @@ -11,18 +11,13 @@ class GPUMemory uint32_t index; uint32_t properties; + VkMappedMemoryRange memory_range; + private: friend class GPUDevice; - 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; - } + GPUMemory(VkDevice dev,VkDeviceMemory dm,const VkMemoryRequirements &mr,const uint32 i,const uint32_t p); public: @@ -48,6 +43,9 @@ public: bool BindBuffer (VkBuffer buffer); bool BindImage (VkImage image); + + void Flush (VkDeviceSize,VkDeviceSize); + void Flush (VkDeviceSize size){Flush(0,size);} };//class GPUMemory VK_NAMESPACE_END #endif//HGL_GRAPH_VULKAN_MEMORY_INCLUDE diff --git a/src/SceneGraph/Vulkan/VKMemory.cpp b/src/SceneGraph/Vulkan/VKMemory.cpp index f8ecc695..b7420d6a 100644 --- a/src/SceneGraph/Vulkan/VKMemory.cpp +++ b/src/SceneGraph/Vulkan/VKMemory.cpp @@ -24,6 +24,19 @@ GPUMemory *GPUDevice::CreateMemory(const VkMemoryRequirements &req,uint32_t prop 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() { vkFreeMemory(device,memory,nullptr); @@ -57,6 +70,14 @@ void GPUMemory::Unmap() 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) { if(!ptr)return(false);