ULRE/src/RenderDevice/Vulkan/VKDescriptorSets.cpp

84 lines
2.9 KiB
C++
Raw Normal View History

#include<hgl/graph/vulkan/VKDescriptorSets.h>
#include<hgl/graph/vulkan/VKDevice.h>
2019-07-06 16:46:19 +08:00
#include<hgl/graph/vulkan/VKBuffer.h>
#include<hgl/graph/vulkan/VKTexture.h>
#include<hgl/graph/vulkan/VKSampler.h>
VK_NAMESPACE_BEGIN
void DescriptorSets::Clear()
{
write_desc_sets.ClearData();
desc_image_info.ClearData();
}
2019-07-06 16:46:19 +08:00
bool DescriptorSets::BindUBO(const uint32_t binding,const Buffer *buf)
{
2019-07-01 19:25:07 +08:00
VkWriteDescriptorSet writeDescriptorSet;
2019-07-01 19:25:07 +08:00
writeDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
writeDescriptorSet.pNext = nullptr;
writeDescriptorSet.dstSet = desc_set;
writeDescriptorSet.dstBinding = binding;
writeDescriptorSet.dstArrayElement = 0;
writeDescriptorSet.descriptorCount = 1;
writeDescriptorSet.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
writeDescriptorSet.pImageInfo = nullptr;
2019-07-06 16:46:19 +08:00
writeDescriptorSet.pBufferInfo = buf->GetBufferInfo();
2019-07-01 19:25:07 +08:00
writeDescriptorSet.pTexelBufferView = nullptr;
write_desc_sets.Add(writeDescriptorSet);
return(true);
}
2019-07-06 16:46:19 +08:00
bool DescriptorSets::BindUBODynamic(const uint32_t binding,const Buffer *buf)
{
2019-07-01 19:25:07 +08:00
VkWriteDescriptorSet writeDescriptorSet;
2019-07-01 19:25:07 +08:00
writeDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
writeDescriptorSet.pNext = nullptr;
writeDescriptorSet.dstSet = desc_set;
writeDescriptorSet.dstBinding = binding;
writeDescriptorSet.dstArrayElement = 0;
writeDescriptorSet.descriptorCount = 1;
writeDescriptorSet.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;
writeDescriptorSet.pImageInfo = nullptr;
2019-07-06 16:46:19 +08:00
writeDescriptorSet.pBufferInfo = buf->GetBufferInfo();;
2019-07-01 19:25:07 +08:00
writeDescriptorSet.pTexelBufferView = nullptr;
write_desc_sets.Add(writeDescriptorSet);
return(true);
}
bool DescriptorSets::BindSampler(const uint32_t binding,Texture *tex,Sampler *sampler)
{
if(!tex||!sampler)
return(false);
VkDescriptorImageInfo *image_info=desc_image_info.Add();
2019-07-06 16:46:19 +08:00
image_info->imageView =tex->GetVulkanImageView();
image_info->imageLayout =tex->GetImageLayout();
image_info->sampler =*sampler;
2019-07-01 19:25:07 +08:00
VkWriteDescriptorSet writeDescriptorSet;
writeDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
2019-07-01 19:25:07 +08:00
writeDescriptorSet.pNext = nullptr;
writeDescriptorSet.dstSet = desc_set;
writeDescriptorSet.dstBinding = binding;
writeDescriptorSet.dstArrayElement = 0;
writeDescriptorSet.descriptorCount = 1;
writeDescriptorSet.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
writeDescriptorSet.pImageInfo = image_info;
writeDescriptorSet.pBufferInfo = nullptr;
writeDescriptorSet.pTexelBufferView = nullptr;
write_desc_sets.Add(writeDescriptorSet);
return(true);
}
void DescriptorSets::Update()
{
vkUpdateDescriptorSets(*device,write_desc_sets.GetCount(),write_desc_sets.GetData(),0,nullptr);
}
VK_NAMESPACE_END