public CompiledPipelineProgram Compile() { CompiledPipelineProgram compiled = new CompiledPipelineProgram(); compiled.VertexShader = IntrospectionUtil.CreateCall(GetExpression(StageType.VertexShader)); compiled.FragmentShader = IntrospectionUtil.CreateCall(GetExpression(StageType.FragmentShader)); compiled.InitializePipeline = IntrospectionUtil.CreateCall(GetExpression(UniformLoader, null, null)); return(compiled); }
public void Prepare() { switch (m_context.m_GraphicsPipeline.m_graphicsPipelineCreateInfo.pInputAssemblyState.topology) { case VkPrimitiveTopology.VK_PRIMITIVE_TOPOLOGY_POINT_LIST: PrimitiveLength = 2; break; case VkPrimitiveTopology.VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST: PrimitiveLength = 3; break; default: throw new NotImplementedException(); } // m_Stages.Clear(); m_Storage.Clear(); m_FragCoordUsed = false; m_FragDepthUsed = false; m_PrimiteContext = new PrimitiveContext(); gl_Position = new vec4[PrimitiveLength]; m_DepthBuffer = SoftwareDepthBuffer.Create(m_context); CurrentStage = StageType.Start; // m_Stages[StageType.InputAssembler] = MyProgram.Create(InputAssemblerStage); // m_Stages[StageType.Rasterization] = MyProgram.Create(RasterizationStage); // m_Stages[StageType.ColorBlending] = MyProgram.Create(ColorBlendingStage); m_PipelineProgramDefinition = new SoftwarePipelineProgram(); foreach (var stageItem in m_context.m_GraphicsPipeline.m_graphicsPipelineCreateInfo.pStages) { var compiledModule = SoftwareShaderModule.Compile(stageItem); switch (stageItem.stage) { case VkShaderStageFlagBits.VK_SHADER_STAGE_VERTEX_BIT: m_VertexShaderInstance = compiledModule.instance; m_PipelineProgramDefinition.ShaderEntry[StageType.VertexShader].Add(compiledModule.entryPoint); break; case VkShaderStageFlagBits.VK_SHADER_STAGE_FRAGMENT_BIT: m_FragmentShaderInstance = compiledModule.instance; m_PipelineProgramDefinition.ShaderEntry[StageType.FragmentShader].Add(compiledModule.entryPoint); break; default: throw new NotImplementedException(); } } PrepareShaderStage(StageType.VertexShader, m_VertexShaderInstance); PrepareShaderStage(StageType.FragmentShader, m_FragmentShaderInstance); m_CurrentViewport = m_context.m_GraphicsPipeline.m_graphicsPipelineCreateInfo.pViewportState.pViewports[0]; m_CompiledPipelineProgram = m_PipelineProgramDefinition.Compile(); }