rsg_generator.c revision 84614dd02411e1cf9a4c37aa421898c471cfad20
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 284614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato#include "spec.h" 384614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato#include <stdio.h> 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid printFileHeader(FILE *f) 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "/*\n"); 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " * Copyright (C) 2009 The Android Open Source Project\n"); 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " *\n"); 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " * Licensed under the Apache License, Version 2.0 (the \"License\");\n"); 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " * you may not use this file except in compliance with the License.\n"); 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " * You may obtain a copy of the License at\n"); 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " *\n"); 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " * http://www.apache.org/licenses/LICENSE-2.0\n"); 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " *\n"); 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " * Unless required by applicable law or agreed to in writing, software\n"); 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " * distributed under the License is distributed on an \"AS IS\" BASIS,\n"); 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"); 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " * See the License for the specific language governing permissions and\n"); 20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " * limitations under the License.\n"); 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " */\n\n"); 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid printVarType(FILE *f, const VarType *vt) 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (vt->isConst) { 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "const "); 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams switch(vt->type) { 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case 0: 33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "void"); 34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case 1: 36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "int%i_t", vt->bits); 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case 2: 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "uint%i_t", vt->bits); 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case 3: 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (vt->bits == 32) 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "float"); 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams else 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "double"); 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case 4: 4884614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato fprintf(f, "%s", vt->typeName); 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if(vt->ptrLevel) { 53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " "); 54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct=0; ct < vt->ptrLevel; ct++) { 55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "*"); 56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if(vt->name[0]) { 60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " %s", vt->name); 61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 64326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid printArgList(FILE *f, const ApiEntry * api, int assumePrevious) 65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct=0; ct < api->paramCount; ct++) { 68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (ct || assumePrevious) { 69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ", "); 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printVarType(f, &api->params[ct]); 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 75326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid printStructures(FILE *f) 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct2; 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct=0; ct < apiCount; ct++) { 81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "typedef struct RS_CMD_%s_rec RS_CMD_%s;\n", apis[ct].name, apis[ct].name); 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct=0; ct < apiCount; ct++) { 86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const ApiEntry * api = &apis[ct]; 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#define RS_CMD_ID_%s %i\n", api->name, ct+1); 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "struct RS_CMD_%s_rec {\n", api->name); 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //fprintf(f, " RsCommandHeader _hdr;\n"); 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct2=0; ct2 < api->paramCount; ct2++) { 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " "); 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printVarType(f, &api->params[ct2]); 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ";\n"); 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n\n"); 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid printFuncDecl(FILE *f, const ApiEntry *api, const char *prefix, int addContext) 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printVarType(f, &api->ret); 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " %s%s (", prefix, api->name); 104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (addContext) { 105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "Context *"); 106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printArgList(f, api, addContext); 108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ")"); 109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 111326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid printFuncDecls(FILE *f, const char *prefix, int addContext) 112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct=0; ct < apiCount; ct++) { 115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printFuncDecl(f, &apis[ct], prefix, addContext); 116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ";\n"); 117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n\n"); 119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 121326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid printPlaybackFuncs(FILE *f, const char *prefix) 122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct=0; ct < apiCount; ct++) { 125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "void %s%s (Context *, const void *);\n", prefix, apis[ct].name); 126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 129326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid printApiCpp(FILE *f) 130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct2; 133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsDevice.h\"\n"); 135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsContext.h\"\n"); 136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsThreadIO.h\"\n"); 137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //fprintf(f, "#include \"rsgApiStructs.h\"\n"); 138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsgApiFuncDecl.h\"\n"); 139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "using namespace android;\n"); 141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "using namespace android::renderscript;\n"); 142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct=0; ct < apiCount; ct++) { 145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int needFlush = 0; 146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const ApiEntry * api = &apis[ct]; 147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printFuncDecl(f, api, "rs", 0); 149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n{\n"); 150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " ThreadIO *io = gIO;\n"); 151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //fprintf(f, " LOGE(\"add command %s\\n\");\n", api->name); 152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " RS_CMD_%s *cmd = static_cast<RS_CMD_%s *>(io->mToCore.reserve(sizeof(RS_CMD_%s)));\n", api->name, api->name, api->name); 153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " uint32_t size = sizeof(RS_CMD_%s);\n", api->name); 154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct2=0; ct2 < api->paramCount; ct2++) { 156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const VarType *vt = &api->params[ct2]; 157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams needFlush += vt->ptrLevel; 158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " cmd->%s = %s;\n", vt->name, vt->name); 159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 16084614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato if (api->ret.typeName[0]) { 161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams needFlush = 1; 162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " io->mToCore.commit"); 165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (needFlush) { 166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "Sync"); 167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "(RS_CMD_ID_%s, size);\n", api->name); 169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17084614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato if (api->ret.typeName[0]) { 171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " return reinterpret_cast<"); 172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printVarType(f, &api->ret); 173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ">(io->mToCoreRet);\n"); 174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n\n"); 176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 177326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 179326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid printPlaybackCpp(FILE *f) 180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct2; 183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 184326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsDevice.h\"\n"); 185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsContext.h\"\n"); 186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsThreadIO.h\"\n"); 187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //fprintf(f, "#include \"rsgApiStructs.h\"\n"); 188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsgApiFuncDecl.h\"\n"); 189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "namespace android {\n"); 191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "namespace renderscript {\n"); 192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct=0; ct < apiCount; ct++) { 195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const ApiEntry * api = &apis[ct]; 196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "void rsp_%s(Context *con, const void *vp)\n", api->name); 198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "{\n"); 199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //fprintf(f, " LOGE(\"play command %s\\n\");\n", api->name); 200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " const RS_CMD_%s *cmd = static_cast<const RS_CMD_%s *>(vp);\n", api->name, api->name); 201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " "); 20284614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato if (api->ret.typeName[0]) { 203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "gIO->mToCoreRet = (intptr_t)"); 204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "rsi_%s(con", api->name); 206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct2=0; ct2 < api->paramCount; ct2++) { 207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const VarType *vt = &api->params[ct2]; 208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ","); 209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n cmd->%s", vt->name); 210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ");\n"); 212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n\n"); 214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "RsPlaybackFunc gPlaybackFuncs[] = {\n"); 217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " NULL,\n"); 218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for(ct=0; ct < apiCount; ct++) { 219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " %s%s,\n", "rsp_", apis[ct].name); 220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n"); 222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n"); 224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n"); 225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 227326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsint main(int argc, char **argv) 228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (argc != 3) { 230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(stderr, "usage: %s commandFile outFile\n", argv[0]); 231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return 1; 232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const char* rsgFile = argv[1]; 234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const char* outFile = argv[2]; 235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams FILE* input = fopen(rsgFile, "r"); 236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams char choice = fgetc(input); 238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fclose(input); 239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (choice < '0' || choice > '3') { 241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(stderr, "Uknown command: \'%c\'\n", choice); 242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return -2; 243326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams yylex(); 246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams // printf("# of lines = %d\n", num_lines); 247326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams FILE *f = fopen(outFile, "w"); 249326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 250326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printFileHeader(f); 251326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams switch(choice) { 252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case '0': // rsgApiStructs.h 253326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams { 254326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 255326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsContext.h\"\n"); 256326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 257326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "namespace android {\n"); 258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "namespace renderscript {\n"); 259326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printStructures(f); 260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printFuncDecls(f, "rsi_", 1); 261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printPlaybackFuncs(f, "rsp_"); 262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n\ntypedef void (*RsPlaybackFunc)(Context *, const void *);\n"); 263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "extern RsPlaybackFunc gPlaybackFuncs[];\n"); 264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "}\n"); 266326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "}\n"); 267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 268326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 269326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 270326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case '1': // rsgApiFuncDecl.h 271326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams { 272326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printFuncDecls(f, "rs", 0); 273326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 274326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 275326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 276326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case '2': // rsgApi.cpp 277326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams { 278326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printApiCpp(f); 279326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 280326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 281326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 282326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case '3': // rsgApiReplay.cpp 283326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams { 284326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printFileHeader(f); 285326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printPlaybackCpp(f); 286326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 287326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 288326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 289326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fclose(f); 290326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return 0; 291326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 292