Create DescriptorSet with single image.
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.
910 {
912
917
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
957
958
961 VkDescriptorSetAllocateInfo allocInfo{};
962 allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
964 allocInfo.descriptorSetCount = 1;
966
972
973
976 VkDescriptorImageInfo imageInfo{};
977 imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
980
984 VkWriteDescriptorSet descriptorWrite{};
985 descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
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
997 }
#define SPICES_PROFILE_ZONE
#define VK_CHECK(expr)
Vulkan Check macro. Verify Vulkan API Effectiveness.
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.