void CreateLayout(PipelineLayoutCreateInfo mInfo) { VkPipelineLayoutCreateInfo info = new VkPipelineLayoutCreateInfo(); info.sType = VkStructureType.PipelineLayoutCreateInfo; NativeArray <VkDescriptorSetLayout> layoutsMarshalled = null; if (mInfo.setLayouts != null) { layoutsMarshalled = new NativeArray <VkDescriptorSetLayout>(mInfo.setLayouts.Count); for (int i = 0; i < mInfo.setLayouts.Count; i++) { layoutsMarshalled[i] = mInfo.setLayouts[i].Native; } info.setLayoutCount = (uint)layoutsMarshalled.Count; info.pSetLayouts = layoutsMarshalled.Address; } var pushConstantsMarshalled = new MarshalledArray <VkPushConstantRange>(mInfo.pushConstantRanges); info.pushConstantRangeCount = (uint)pushConstantsMarshalled.Count; info.pPushConstantRanges = pushConstantsMarshalled.Address; using (layoutsMarshalled) using (pushConstantsMarshalled) { var result = Device.Commands.createPipelineLayout(Device.Native, ref info, Device.Instance.AllocationCallbacks, out pipelineLayout); if (result != VkResult.Success) { throw new PipelineLayoutException(string.Format("Error creating pipeline layout: {0}", result)); } } }
public PipelineLayout(Device device, PipelineLayoutCreateInfo info) { if (device == null) { throw new ArgumentNullException(nameof(device)); } if (info == null) { throw new ArgumentNullException(nameof(info)); } Device = device; CreateLayout(info); }