public unsafe DescriptorLayout(Device device, List <DescriptorBindingInfo> bindings)
        {
            _device   = device;
            _bindings = bindings;

            var vulkanBindings = new NativeList <VkDescriptorSetLayoutBinding>();

            foreach (var binding in bindings)
            {
                vulkanBindings.Add(new VkDescriptorSetLayoutBinding
                {
                    binding         = binding.Index,
                    descriptorType  = binding.DescriptorType,
                    descriptorCount = binding.DescriptorCounts,
                    stageFlags      = binding.ShaderStageFlags
                });
            }

            var createInfo = new VkDescriptorSetLayoutCreateInfo
            {
                sType        = VkStructureType.DescriptorSetLayoutCreateInfo,
                bindingCount = vulkanBindings.Count,
                pBindings    = (VkDescriptorSetLayoutBinding *)vulkanBindings.Data.ToPointer()
            };

            VkDescriptorSetLayout layout;

            if (VulkanNative.vkCreateDescriptorSetLayout(
                    device.Handle,
                    &createInfo,
                    null,
                    &layout
                    ) != VkResult.Success)
            {
                throw new Exception("failed to create descriptor set layout");
            }
            _handle = layout;
        }