supported SSBAlign in ArrayBuffer
This commit is contained in:
parent
8363275b36
commit
19a20411d8
@ -25,16 +25,16 @@ namespace hgl
|
|||||||
|
|
||||||
VKMemoryAllocator *vk_ma;
|
VKMemoryAllocator *vk_ma;
|
||||||
|
|
||||||
uint32_t ubo_offset_alignment;
|
uint32_t offset_alignment;
|
||||||
|
|
||||||
Collection *coll;
|
Collection *coll;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
GPUArrayBuffer(GPUDevice *dev,VkBufferUsageFlags flags,const uint il);
|
GPUArrayBuffer(GPUDevice *dev,VkBufferUsageFlags flags,const uint il,VkDescriptorType dt);
|
||||||
virtual ~GPUArrayBuffer();
|
virtual ~GPUArrayBuffer();
|
||||||
|
|
||||||
const uint32_t GetOffsetAlignment()const{return ubo_offset_alignment;}
|
const uint32_t GetOffsetAlignment()const{return offset_alignment;}
|
||||||
const uint32_t GetUnitSize()const;
|
const uint32_t GetUnitSize()const;
|
||||||
DeviceBuffer * GetBuffer();
|
DeviceBuffer * GetBuffer();
|
||||||
|
|
||||||
|
@ -140,6 +140,7 @@ public: //Buffer相关
|
|||||||
IndexBuffer * CreateIBO32 ( uint32_t count, SharingMode sm=SharingMode::Exclusive){return CreateIBO(IndexType::U32, count,nullptr,sm);}
|
IndexBuffer * CreateIBO32 ( uint32_t count, SharingMode sm=SharingMode::Exclusive){return CreateIBO(IndexType::U32, count,nullptr,sm);}
|
||||||
|
|
||||||
const VkDeviceSize GetUBOAlign();
|
const VkDeviceSize GetUBOAlign();
|
||||||
|
const VkDeviceSize GetSSBOAlign();
|
||||||
|
|
||||||
#define CREATE_BUFFER_OBJECT(LargeName,type) DeviceBuffer *Create##LargeName( VkDeviceSize size,void *data, SharingMode sm=SharingMode::Exclusive) {return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size ,size,data, sm);} \
|
#define CREATE_BUFFER_OBJECT(LargeName,type) DeviceBuffer *Create##LargeName( VkDeviceSize size,void *data, SharingMode sm=SharingMode::Exclusive) {return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size ,size,data, sm);} \
|
||||||
DeviceBuffer *Create##LargeName( VkDeviceSize size, SharingMode sm=SharingMode::Exclusive) {return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size ,size,nullptr, sm);} \
|
DeviceBuffer *Create##LargeName( VkDeviceSize size, SharingMode sm=SharingMode::Exclusive) {return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size ,size,nullptr, sm);} \
|
||||||
|
@ -8,15 +8,23 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
namespace graph
|
namespace graph
|
||||||
{
|
{
|
||||||
GPUArrayBuffer::GPUArrayBuffer(GPUDevice *dev,VkBufferUsageFlags flags,const uint il)
|
GPUArrayBuffer::GPUArrayBuffer(GPUDevice *dev,VkBufferUsageFlags flags,const uint il,VkDescriptorType dt)
|
||||||
{
|
{
|
||||||
device=dev;
|
device=dev;
|
||||||
buffer_usage_flags=flags;
|
buffer_usage_flags=flags;
|
||||||
item_length=il;
|
item_length=il;
|
||||||
|
|
||||||
ubo_offset_alignment=device->GetUBOAlign();
|
if(dt==VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
|
||||||
|
||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,ubo_offset_alignment);
|
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);
|
||||||
|
@ -9,6 +9,11 @@ const VkDeviceSize GPUDevice::GetUBOAlign()
|
|||||||
return attr->physical_device->GetUBOAlign();
|
return attr->physical_device->GetUBOAlign();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const VkDeviceSize GPUDevice::GetSSBOAlign()
|
||||||
|
{
|
||||||
|
return attr->physical_device->GetSSBOAlign();
|
||||||
|
}
|
||||||
|
|
||||||
bool GPUDevice::CreateBuffer(DeviceBufferData *buf,VkBufferUsageFlags buf_usage,VkDeviceSize range,VkDeviceSize size,const void *data,SharingMode sharing_mode)
|
bool GPUDevice::CreateBuffer(DeviceBufferData *buf,VkBufferUsageFlags buf_usage,VkDeviceSize range,VkDeviceSize size,const void *data,SharingMode sharing_mode)
|
||||||
{
|
{
|
||||||
BufferCreateInfo buf_info;
|
BufferCreateInfo buf_info;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user