diff --git a/inc/hgl/graph/VKBuffer.h b/inc/hgl/graph/VKBuffer.h index 3c197901..b76efbf1 100644 --- a/inc/hgl/graph/VKBuffer.h +++ b/inc/hgl/graph/VKBuffer.h @@ -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; diff --git a/inc/hgl/graph/VKDevice.h b/inc/hgl/graph/VKDevice.h index fa5a0b6c..55b71808 100644 --- a/inc/hgl/graph/VKDevice.h +++ b/inc/hgl/graph/VKDevice.h @@ -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 diff --git a/inc/hgl/graph/VKRenderResource.h b/inc/hgl/graph/VKRenderResource.h index 639e16f7..6ca5193d 100644 --- a/inc/hgl/graph/VKRenderResource.h +++ b/inc/hgl/graph/VKRenderResource.h @@ -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) diff --git a/src/SceneGraph/Vulkan/VKDeviceBuffer.cpp b/src/SceneGraph/Vulkan/VKDeviceBuffer.cpp index ed7790db..cb1bc111 100644 --- a/src/SceneGraph/Vulkan/VKDeviceBuffer.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceBuffer.cpp @@ -2,7 +2,7 @@ #include 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 diff --git a/src/SceneGraph/Vulkan/VKRenderResource.cpp b/src/SceneGraph/Vulkan/VKRenderResource.cpp index a0b64723..3974976b 100644 --- a/src/SceneGraph/Vulkan/VKRenderResource.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResource.cpp @@ -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); \