2021-03-25 20:00:19 +08:00
|
|
|
|
#include<hgl/graph/VKArrayBuffer.h>
|
2021-02-10 18:53:07 +08:00
|
|
|
|
|
|
|
|
|
namespace hgl
|
|
|
|
|
{
|
|
|
|
|
namespace graph
|
|
|
|
|
{
|
|
|
|
|
/**
|
2021-03-25 20:00:19 +08:00
|
|
|
|
* 本类构造函数
|
|
|
|
|
* @param d 设备指针
|
|
|
|
|
* @param s 单个数据长度
|
|
|
|
|
* @param c 数据个数
|
2021-02-10 18:53:07 +08:00
|
|
|
|
*/
|
2021-03-25 20:00:19 +08:00
|
|
|
|
GPUArrayBuffer::GPUArrayBuffer(GPUDevice *d,const uint32_t s,const uint32_t c)
|
2021-02-10 18:53:07 +08:00
|
|
|
|
{
|
2021-03-25 20:00:19 +08:00
|
|
|
|
device=d;
|
|
|
|
|
|
2021-02-10 18:53:07 +08:00
|
|
|
|
item_size=s;
|
|
|
|
|
count=c;
|
|
|
|
|
alloc_count=power_to_2(c);
|
|
|
|
|
|
|
|
|
|
buf_gpu=nullptr;
|
|
|
|
|
buf_cpu=nullptr;
|
|
|
|
|
offset=nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GPUArrayBuffer::~GPUArrayBuffer()
|
|
|
|
|
{
|
2021-03-25 20:00:19 +08:00
|
|
|
|
SAFE_CLEAR_ARRAY(offset);
|
2021-02-10 18:53:07 +08:00
|
|
|
|
SAFE_CLEAR(buf_gpu);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GPUArrayBuffer::Clear()
|
|
|
|
|
{
|
|
|
|
|
count=0;
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-25 20:00:19 +08:00
|
|
|
|
bool GPUArrayBuffer::Init(const uint32_t c)
|
|
|
|
|
{
|
|
|
|
|
if(c<=0)return(false);
|
|
|
|
|
|
|
|
|
|
if(!buf_gpu)
|
|
|
|
|
{
|
|
|
|
|
count=c;
|
|
|
|
|
alloc_count=power_to_2(count);
|
|
|
|
|
|
|
|
|
|
total_bytes=item_size*alloc_count;
|
2021-02-10 18:53:07 +08:00
|
|
|
|
|
2021-03-25 20:00:19 +08:00
|
|
|
|
if(total_bytes<=0)return(false);
|
|
|
|
|
|
|
|
|
|
buf_gpu=device->CreateUBO(total_bytes);
|
|
|
|
|
buf_cpu=(uint8 *)(buf_gpu->Map());
|
|
|
|
|
|
|
|
|
|
offset=new uint32_t[alloc_count];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-02-10 18:53:07 +08:00
|
|
|
|
}//namespace graph
|
|
|
|
|
}//namespace hgl
|