예제 #1
0
        public MidModuleDecl EmitModule(
            IResModuleDecl resModule)
        {
            var env       = new MidGlobalEmitEnv(null, this);
            var midModule = new MidModuleDecl(null, this, env);

            _module             = midModule;
            _modules[resModule] = midModule;
            foreach (var decl in resModule.Decls)
            {
                EmitMemberDecl(midModule, decl, env);
            }
            _module.DoneBuilding();
            _module.ForceDeep();

            _lazy.Force();

            var midSimplifyContext = new Mid.MidSimplifyContext(_exps);

            midSimplifyContext.SimplifyModule(midModule);

            MidMarkOutputs.MarkOutputs(midModule);

            var midScalarizeOutputs = new Mid.MidScalarizeOutputs(_identifiers, _exps);

            midScalarizeOutputs.ApplyToModule(midModule);

            // Do cleanup tasks
            (new MidCleanup(_exps)).ApplyToModule(midModule);
            MidMarkOutputs.UnmarkOutputs(midModule);
            MidMarkOutputs.MarkOutputs(midModule);

            return(midModule);
        }
예제 #2
0
        public static IResPipelineRef FindShaderClass(
            this IResModuleDecl module,
            string name)
        {
            foreach (var d in module.Decls)
            {
                if (d.Name.ToString() == name)
                {
                    return(d.MakeRef(new SourceRange()));
                }
            }

            return(null);
        }