SpiecsEngine
 
Loading...
Searching...
No Matches

◆ CreateDescriptorSet()

void Spices::VulkanImage::CreateDescriptorSet ( uint32_t binding)

Create DescriptorSet with single image.

Parameters
[in]bindingWhich binding will be use.

Destroy old DescriptorSetLayout.

Instance a VkDescriptorSetLayoutBinding.

@breif Instance a VkDescriptorSetLayoutBindingFlagsCreateInfo.

Instance a VkDescriptorSetLayoutCreateInfo.

Create DescriptorSetLayout.

Instance a VkDescriptorSetAllocateInfo.

Allocate DescriptorSets.

Instance a VkDescriptorImageInfo.

Instance a VkWriteDescriptorSet.

Update DecriptorSet.

Destroy old DescriptorSetLayout.

Instance a VkDescriptorSetLayoutBinding.

@breif Instance a VkDescriptorSetLayoutBindingFlagsCreateInfo.

Instance a VkDescriptorSetLayoutCreateInfo.

Create DescriptorSetLayout.

Instance a VkDescriptorSetAllocateInfo.

Allocate DescriptorSets.

Instance a VkDescriptorImageInfo.

Instance a VkWriteDescriptorSet.

Update DecriptorSet.

Definition at line 909 of file VulkanImage.cpp.

910 {
912
917
918 m_IsCreateSet = true;
919
923 VkDescriptorSetLayoutBinding samplerLayoutBinding{};
924 samplerLayoutBinding.binding = binding;
925 samplerLayoutBinding.descriptorCount = 1;
926 samplerLayoutBinding.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
927 samplerLayoutBinding.pImmutableSamplers = nullptr;
928 samplerLayoutBinding.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
929
930 VkDescriptorBindingFlags setBindingFlags;
931 setBindingFlags = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT;
932
936 VkDescriptorSetLayoutBindingFlagsCreateInfo bindingFlags{};
937 bindingFlags.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO;
938 bindingFlags.pNext = nullptr;
939 bindingFlags.pBindingFlags = &setBindingFlags;
940 bindingFlags.bindingCount = 1;
941
945 VkDescriptorSetLayoutCreateInfo layoutInfo{};
946 layoutInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
947 layoutInfo.bindingCount = 1;
948 layoutInfo.pBindings = &samplerLayoutBinding;
949 layoutInfo.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT;
950 layoutInfo.pNext = &bindingFlags;
951
955 VK_CHECK(vkCreateDescriptorSetLayout(m_VulkanState.m_Device, &layoutInfo, nullptr, &m_DescriptorSetLayout))
956 DEBUGUTILS_SETOBJECTNAME(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, reinterpret_cast<uint64_t>(m_DescriptorSetLayout), m_VulkanState.m_Device, "DescriptorSetLayoutImage")
957
958
961 VkDescriptorSetAllocateInfo allocInfo{};
962 allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
963 allocInfo.descriptorPool = VulkanRenderBackend::GetDescriptorPool()->GetPool();
964 allocInfo.descriptorSetCount = 1;
965 allocInfo.pSetLayouts = &m_DescriptorSetLayout;
966
970 VK_CHECK(vkAllocateDescriptorSets(m_VulkanState.m_Device, &allocInfo, &m_DescriptorSet))
971 DEBUGUTILS_SETOBJECTNAME(VK_OBJECT_TYPE_DESCRIPTOR_SET, reinterpret_cast<uint64_t>(m_DescriptorSet), m_VulkanState.m_Device, "DescriptorSetImage")
972
973
976 VkDescriptorImageInfo imageInfo{};
977 imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
978 imageInfo.imageView = m_ImageViews[0];
979 imageInfo.sampler = m_TextureSampler;
980
984 VkWriteDescriptorSet descriptorWrite{};
985 descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
986 descriptorWrite.dstSet = m_DescriptorSet;
987 descriptorWrite.dstBinding = binding;
988 descriptorWrite.dstArrayElement = 0;
989 descriptorWrite.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
990 descriptorWrite.descriptorCount = 1;
991 descriptorWrite.pImageInfo = &imageInfo;
992
996 vkUpdateDescriptorSets(m_VulkanState.m_Device, 1, &descriptorWrite, 0, nullptr);
997 }
#define SPICES_PROFILE_ZONE
#define VK_CHECK(expr)
Vulkan Check macro. Verify Vulkan API Effectiveness.
Definition VulkanUtils.h:68
VkDescriptorSetLayout m_DescriptorSetLayout
VkDescriptorSetLayout.
void DestroyDescriptorSetLayout() const
Destroy the DescriptorSetLayout if Created a DescriptorSet.
VkSampler m_TextureSampler
The image sampler.
bool m_IsCreateSet
True if Called Create DescriptorSet.
VkDescriptorSet m_DescriptorSet
VkDescriptorSet.
std::vector< VkImageView > m_ImageViews
The image view.
VulkanState & m_VulkanState
The global VulkanState Referenced from VulkanRenderBackend.
static std::shared_ptr< VulkanDescriptorPool > GetDescriptorPool()
Get DescriptorPool in use.

References DestroyDescriptorSetLayout(), and m_IsCreateSet.