From b3789bca2151f158b37d9fa1f9e87442df538579 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Mon, 30 Nov 2020 13:58:48 +0800 Subject: [PATCH] add GPUMemory::Flush functions. --- inc/hgl/graph/VKMemory.h | 14 ++++++-------- src/SceneGraph/Vulkan/VKMemory.cpp | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) 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);