亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? semantic.c

?? nVidia開發的圖形語言 Cg
?? C
?? 第 1 頁 / 共 2 頁
字號:
                    if (IsOutVal) {
                        lScope = Cg->theHAL->varyingOut->type->str.members;
                    } else {
                        lScope = Cg->theHAL->varyingIn->type->str.members;
                    }
                } else {
                    SemanticError(&fSymb->loc, ERROR_S_SEMANTIC_NOT_DEFINED_VOUT,
                                  GetAtomString(atable, fSymb->name));
                }
            }
        }
        if (lScope) {
            lBind->none.lname = lname;
            fSymb->details.var.bind = lBind;
            if (!(lBind->none.properties & BIND_HIDDEN)) {
                lSymb = LookUpLocalSymbol(lScope, lname);
                if (lSymb) {
                    // Already defined - second use of this name.
                } else {
                    lSymb = AddSymbol(&fSymb->loc, lScope, lname, fSymb->type, VARIABLE_S);
                    lSymb->details.var.bind = lBind;
                    if (lScope->symbols != lSymb) {
                        mSymb = lScope->symbols;
                        while (mSymb->next)
                            mSymb = mSymb->next;
                        mSymb->next = lSymb;
                    }
                }
            }
        }
        break;
    case TYPE_CATEGORY_STRUCT:
        SemanticError(&fSymb->loc, ERROR_S_NESTED_SEMANTIC_STRUCT,
                      GetAtomString(atable, fSymb->name));
        break;
    default:
        SemanticError(&fSymb->loc, ERROR_S_ILLEGAL_PARAM_TO_MAIN,
                      GetAtomString(atable, fSymb->name));
        break;
    }
    return lSymb;
} // lBindVaryingVariable

/*
 * lVerifyConnectorDirection() - Verify that this connector name is valid for the current
 *         profile and is of the appropriate direction.
 */

static void lVerifyConnectorDirection(SourceLoc *loc, int semantics, int IsOutParam)
{
    int cid, uses;

    // If connector semantics present make sure that connector direction matches parameter's:

    if (semantics) {
        cid = Cg->theHAL->GetConnectorID(semantics);
        if (cid) {
            uses = Cg->theHAL->GetConnectorUses(cid, Cg->theHAL->pid);
            if (IsOutParam) {
                if (!(uses & CONNECTOR_IS_OUTPUT))
                    SemanticError(loc, ERROR_S_CONNECT_FOR_INPUT,
                                  GetAtomString(atable, semantics));
            } else {
                if (!(uses & CONNECTOR_IS_INPUT))
                    SemanticError(loc, ERROR_S_CONNECT_FOR_OUTPUT,
                                  GetAtomString(atable, semantics));
            }
        } else {
            SemanticError(loc, ERROR_S_CONNECTOR_TYPE_INVALID,
                          GetAtomString(atable, semantics));
        }
    }
} // lVerifyConnectorDirection

/*
 * BuildSemanticStructs() - Build the three global semantic type structure,  Check main for
 *         type errors in its arguments.
 */

void BuildSemanticStructs(SourceLoc *loc, Scope *fScope, Symbol *program)
{
    int category, domain, qualifiers, len, rlen;
    Scope *vinScope, *voutScope, *lScope;
    Type *vinType, *voutType;
    Symbol *vinVar, *voutVar;
    int vinTag, voutTag;
    Symbol *formal, *member, *lSymb;
    expr *lExpr, *rExpr, *vExpr;
    Type *lType, *rettype;
    StmtList instmts, outstmts;
    Binding *lBind;
    int IsOutParam;
    float lVal[4];
    stmt *lStmt;

    // Define pseudo type structs for semantics:

    vinScope = NewScope();
    vinScope->HasSemantics = 1;
    vinScope->level = 1;
    vinScope->IsStructScope = 1;
    voutScope = NewScope();
    voutScope->HasSemantics = 1;
    voutScope->level = 1;
    voutScope->IsStructScope = 1;

    vinTag = AddAtom(atable, "$vin");
    vinType = StructHeader(loc, fScope, 0, vinTag);
    vinType->str.members = vinScope;
    Cg->theHAL->varyingIn = vinVar = DefineVar(loc, fScope, vinTag, vinType);
    //vinTypedef = DefineTypedef(loc, fScope, vinTag, vinType); // Not sure this is neessary
    voutTag = AddAtom(atable, "$vout");
    voutType = StructHeader(loc, fScope, 0, voutTag);
    voutType->str.members = voutScope;
    Cg->theHAL->varyingOut = voutVar = DefineVar(loc, fScope, voutTag, voutType);
    //voutTypedef = DefineTypedef(loc, fScope, voutTag, voutType); // Not sure this is neessary

    instmts.first = instmts.last = NULL;
    outstmts.first = outstmts.last = NULL;

    // Walk list of formals creating semantic struct members for all parameters:

    formal = program->details.fun.params;
    while (formal) {
        category = GetCategory(formal->type);
        domain = GetDomain(formal->type);
        qualifiers = GetQualifiers(formal->type);
        if ((qualifiers & TYPE_QUALIFIER_INOUT) == TYPE_QUALIFIER_INOUT)
            SemanticError(&formal->loc, ERROR_S_MAIN_PARAMS_CANT_BE_INOUT,
                          GetAtomString(atable, formal->name));
        if (domain == TYPE_DOMAIN_UNIFORM) {
            if (qualifiers & TYPE_QUALIFIER_OUT) {
                SemanticError(&formal->loc, ERROR_S_UNIFORM_ARG_CANT_BE_OUT,
                              GetAtomString(atable, formal->name));
            }
            switch (category) {
            case TYPE_CATEGORY_SCALAR:
            case TYPE_CATEGORY_ARRAY:
            case TYPE_CATEGORY_STRUCT:
                if (lBindUniformVariable(formal, program->name, 1) && formal->details.var.init) {
                    formal->details.var.init = FoldConstants(formal->details.var.init);
                    GetVectorConst(lVal, formal->details.var.init);
                    lBind = NewConstDefaultBinding(0, formal->name, 4, 0, 0, lVal);
                    lBind->constdef.kind = BK_DEFAULT;
                    AddDefaultBinding(lBind);
                }
                break;
            default:
                SemanticError(&formal->loc, ERROR_S_ILLEGAL_PARAM_TO_MAIN,
                              GetAtomString(atable, formal->name));
                break;
            }
        } else {
            IsOutParam = (qualifiers & TYPE_QUALIFIER_OUT) != 0;
            switch (category) {
            case TYPE_CATEGORY_SCALAR:
            case TYPE_CATEGORY_ARRAY:
                lSymb = lBindVaryingVariable(formal, program->name, IsOutParam, 0, 0);
                if (lSymb) {
                    lBind = lSymb->details.var.bind;
                    if (lBind && !(lBind->none.properties & BIND_HIDDEN)) {
                        lExpr = GenSymb(formal);
                        if (IsScalar(formal->type) || IsVector(formal->type, &len)) {
                            if (lBind->none.properties & BIND_INPUT) {
                                // Assign $vin member to bound variable:
                                vExpr = (expr *) NewSymbNode(VARIABLE_OP, vinVar);
                                rExpr = GenMemberReference(vExpr, lSymb);
                                if (IsVector(lSymb->type, &rlen))
                                    rExpr = GenConvertVectorLength(rExpr, GetBase(lSymb->type), rlen, len);
                                lStmt = NewSimpleAssignmentStmt(&program->loc, lExpr, rExpr, 0);
                                AppendStatements(&instmts, lStmt);
                            } else {
                                // Assign bound variable to $vout member:
                                vExpr = (expr *) NewSymbNode(VARIABLE_OP, voutVar);
                                rExpr = GenMemberReference(vExpr, lSymb);
                                if (IsVector(lSymb->type, &rlen))
                                    lExpr = GenConvertVectorLength(lExpr, GetBase(formal->type), len, rlen);
                                lStmt = NewSimpleAssignmentStmt(&program->loc, rExpr, lExpr, 0);
                                AppendStatements(&outstmts, lStmt);
                            }
                        } else {
                            FatalError("Parameter of unsupported type");
                            // xxx
                        }
                    }
                }
                break;
            case TYPE_CATEGORY_STRUCT:
                lType = formal->type;
                lVerifyConnectorDirection(&formal->loc, lType->str.semantics, IsOutParam);
                lScope = lType->str.members;
                member = lScope->symbols;
                while (member) {
                    lSymb = lBindVaryingVariable(member, lType->str.tag, IsOutParam, 1,
                                                 lType->str.semantics);
                    if (lSymb) {
                        lBind = lSymb->details.var.bind;
                        if (lBind && !(lBind->none.properties & BIND_HIDDEN)) {
                            lExpr = GenMemberReference((expr *) NewSymbNode(VARIABLE_OP, formal), member);
                            if (IsScalar(member->type) || IsVector(member->type, &len)) {
                                if (lBind->none.properties & BIND_INPUT) {
                                    // Assign $vin member to bound variable:
                                    vExpr = (expr *) NewSymbNode(VARIABLE_OP, vinVar);
                                    rExpr = GenMemberReference(vExpr, lSymb);
                                    if (IsVector(lSymb->type, &rlen))
                                        rExpr = GenConvertVectorLength(rExpr, GetBase(lSymb->type), rlen, len);
                                    lStmt = NewSimpleAssignmentStmt(&program->loc, lExpr, rExpr, 0);
                                    AppendStatements(&instmts, lStmt);
                                } else {
                                    // Assign bound variable to $vout member:
                                    vExpr = (expr *) NewSymbNode(VARIABLE_OP, voutVar);
                                    rExpr = GenMemberReference(vExpr, lSymb);
                                    if (IsVector(lSymb->type, &rlen))
                                        lExpr = GenConvertVectorLength(lExpr, GetBase(member->type), len, rlen);
                                    lStmt = NewSimpleAssignmentStmt(&program->loc, rExpr, lExpr, 0);
                                    AppendStatements(&outstmts, lStmt);
                                }
                            } else {
                                FatalError("Parameter of unsupported type");
                                // xxx
                            }
                        }
                    }
                    member = member->next;
                }
                break;
            default:
                SemanticError(&formal->loc, ERROR_S_ILLEGAL_PARAM_TO_MAIN,
                              GetAtomString(atable, formal->name));
                break;
            }
        }
        formal = formal->next;
    }

    // Add return value's semantics to the $vout connector:

    lType = program->type;
    rettype = lType->fun.rettype;
    category = GetCategory(rettype);
    if (!IsVoid(rettype)) {
        if (category == TYPE_CATEGORY_STRUCT) {
            lVerifyConnectorDirection(&program->loc, rettype->str.semantics, 1);
            lScope = rettype->str.members;
            member = lScope->symbols;
            while (member) {
                lSymb = lBindVaryingVariable(member, rettype->str.tag, 1, 1,
                                             rettype->str.semantics);
                member = member->next;
            }
        } else {
            SemanticError(&program->loc, ERROR_S_PROGRAM_MUST_RETURN_STRUCT,
                          GetAtomString(atable, program->name));
        }
    }

    // Set the output connector variety:

    voutType->str.variety = Cg->theHAL->outcid;

    // Append initial and final assignment statements to beginning and end of main:

    program->details.fun.statements = ConcatStmts(instmts.first, program->details.fun.statements);
    program->details.fun.statements = ConcatStmts(program->details.fun.statements, outstmts.first);

} // BuildSemanticStructs


void BindDefaultSemantic(Symbol *lSymb, int category, int gname)
{
    Binding *lBind;
    float lVal[4];

    switch (category) {
    case TYPE_CATEGORY_SCALAR:
    case TYPE_CATEGORY_ARRAY:
    case TYPE_CATEGORY_STRUCT:
        gname = 0;
        if (lBindUniformVariable(lSymb, gname, 0) && lSymb->details.var.init) {
            lSymb->details.var.init = FoldConstants(lSymb->details.var.init);
            GetVectorConst(lVal, lSymb->details.var.init);
            lBind = NewConstDefaultBinding(0, lSymb->name, 4, 0, 0, lVal);
            lBind->constdef.kind = BK_DEFAULT;
            AddDefaultBinding(lBind);
        }
        break;
    default:
        SemanticError(&lSymb->loc, ERROR_S_NON_STATIC_GLOBAL_TYPE_ERR,
                      GetAtomString(atable, lSymb->name));
    }
    lSymb->properties &= ~SYMB_NEEDS_BINDING;
} // BindDefaultSemantic

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产激情视频一区二区在线观看| 一区二区三区精品| 亚洲国产精品高清| 日本不卡一二三区黄网| 91丝袜美腿高跟国产极品老师| 日韩免费高清电影| 亚洲无线码一区二区三区| 国产suv精品一区二区三区| 在线不卡中文字幕| 亚洲精品日韩综合观看成人91| 激情成人午夜视频| 欧美一级片在线| 洋洋av久久久久久久一区| 成人网在线免费视频| 欧美精品一区二区蜜臀亚洲| 午夜不卡av在线| 在线视频欧美区| 亚洲欧美日韩综合aⅴ视频| 国产99久久久久久免费看农村| 日韩一级免费观看| 首页国产欧美久久| 欧美日韩大陆在线| 玉足女爽爽91| 92精品国产成人观看免费| 国产精品国产三级国产普通话三级 | 国产不卡一区视频| 欧美精品一区二区三区四区 | 欧美怡红院视频| 亚洲另类中文字| 色哟哟国产精品免费观看| 亚洲色图一区二区| 色婷婷综合在线| 一区二区三区在线不卡| 色综合一个色综合| 亚洲最大色网站| 欧美日韩大陆一区二区| 日本在线播放一区二区三区| 欧美一区二区日韩| 精品在线一区二区| 国产欧美精品在线观看| 成人午夜在线免费| 中文字幕欧美国产| 色激情天天射综合网| 一区二区三区在线影院| 欧美日韩一区二区三区高清| 天堂在线亚洲视频| 欧美电影免费观看高清完整版在线 | 欧美一区二区久久| 九九久久精品视频 | 欧美一区二区黄色| 精品一区二区三区免费播放 | 亚洲视频 欧洲视频| 欧洲色大大久久| 日本在线不卡视频一二三区| 欧美不卡视频一区| 成人精品gif动图一区| 亚洲精品你懂的| 欧美军同video69gay| 久久精品国产久精国产爱| 国产无遮挡一区二区三区毛片日本 | 欧美一级爆毛片| 国产精品一二三在| 一区二区三区精密机械公司| 日韩一区二区三区av| 成人中文字幕合集| 亚洲成人精品影院| 欧美韩国日本不卡| 欧美视频中文字幕| 国模一区二区三区白浆| 亚洲欧美另类小说| 日韩精品中文字幕一区| av毛片久久久久**hd| 婷婷国产v国产偷v亚洲高清| 久久久国产精华| 欧美日本国产视频| 成人va在线观看| 青娱乐精品在线视频| 国产精品久久久久久久第一福利| 91精品国产综合久久久久久漫画 | 一区精品在线播放| 欧美mv日韩mv亚洲| 欧美私人免费视频| 99re6这里只有精品视频在线观看| 日韩精品一卡二卡三卡四卡无卡| 中文字幕精品在线不卡| 欧美大片在线观看一区二区| 色婷婷av一区二区三区软件| 粉嫩一区二区三区性色av| 蜜臀久久99精品久久久久久9| 一区二区三区资源| 亚洲欧美在线观看| 国产欧美一区二区三区沐欲| 日韩久久久精品| 欧美日韩国产免费| 91成人在线精品| 99re这里只有精品首页| 国产超碰在线一区| 国产麻豆精品theporn| 日本午夜精品视频在线观看| 一区二区三区四区av| 国产欧美日韩在线看| 久久婷婷色综合| 日韩精品中文字幕一区| 制服丝袜在线91| 欧美无人高清视频在线观看| 91色综合久久久久婷婷| 91免费观看在线| av在线不卡电影| 国产成人免费视频网站高清观看视频| 蜜臀精品一区二区三区在线观看 | 成人黄色免费短视频| 国产精品一级在线| 国产乱一区二区| 狠狠狠色丁香婷婷综合激情| 久久精品国产第一区二区三区| 丝袜美腿亚洲一区二区图片| 亚洲高清视频中文字幕| 午夜久久福利影院| 天天影视网天天综合色在线播放| 亚洲国产成人精品视频| 日韩激情一区二区| 久久成人久久爱| 国产精品99久久久久久宅男| 成人精品小蝌蚪| 色美美综合视频| 欧美三片在线视频观看| 91精品在线免费观看| 日韩一区二区三区电影| 久久久亚洲精品一区二区三区 | jlzzjlzz欧美大全| 色网综合在线观看| 欧美二区三区的天堂| 精品日韩欧美一区二区| 久久精品一区二区三区av| 中文字幕视频一区| 亚洲第一搞黄网站| 精品一区二区三区蜜桃| 成人三级在线视频| 欧美探花视频资源| 337p日本欧洲亚洲大胆精品| 国产精品久久久久婷婷| 亚洲激情图片一区| 日韩1区2区3区| 成人黄色在线网站| 欧美精品丝袜中出| 欧美极品美女视频| 香蕉成人啪国产精品视频综合网| 日本不卡的三区四区五区| 国产福利一区在线| 在线亚洲一区观看| 久久久久国产一区二区三区四区| 综合久久给合久久狠狠狠97色| 香蕉影视欧美成人| 成人精品国产福利| 日韩免费看的电影| 亚洲精品久久嫩草网站秘色| 蓝色福利精品导航| 色悠悠久久综合| 久久先锋影音av| 图片区小说区区亚洲影院| 国产91对白在线观看九色| 欧美日韩高清不卡| 欧美国产日韩一二三区| 免费看黄色91| 在线免费观看成人短视频| 久久久精品欧美丰满| 午夜国产精品一区| 91网址在线看| 欧美极品少妇xxxxⅹ高跟鞋| 日产精品久久久久久久性色| 不卡的电影网站| 久久一日本道色综合| 性做久久久久久免费观看| 91麻豆免费在线观看| 国产欧美日韩久久| 激情偷乱视频一区二区三区| 欧美日韩国产一区| 亚洲永久免费视频| 97久久超碰国产精品电影| 精品1区2区在线观看| 麻豆精品一区二区| 欧美日韩国产三级| 夜夜嗨av一区二区三区中文字幕| www.亚洲人| 国产精品无圣光一区二区| 国产精品资源在线看| 精品理论电影在线观看 | 亚洲成av人片一区二区| 色婷婷一区二区三区四区| 国产精品国产三级国产专播品爱网 | 久久99最新地址| 日韩视频在线你懂得| 丝袜亚洲另类欧美综合| 欧美三级一区二区| 亚洲大尺度视频在线观看| 日本高清成人免费播放| 亚洲激情校园春色| 欧美少妇一区二区| 亚洲成人精品影院| 制服丝袜日韩国产|