deleted dynamic param at GPUBuffer...

This commit is contained in:
hyzboy 2020-12-10 14:52:58 +08:00
parent 0c091a929a
commit 63c6aee8e6
5 changed files with 25 additions and 36 deletions

View File

@ -18,26 +18,22 @@ protected:
VkDevice device;
GPUBufferData buf;
bool dynamic;
private:
friend class GPUDevice;
friend class VertexAttribBuffer;
friend class IndexBuffer;
GPUBuffer(VkDevice d,const GPUBufferData &b,bool dy)
GPUBuffer(VkDevice d,const GPUBufferData &b)
{
device=d;
buf=b;
dynamic=dy;
}
public:
virtual ~GPUBuffer();
const bool IsDynamic ()const{return dynamic;}
VkBuffer GetBuffer ()const{return buf.buffer;}
GPUMemory * GetMemory ()const{return buf.memory;}
const VkDescriptorBufferInfo * GetBufferInfo ()const{return &buf.info;}
@ -63,7 +59,7 @@ private:
friend class GPUDevice;
VertexAttribBuffer(VkDevice d,const GPUBufferData &vb,VkFormat fmt,uint32_t _stride,uint32_t _count,bool dy=false):GPUBuffer(d,vb,dy)
VertexAttribBuffer(VkDevice d,const GPUBufferData &vb,VkFormat fmt,uint32_t _stride,uint32_t _count):GPUBuffer(d,vb)
{
format=fmt;
stride=_stride;
@ -95,7 +91,7 @@ private:
friend class GPUDevice;
IndexBuffer(VkDevice d,const GPUBufferData &vb,IndexType it,uint32_t _count,bool dy=false):GPUBuffer(d,vb,dy)
IndexBuffer(VkDevice d,const GPUBufferData &vb,IndexType it,uint32_t _count):GPUBuffer(d,vb)
{
index_type=it;
count=_count;

View File

@ -99,12 +99,12 @@ public: //内存相关
private: //Buffer相关
bool CreateBuffer(GPUBufferData *buf,VkBufferUsageFlags buf_usage,VkDeviceSize size,const void *data,SharingMode sharing_mode,bool dynamic=false);
bool CreateBuffer(GPUBufferData *buf,VkBufferUsageFlags buf_usage,VkDeviceSize size,const void *data,SharingMode sharing_mode);
public: //Buffer相关
GPUBuffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,const void *data, SharingMode sharing_mode=SharingMode::Exclusive,bool dynamic=false);
GPUBuffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size, SharingMode sharing_mode=SharingMode::Exclusive,bool dynamic=false){return CreateBuffer(buf_usage,size,nullptr,sharing_mode,dynamic);}
GPUBuffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,const void *data, SharingMode sharing_mode=SharingMode::Exclusive);
GPUBuffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size, SharingMode sharing_mode=SharingMode::Exclusive){return CreateBuffer(buf_usage,size,nullptr,sharing_mode);}
VAB * CreateVAB (VkFormat format,uint32_t count,const void *data, SharingMode sharing_mode=SharingMode::Exclusive);
VAB * CreateVAB (VkFormat format,uint32_t count, SharingMode sharing_mode=SharingMode::Exclusive){return CreateVAB(format,count,nullptr,sharing_mode);}
@ -114,14 +114,12 @@ public: //Buffer相关
IndexBuffer * CreateIBO16 ( uint32_t count,const uint16 *data,SharingMode sharing_mode=SharingMode::Exclusive){return CreateIBO(IndexType::U16,count,(void *)data,sharing_mode);}
IndexBuffer * CreateIBO32 ( uint32_t count,const uint32 *data,SharingMode sharing_mode=SharingMode::Exclusive){return CreateIBO(IndexType::U32,count,(void *)data,sharing_mode);}
IndexBuffer * CreateIBO (IndexType index_type,uint32_t count,SharingMode sharing_mode=SharingMode::Exclusive){return CreateIBO(index_type,count,nullptr,sharing_mode);}
IndexBuffer * CreateIBO16 ( uint32_t count,SharingMode sharing_mode=SharingMode::Exclusive){return CreateIBO(IndexType::U16,count,nullptr,sharing_mode);}
IndexBuffer * CreateIBO32 ( uint32_t count,SharingMode sharing_mode=SharingMode::Exclusive){return CreateIBO(IndexType::U32,count,nullptr,sharing_mode);}
IndexBuffer * CreateIBO (IndexType index_type,uint32_t count,SharingMode sharing_mode=SharingMode::Exclusive){return CreateIBO(index_type, count,nullptr,sharing_mode);}
IndexBuffer * CreateIBO16 ( uint32_t count,SharingMode sharing_mode=SharingMode::Exclusive){return CreateIBO(IndexType::U16, count,nullptr,sharing_mode);}
IndexBuffer * CreateIBO32 ( uint32_t count,SharingMode sharing_mode=SharingMode::Exclusive){return CreateIBO(IndexType::U32, count,nullptr,sharing_mode);}
#define CREATE_BUFFER_OBJECT(LargeName,type) GPUBuffer *Create##LargeName( VkDeviceSize size,void *data, SharingMode sharing_mode=SharingMode::Exclusive,bool dynamic=false) {return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size,data, sharing_mode,dynamic);} \
GPUBuffer *Create##LargeName( VkDeviceSize size, SharingMode sharing_mode=SharingMode::Exclusive,bool dynamic=false) {return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size,nullptr, sharing_mode,dynamic);} \
GPUBuffer *Create##LargeName##Dynamic( VkDeviceSize size,void *data, SharingMode sharing_mode=SharingMode::Exclusive) {return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size,data, sharing_mode,true);} \
GPUBuffer *Create##LargeName##Dynamic( VkDeviceSize size, SharingMode sharing_mode=SharingMode::Exclusive) {return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size,nullptr, sharing_mode,true);}
#define CREATE_BUFFER_OBJECT(LargeName,type) GPUBuffer *Create##LargeName( VkDeviceSize size,void *data, SharingMode sharing_mode=SharingMode::Exclusive) {return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size,data, sharing_mode);} \
GPUBuffer *Create##LargeName( VkDeviceSize size, SharingMode sharing_mode=SharingMode::Exclusive) {return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size,nullptr, sharing_mode);}
CREATE_BUFFER_OBJECT(UBO,UNIFORM)
CREATE_BUFFER_OBJECT(SSBO,STORAGE)
@ -136,9 +134,9 @@ public: //Image
private: //texture
bool CommitTexture2D(Texture2D *,GPUBuffer *buf,uint32_t width,uint32_t height,const uint32_t miplevel,VkPipelineStageFlags stage);
bool CommitTexture2DMipmaps(Texture2D *,GPUBuffer *buf,uint32_t width,uint32_t height,uint32_t miplevel,uint32_t);
bool CommitTexture2D(Texture2D *,GPUBuffer *buf,const VkBufferImageCopy *,const int count, const uint32_t miplevel=1,VkPipelineStageFlags=VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
bool CommitTexture2D (Texture2D *,GPUBuffer *buf,uint32_t width,uint32_t height,const uint32_t miplevel,VkPipelineStageFlags stage);
bool CommitTexture2DMipmaps (Texture2D *,GPUBuffer *buf,uint32_t width,uint32_t height,uint32_t miplevel,uint32_t);
bool CommitTexture2D (Texture2D *,GPUBuffer *buf,const VkBufferImageCopy *,const int count,const uint32_t miplevel=1,VkPipelineStageFlags=VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
public: //Texture

View File

@ -67,8 +67,8 @@ public: // VBO/VAO
VAB *CreateVAB(VkFormat format,uint32_t count,SharingMode sm=SharingMode::Exclusive){return CreateVAB(format,count,nullptr,sm);}
VAB *CreateVAB(const VAD *vad,SharingMode sm=SharingMode::Exclusive){return CreateVAB(vad->GetVulkanFormat(),vad->GetCount(),vad->GetData(),sm);}
#define SCENE_DB_CREATE_FUNC(name) GPUBuffer *Create##name(VkDeviceSize size,void *data,SharingMode sm=SharingMode::Exclusive,bool dynamic=false); \
GPUBuffer *Create##name(VkDeviceSize size,SharingMode sm=SharingMode::Exclusive,bool dynamic=false);
#define SCENE_DB_CREATE_FUNC(name) GPUBuffer *Create##name(VkDeviceSize size,void *data,SharingMode sm=SharingMode::Exclusive); \
GPUBuffer *Create##name(VkDeviceSize size,SharingMode sm=SharingMode::Exclusive);
SCENE_DB_CREATE_FUNC(UBO)
SCENE_DB_CREATE_FUNC(SSBO)

View File

@ -2,7 +2,7 @@
#include<hgl/graph/VKBuffer.h>
VK_NAMESPACE_BEGIN
bool GPUDevice::CreateBuffer(GPUBufferData *buf,VkBufferUsageFlags buf_usage,VkDeviceSize size,const void *data,SharingMode sharing_mode,bool dynamic)
bool GPUDevice::CreateBuffer(GPUBufferData *buf,VkBufferUsageFlags buf_usage,VkDeviceSize size,const void *data,SharingMode sharing_mode)
{
BufferCreateInfo buf_info;
@ -19,12 +19,7 @@ bool GPUDevice::CreateBuffer(GPUBufferData *buf,VkBufferUsageFlags buf_usage,VkD
vkGetBufferMemoryRequirements(attr->device,buf->buffer,&mem_reqs);
uint32_t prop=VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
if(!dynamic)
prop|=VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
GPUMemory *dm=CreateMemory(mem_reqs,prop);
GPUMemory *dm=CreateMemory(mem_reqs,VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT|VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
if(dm&&dm->BindBuffer(buf->buffer))
{
@ -85,13 +80,13 @@ IndexBuffer *GPUDevice::CreateIBO(IndexType index_type,uint32_t count,const void
return(new IndexBuffer(attr->device,buf,index_type,count));
}
GPUBuffer *GPUDevice::CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,const void *data,SharingMode sharing_mode,bool dynamic)
GPUBuffer *GPUDevice::CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,const void *data,SharingMode sharing_mode)
{
GPUBufferData buf;
if(!CreateBuffer(&buf,buf_usage,size,data,sharing_mode,dynamic))
if(!CreateBuffer(&buf,buf_usage,size,data,sharing_mode))
return(nullptr);
return(new GPUBuffer(attr->device,buf,dynamic));
return(new GPUBuffer(attr->device,buf));
}
VK_NAMESPACE_END

View File

@ -16,18 +16,18 @@ VAB *RenderResource::CreateVAB(VkFormat format,uint32_t count,const void *data,S
return vb;
}
#define SCENE_DB_CREATE_BUFFER(name) GPUBuffer *RenderResource::Create##name(VkDeviceSize size,void *data,SharingMode sharing_mode,bool dynamic) \
#define SCENE_DB_CREATE_BUFFER(name) GPUBuffer *RenderResource::Create##name(VkDeviceSize size,void *data,SharingMode sharing_mode) \
{ \
GPUBuffer *buf=device->Create##name(size,data,sharing_mode,dynamic); \
GPUBuffer *buf=device->Create##name(size,data,sharing_mode); \
\
if(!buf)return(nullptr); \
rm_buffers.Add(buf); \
return(buf); \
} \
\
GPUBuffer *RenderResource::Create##name(VkDeviceSize size,SharingMode sharing_mode,bool dynamic) \
GPUBuffer *RenderResource::Create##name(VkDeviceSize size,SharingMode sharing_mode) \
{ \
GPUBuffer *buf=device->Create##name(size,sharing_mode,dynamic); \
GPUBuffer *buf=device->Create##name(size,sharing_mode); \
\
if(!buf)return(nullptr); \
rm_buffers.Add(buf); \