From 4b8ccbed177ce25032bd0dd01d82bab48ea20844 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Thu, 10 Dec 2020 16:25:59 +0800 Subject: [PATCH] add BindSSBO functions at VKDescriptorSets --- inc/hgl/graph/VKDescriptorSets.h | 2 ++ src/SceneGraph/Vulkan/VKDescriptorSets.cpp | 39 +++++++++++++++++++--- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/inc/hgl/graph/VKDescriptorSets.h b/inc/hgl/graph/VKDescriptorSets.h index 65ad4011..e97a1b4b 100644 --- a/inc/hgl/graph/VKDescriptorSets.h +++ b/inc/hgl/graph/VKDescriptorSets.h @@ -43,6 +43,8 @@ public: bool BindUBO(const int binding,const GPUBuffer *buf,bool dynamic=false); bool BindUBO(const int binding,const GPUBuffer *buf,const VkDeviceSize offset,const VkDeviceSize range,bool dynamic=false); + bool BindSSBO(const int binding,const GPUBuffer *buf,bool dynamic=false); + bool BindSSBO(const int binding,const GPUBuffer *buf,const VkDeviceSize offset,const VkDeviceSize range,bool dynamic=false); bool BindSampler(const int binding,Texture *,Sampler *); bool BindInputAttachment(const int binding,Texture *); diff --git a/src/SceneGraph/Vulkan/VKDescriptorSets.cpp b/src/SceneGraph/Vulkan/VKDescriptorSets.cpp index b6f4d8c9..1dfb1ea2 100644 --- a/src/SceneGraph/Vulkan/VKDescriptorSets.cpp +++ b/src/SceneGraph/Vulkan/VKDescriptorSets.cpp @@ -20,9 +20,7 @@ namespace descriptorType = desc_type; } - WriteDescriptorSet(VkDescriptorSet desc_set,const uint32_t binding,const VkDescriptorBufferInfo *buf_info,const bool dynamic): - WriteDescriptorSet(desc_set,binding,dynamic?VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) + WriteDescriptorSet(VkDescriptorSet desc_set,const uint32_t binding,const VkDescriptorBufferInfo *buf_info,const VkDescriptorType desc_type):WriteDescriptorSet(desc_set,binding,desc_type) { pImageInfo = nullptr; pBufferInfo = buf_info; @@ -74,7 +72,9 @@ bool DescriptorSets::BindUBO(const int binding,const GPUBuffer *buf,bool dynamic if(binding<0||!buf) return(false); - wds_list.Add(WriteDescriptorSet(desc_set,binding,buf->GetBufferInfo(),dynamic)); + const VkDescriptorType desc_type=dynamic?VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + + wds_list.Add(WriteDescriptorSet(desc_set,binding,buf->GetBufferInfo(),desc_type)); return(true); } @@ -87,8 +87,37 @@ bool DescriptorSets::BindUBO(const int binding,const GPUBuffer *buf,const VkDevi DescriptorBufferInfo *buf_info=new DescriptorBufferInfo(buf,offset,range); buffer_list.Add(buf_info); + + const VkDescriptorType desc_type=dynamic?VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; - wds_list.Add(WriteDescriptorSet(desc_set,binding,buf_info,dynamic)); + wds_list.Add(WriteDescriptorSet(desc_set,binding,buf_info,desc_type)); + return(true); +} + +bool DescriptorSets::BindSSBO(const int binding,const GPUBuffer *buf,bool dynamic) +{ + if(binding<0||!buf) + return(false); + + const VkDescriptorType desc_type=dynamic?VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + + wds_list.Add(WriteDescriptorSet(desc_set,binding,buf->GetBufferInfo(),desc_type)); + + return(true); +} + +bool DescriptorSets::BindSSBO(const int binding,const GPUBuffer *buf,const VkDeviceSize offset,const VkDeviceSize range,bool dynamic) +{ + if(binding<0||!buf) + return(false); + + DescriptorBufferInfo *buf_info=new DescriptorBufferInfo(buf,offset,range); + + buffer_list.Add(buf_info); + + const VkDescriptorType desc_type=dynamic?VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + + wds_list.Add(WriteDescriptorSet(desc_set,binding,buf_info,desc_type)); return(true); }