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