public unsafe DescriptorSet(DescriptorPool descriptorPool, uint setCount = 1) { _device = descriptorPool.Device; _descriptorPool = descriptorPool; var layouts = new NativeList <VkDescriptorSetLayout>(setCount); for (int i = 0; i < setCount; i++) { layouts.Add(descriptorPool.Layout.Handle); } var allocateInfo = new VkDescriptorSetAllocateInfo { sType = VkStructureType.DescriptorSetAllocateInfo, descriptorPool = descriptorPool.Handle, descriptorSetCount = setCount, pSetLayouts = (VkDescriptorSetLayout *)layouts.Data.ToPointer() }; VkDescriptorSet descriptorSet; if (VulkanNative.vkAllocateDescriptorSets( _device.Handle, &allocateInfo, &descriptorSet ) != VkResult.Success) { throw new Exception("failed to allocate descriptor sets"); } _handle = descriptorSet; }