void CreateRenderPass() { var colorAttachment = new VkAttachmentDescription(); colorAttachment.format = swapchainImageFormat; colorAttachment.samples = CSGL.Vulkan.VkSampleCountFlags._1_Bit; colorAttachment.loadOp = CSGL.Vulkan.VkAttachmentLoadOp.Clear; colorAttachment.storeOp = CSGL.Vulkan.VkAttachmentStoreOp.Store; colorAttachment.stencilLoadOp = CSGL.Vulkan.VkAttachmentLoadOp.DontCare; colorAttachment.stencilStoreOp = CSGL.Vulkan.VkAttachmentStoreOp.DontCare; colorAttachment.initialLayout = CSGL.Vulkan.VkImageLayout.Undefined; colorAttachment.finalLayout = CSGL.Vulkan.VkImageLayout.PresentSrcKhr; var colorAttachmentNative = new Native <VkAttachmentDescription>(colorAttachment); var colorAttachmentRef = new VkAttachmentReference(); colorAttachmentRef.attachment = 0; colorAttachmentRef.layout = CSGL.Vulkan.VkImageLayout.ColorAttachmentOptimal; var colorAttachmentRefNative = new Native <VkAttachmentReference>(colorAttachmentRef); var subpass = new VkSubpassDescription(); subpass.pipelineBindPoint = CSGL.Vulkan.VkPipelineBindPoint.Graphics; subpass.colorAttachmentCount = 1; subpass.pColorAttachments = colorAttachmentRefNative.Address; var subpassNative = new Native <VkSubpassDescription>(subpass); var dependency = new VkSubpassDependency(); dependency.srcSubpass = uint.MaxValue; //VK_SUBPASS_EXTERNAL dependency.dstSubpass = 0; dependency.srcStageMask = CSGL.Vulkan.VkPipelineStageFlags.BottomOfPipeBit; dependency.srcAccessMask = CSGL.Vulkan.VkAccessFlags.MemoryReadBit; dependency.dstStageMask = CSGL.Vulkan.VkPipelineStageFlags.ColorAttachmentOutputBit; dependency.dstAccessMask = CSGL.Vulkan.VkAccessFlags.ColorAttachmentReadBit | CSGL.Vulkan.VkAccessFlags.ColorAttachmentWriteBit; var dependencyNative = new Native <VkSubpassDependency>(dependency); var info = new VkRenderPassCreateInfo(); info.sType = CSGL.Vulkan.VkStructureType.RenderPassCreateInfo; info.attachmentCount = 1; info.pAttachments = colorAttachmentNative.Address; info.subpassCount = 1; info.pSubpasses = subpassNative.Address; info.dependencyCount = 1; info.pDependencies = dependencyNative.Address; if (renderPass != VkRenderPass.Null) { VK.DestroyRenderPass(device, renderPass, alloc); } var result = VK.CreateRenderPass(device, ref info, alloc, out renderPass); colorAttachmentNative.Dispose(); colorAttachmentRefNative.Dispose(); subpassNative.Dispose(); dependencyNative.Dispose(); }