public void CmdBindPipeline(VkPipelineBindPoint pipelineBindPoint, IVkPipeline pipeline) { var _commandBuffer = Handle; var _pipelineBindPoint = pipelineBindPoint; var _pipeline = pipeline?.Handle ?? VkPipeline.HandleType.Null; Direct.CmdBindPipeline(_commandBuffer, _pipelineBindPoint, _pipeline); }
private void CreateGraphicsPipeline() { var vertShaderModule = CreateShaderModule(File.ReadAllBytes("../../Resources/Shaders/vert.spv")); var fragShaderModule = CreateShaderModule(File.ReadAllBytes("../../Resources/Shaders/frag.spv")); var vertShaderStageInfo = new VkPipelineShaderStageCreateInfo() { Stage = VkShaderStage.Vertex, Module = vertShaderModule, Name = "main" }; var fragShaderStageInfo = new VkPipelineShaderStageCreateInfo() { Stage = VkShaderStage.Fragment, Module = fragShaderModule, Name = "main" }; var shaderStages = new[] { vertShaderStageInfo, fragShaderStageInfo }; var vertexInputInfo = new VkPipelineVertexInputStateCreateInfo { VertexBindingDescriptions = new[] { Vertex.GetBindingDescription(0) }, VertexAttributeDescriptions = Vertex.GetAttributeDescriptions(0) }; var inputAssemblyInfo = new VkPipelineInputAssemblyStateCreateInfo { Topology = VkPrimitiveTopology.TriangleList, PrimitiveRestartEnable = false }; var viewport = new VkViewport { X = 0, Y = 0, Width = swapChainExtent.Width, Height = swapChainExtent.Height, MinDepth = 0, MaxDepth = 1 }; var scissor = new VkRect2D(new VkOffset2D(0, 0), swapChainExtent); var viewportStateInfo = new VkPipelineViewportStateCreateInfo { Viewports = new [] { viewport }, Scissors = new [] { scissor } }; var rasterizerInfo = new VkPipelineRasterizationStateCreateInfo { DepthClampEnable = false, RasterizerDiscardEnable = false, PolygonMode = VkPolygonMode.Fill, LineWidth = 1f, CullMode = VkCullMode.Back, FrontFace = VkFrontFace.Clockwise, DepthBiasEnable = false, DepthBiasConstantFactor = 0f, DepthBiasClamp = 0f, DepthBiasSlopeFactor = 0f }; var multisamplingInfo = new VkPipelineMultisampleStateCreateInfo { SampleShadingEnable = false, RasterizationSamples = VkSampleCount.B1, MinSampleShading = 1f, SampleMask = null, AlphaToCoverageEnable = false, AlphaToOneEnable = false }; var colorBlendAttachment = new VkPipelineColorBlendAttachmentState { ColorWriteMask = VkColorComponent.R | VkColorComponent.G | VkColorComponent.B | VkColorComponent.A, BlendEnable = (VkBool32)false, SrcColorBlendFactor = VkBlendFactor.One, SrcAlphaBlendFactor = VkBlendFactor.One, ColorBlendOp = VkBlendOp.Add, AlphaBlendOp = VkBlendOp.Add, DstColorBlendFactor = VkBlendFactor.Zero, DstAlphaBlendFactor = VkBlendFactor.Zero }; var colorBlendingInfo = new VkPipelineColorBlendStateCreateInfo { LogicOpEnable = false, LogicOp = VkLogicOp.Copy, Attachments = new[] { colorBlendAttachment }, BlendConstants = new VkColor4(0, 0, 0, 0) }; var dynamicStates = new[] { VkDynamicState.Viewport, VkDynamicState.LineWidth, }; var dynamicStateInfo = new VkPipelineDynamicStateCreateInfo { DynamicStates = dynamicStates }; var pipelineLayoutInfo = new VkPipelineLayoutCreateInfo { SetLayouts = null, PushConstantRanges = null }; pipelineLayout = device.CreatePipelineLayout(pipelineLayoutInfo, null).Object; var pipelineInfo = new VkGraphicsPipelineCreateInfo { Stages = shaderStages, VertexInputState = vertexInputInfo, InputAssemblyState = inputAssemblyInfo, TessellationState = null, ViewportState = viewportStateInfo, RasterizationState = rasterizerInfo, MultisampleState = multisamplingInfo, DepthStencilState = null, ColorBlendState = colorBlendingInfo, DynamicState = null, Layout = pipelineLayout, RenderPass = renderPass, Subpass = 0, BasePipelineHandle = null, BasePipelineIndex = -1, Flags = VkPipelineCreateFlags.None }; graphicsPipeline = device.CreateGraphicsPipelines(null, new[] { pipelineInfo }, null).Object.Single(); vertShaderModule.Dispose(); fragShaderModule.Dispose(); }