From 38f9a2896f764f540937de726616e318b42b1df3 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Wed, 29 Mar 2023 11:45:15 +0800 Subject: [PATCH] optimized codes of VKArrayBuffer --- inc/hgl/graph/VKArrayBuffer.h | 11 +++----- src/SceneGraph/Vulkan/VKArrayBuffer.cpp | 34 ++++++++++++------------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/inc/hgl/graph/VKArrayBuffer.h b/inc/hgl/graph/VKArrayBuffer.h index 962ddd54..d72ec2e1 100644 --- a/inc/hgl/graph/VKArrayBuffer.h +++ b/inc/hgl/graph/VKArrayBuffer.h @@ -19,10 +19,6 @@ namespace hgl { protected: - GPUDevice *device; - VkBufferUsageFlags buffer_usage_flags; - - uint item_length; ///<单个数据长度 uint unit_size; VKMemoryAllocator *vk_ma; @@ -36,7 +32,7 @@ namespace hgl private: - GPUArrayBuffer(GPUDevice *dev,const VkBufferUsageFlags &flag,const uint il,const uint us); + GPUArrayBuffer(VKMemoryAllocator *,const uint); friend class GPUDevice; @@ -59,11 +55,12 @@ namespace hgl if(!ptr)return(false); - ubo_access->Start((uchar *)ptr,start,count); + ubo_access->Start((uchar *)ptr,unit_size,count); return(true); } - void End(UBODynamicAccess *ubo_access) + template + void End(UBODynamicAccess *ubo_access) { if(!ubo_access)return; diff --git a/src/SceneGraph/Vulkan/VKArrayBuffer.cpp b/src/SceneGraph/Vulkan/VKArrayBuffer.cpp index 71c3c3d2..595d9c36 100644 --- a/src/SceneGraph/Vulkan/VKArrayBuffer.cpp +++ b/src/SceneGraph/Vulkan/VKArrayBuffer.cpp @@ -8,15 +8,11 @@ namespace hgl { namespace graph { - GPUArrayBuffer::GPUArrayBuffer(GPUDevice *dev,const VkBufferUsageFlags &flag,const uint il,const uint us) + GPUArrayBuffer::GPUArrayBuffer(VKMemoryAllocator *va,const uint us) { - device=dev; - item_length=il; - buffer_usage_flags=flag; + vk_ma=va; + unit_size=us; - unit_size=hgl_align(item_length,us); - - vk_ma=new VKMemoryAllocator(device,buffer_usage_flags,unit_size); // construct function is going to set AllocUnitSize by minUniformOffsetAlignment MemoryBlock *mb=new MemoryBlock(vk_ma); coll=new Collection(unit_size,mb); @@ -52,23 +48,25 @@ namespace hgl void GPUArrayBuffer::Flush(const uint32 count) { - vk_ma->Flush(count*GetUnitSize()); + vk_ma->Flush(count*unit_size); } - GPUArrayBuffer *GPUDevice::CreateUBO(const VkDeviceSize &uint_size) + GPUArrayBuffer *GPUDevice::CreateUBO(const VkDeviceSize &item_length) { - return(new GPUArrayBuffer( this, - VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, - uint_size, - GetUBOAlign())); + const uint unit_size=hgl_align(item_length,GetUBOAlign()); + + auto vk_ma=new VKMemoryAllocator(this,VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,unit_size); + + return(new GPUArrayBuffer(vk_ma,unit_size)); } - GPUArrayBuffer *GPUDevice::CreateSSBO(const VkDeviceSize &uint_size) + GPUArrayBuffer *GPUDevice::CreateSSBO(const VkDeviceSize &item_length) { - return(new GPUArrayBuffer( this, - VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, - uint_size, - GetSSBOAlign())); + const uint unit_size=hgl_align(item_length,GetSSBOAlign()); + + auto vk_ma=new VKMemoryAllocator(this,VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,unit_size); + + return(new GPUArrayBuffer(vk_ma,unit_size)); } }//namespace graph }//namespace hgl