コード例 #1
0
        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);
        }
コード例 #2
0
        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();
        }