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