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); }