optimized VKArrayBuffer
This commit is contained in:
parent
05e96c58ba
commit
59b02bcb8c
@ -23,11 +23,10 @@ namespace hgl
|
|||||||
VkBufferUsageFlags buffer_usage_flags;
|
VkBufferUsageFlags buffer_usage_flags;
|
||||||
|
|
||||||
uint item_length; ///<单个数据长度
|
uint item_length; ///<单个数据长度
|
||||||
|
uint unit_size;
|
||||||
|
|
||||||
VKMemoryAllocator *vk_ma;
|
VKMemoryAllocator *vk_ma;
|
||||||
|
|
||||||
uint32_t offset_alignment;
|
|
||||||
|
|
||||||
Collection *coll;
|
Collection *coll;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -35,13 +34,17 @@ namespace hgl
|
|||||||
void * Map(const uint32 start,const uint32 count);
|
void * Map(const uint32 start,const uint32 count);
|
||||||
void Flush(const uint32 count);
|
void Flush(const uint32 count);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
GPUArrayBuffer(GPUDevice *dev,const VkBufferUsageFlags &flag,const uint il,const uint us);
|
||||||
|
|
||||||
|
friend class GPUDevice;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
GPUArrayBuffer(GPUDevice *dev,VkBufferUsageFlags flags,const uint il,VkDescriptorType dt);
|
|
||||||
virtual ~GPUArrayBuffer();
|
virtual ~GPUArrayBuffer();
|
||||||
|
|
||||||
const uint32_t GetOffsetAlignment()const{return offset_alignment;}
|
const uint32_t GetUnitSize()const{return unit_size;}
|
||||||
const uint32_t GetUnitSize()const;
|
|
||||||
DeviceBuffer * GetBuffer();
|
DeviceBuffer * GetBuffer();
|
||||||
|
|
||||||
uint32 Alloc(const uint32 max_count); ///<预分配空间
|
uint32 Alloc(const uint32 max_count); ///<预分配空间
|
||||||
@ -56,7 +59,7 @@ namespace hgl
|
|||||||
|
|
||||||
if(!ptr)return(false);
|
if(!ptr)return(false);
|
||||||
|
|
||||||
ubo_access->Start((uchar *)ptr,offset_alignment,count);
|
ubo_access->Start((uchar *)ptr,start,count);
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ VK_NAMESPACE_BEGIN
|
|||||||
class TileData;
|
class TileData;
|
||||||
class TileFont;
|
class TileFont;
|
||||||
class FontSource;
|
class FontSource;
|
||||||
|
class GPUArrayBuffer;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPU设备创建信息
|
* GPU设备创建信息
|
||||||
@ -148,6 +149,9 @@ public: //Buffer相关
|
|||||||
|
|
||||||
#undef CREATE_BUFFER_OBJECT
|
#undef CREATE_BUFFER_OBJECT
|
||||||
|
|
||||||
|
GPUArrayBuffer *CreateUBO(const VkDeviceSize &uint_size);
|
||||||
|
GPUArrayBuffer *CreateSSBO(const VkDeviceSize &uint_size);
|
||||||
|
|
||||||
public: //Image
|
public: //Image
|
||||||
|
|
||||||
VkImage CreateImage (VkImageCreateInfo *);
|
VkImage CreateImage (VkImageCreateInfo *);
|
||||||
|
@ -25,7 +25,7 @@ public:
|
|||||||
|
|
||||||
const uint32_t GetBufferUsageFlagBits ()const{return buffer_usage_flag_bits;}
|
const uint32_t GetBufferUsageFlagBits ()const{return buffer_usage_flag_bits;}
|
||||||
|
|
||||||
DeviceBuffer * GetBuffer (){return gpu_buffer;}
|
DeviceBuffer * GetBuffer (){return gpu_buffer;}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -8,23 +8,13 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
namespace graph
|
namespace graph
|
||||||
{
|
{
|
||||||
GPUArrayBuffer::GPUArrayBuffer(GPUDevice *dev,VkBufferUsageFlags flags,const uint il,VkDescriptorType dt)
|
GPUArrayBuffer::GPUArrayBuffer(GPUDevice *dev,const VkBufferUsageFlags &flag,const uint il,const uint us)
|
||||||
{
|
{
|
||||||
device=dev;
|
device=dev;
|
||||||
buffer_usage_flags=flags;
|
|
||||||
item_length=il;
|
item_length=il;
|
||||||
|
buffer_usage_flags=flag;
|
||||||
|
|
||||||
if(dt==VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
|
unit_size=hgl_align<VkDeviceSize>(item_length,us);
|
||||||
||dt==VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC)
|
|
||||||
offset_alignment=device->GetUBOAlign();
|
|
||||||
else
|
|
||||||
if(dt==VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
|
|
||||||
||dt==VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
|
|
||||||
offset_alignment=device->GetSSBOAlign();
|
|
||||||
else
|
|
||||||
offset_alignment=0;
|
|
||||||
|
|
||||||
const uint32_t unit_size=hgl_align<uint32_t>(item_length,offset_alignment);
|
|
||||||
|
|
||||||
vk_ma=new VKMemoryAllocator(device,buffer_usage_flags,unit_size); // construct function is going to set AllocUnitSize by minUniformOffsetAlignment
|
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);
|
MemoryBlock *mb=new MemoryBlock(vk_ma);
|
||||||
@ -37,11 +27,6 @@ namespace hgl
|
|||||||
delete coll;
|
delete coll;
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint32_t GPUArrayBuffer::GetUnitSize()const
|
|
||||||
{
|
|
||||||
return coll->GetUnitBytes();
|
|
||||||
}
|
|
||||||
|
|
||||||
DeviceBuffer *GPUArrayBuffer::GetBuffer()
|
DeviceBuffer *GPUArrayBuffer::GetBuffer()
|
||||||
{
|
{
|
||||||
return vk_ma->GetBuffer();
|
return vk_ma->GetBuffer();
|
||||||
@ -69,5 +54,21 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
vk_ma->Flush(count*GetUnitSize());
|
vk_ma->Flush(count*GetUnitSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GPUArrayBuffer *GPUDevice::CreateUBO(const VkDeviceSize &uint_size)
|
||||||
|
{
|
||||||
|
return(new GPUArrayBuffer( this,
|
||||||
|
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
|
||||||
|
uint_size,
|
||||||
|
GetUBOAlign()));
|
||||||
|
}
|
||||||
|
|
||||||
|
GPUArrayBuffer *GPUDevice::CreateSSBO(const VkDeviceSize &uint_size)
|
||||||
|
{
|
||||||
|
return(new GPUArrayBuffer( this,
|
||||||
|
VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
|
||||||
|
uint_size,
|
||||||
|
GetSSBOAlign()));
|
||||||
|
}
|
||||||
}//namespace graph
|
}//namespace graph
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
|
Loading…
x
Reference in New Issue
Block a user