1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2daed524c35f5fe4d35f403d2279947605d161b2eJoe Onorato#include "spec.h" 3daed524c35f5fe4d35f403d2279947605d161b2eJoe Onorato#include <stdio.h> 4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 5d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsvoid printFileHeader(FILE *f) 6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "/*\n"); 87eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams fprintf(f, " * Copyright (C) 2010 The Android Open Source Project\n"); 9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " *\n"); 10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " * Licensed under the Apache License, Version 2.0 (the \"License\");\n"); 11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " * you may not use this file except in compliance with the License.\n"); 12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " * You may obtain a copy of the License at\n"); 13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " *\n"); 14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " * http://www.apache.org/licenses/LICENSE-2.0\n"); 15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " *\n"); 16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " * Unless required by applicable law or agreed to in writing, software\n"); 17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " * distributed under the License is distributed on an \"AS IS\" BASIS,\n"); 18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"); 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " * See the License for the specific language governing permissions and\n"); 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " * limitations under the License.\n"); 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " */\n\n"); 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsvoid printVarType(FILE *f, const VarType *vt) 25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int ct; 27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (vt->isConst) { 28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "const "); 29d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 30d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams switch(vt->type) { 32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams case 0: 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "void"); 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams break; 35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams case 1: 36d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "int%i_t", vt->bits); 37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams break; 38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams case 2: 39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "uint%i_t", vt->bits); 40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams break; 41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams case 3: 42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (vt->bits == 32) 43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "float"); 44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams else 45d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "double"); 46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams break; 47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams case 4: 48daed524c35f5fe4d35f403d2279947605d161b2eJoe Onorato fprintf(f, "%s", vt->typeName); 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams break; 50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if(vt->ptrLevel) { 53d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " "); 54d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams for(ct=0; ct < vt->ptrLevel; ct++) { 55d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "*"); 56d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 57d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 58d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if(vt->name[0]) { 60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " %s", vt->name); 61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 62d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 63d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 64d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsvoid printArgList(FILE *f, const ApiEntry * api, int assumePrevious) 65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 66d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int ct; 67d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams for(ct=0; ct < api->paramCount; ct++) { 68d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (ct || assumePrevious) { 69d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, ", "); 70d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 71d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printVarType(f, &api->params[ct]); 72d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 75d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsvoid printStructures(FILE *f) 76d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 77d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int ct; 78d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int ct2; 79d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 80d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams for(ct=0; ct < apiCount; ct++) { 81d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "typedef struct RS_CMD_%s_rec RS_CMD_%s;\n", apis[ct].name, apis[ct].name); 82d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 83d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "\n"); 84d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 85d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams for(ct=0; ct < apiCount; ct++) { 86d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const ApiEntry * api = &apis[ct]; 87d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "#define RS_CMD_ID_%s %i\n", api->name, ct+1); 88d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "struct RS_CMD_%s_rec {\n", api->name); 89d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams //fprintf(f, " RsCommandHeader _hdr;\n"); 90d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 91d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams for(ct2=0; ct2 < api->paramCount; ct2++) { 92d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " "); 93d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printVarType(f, &api->params[ct2]); 94d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, ";\n"); 95d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 96d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "};\n\n"); 97d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 98d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 99d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 100d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsvoid printFuncDecl(FILE *f, const ApiEntry *api, const char *prefix, int addContext) 101d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 102d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printVarType(f, &api->ret); 103d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " %s%s (", prefix, api->name); 104d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (addContext) { 105d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "Context *"); 106bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams } else { 107bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams fprintf(f, "RsContext rsc"); 108d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 109bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams printArgList(f, api, 1); 110d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, ")"); 111d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 112d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 113d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsvoid printFuncDecls(FILE *f, const char *prefix, int addContext) 114d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 115d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int ct; 116d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams for(ct=0; ct < apiCount; ct++) { 117d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printFuncDecl(f, &apis[ct], prefix, addContext); 118d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, ";\n"); 119d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 120d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "\n\n"); 121d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 122d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 123d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsvoid printPlaybackFuncs(FILE *f, const char *prefix) 124d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 125d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int ct; 126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams for(ct=0; ct < apiCount; ct++) { 127d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "void %s%s (Context *, const void *);\n", prefix, apis[ct].name); 128d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 129d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 130d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 131d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsvoid printApiCpp(FILE *f) 132d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 133d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int ct; 134d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int ct2; 135d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "#include \"rsDevice.h\"\n"); 137d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "#include \"rsContext.h\"\n"); 138d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "#include \"rsThreadIO.h\"\n"); 139d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams //fprintf(f, "#include \"rsgApiStructs.h\"\n"); 140d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "#include \"rsgApiFuncDecl.h\"\n"); 141d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "\n"); 142d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "using namespace android;\n"); 143d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "using namespace android::renderscript;\n"); 14407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, "#include \"rsHandcode.h\"\n"); 145d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "\n"); 146d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 147d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams for(ct=0; ct < apiCount; ct++) { 148d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int needFlush = 0; 149d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const ApiEntry * api = &apis[ct]; 150d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 151d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printFuncDecl(f, api, "rs", 0); 152d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "\n{\n"); 15307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams if (api->handcodeApi) { 15407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, " rsHCAPI_%s(rsc", api->name); 15507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams for(ct2=0; ct2 < api->paramCount; ct2++) { 15607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams const VarType *vt = &api->params[ct2]; 15707ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, ", %s", vt->name); 15807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 15907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, ");\n"); 16007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } else { 16107ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, " ThreadIO *io = &((Context *)rsc)->mIO;\n"); 16207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams //fprintf(f, " LOGE(\"add command %s\\n\");\n", api->name); 16307ae40623737a6060b8a925fd2e6bba76780dcd4Jason 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); 16407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, " uint32_t size = sizeof(RS_CMD_%s);\n", api->name); 16507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 16607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams for(ct2=0; ct2 < api->paramCount; ct2++) { 16707ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams const VarType *vt = &api->params[ct2]; 16807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams needFlush += vt->ptrLevel; 16907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, " cmd->%s = %s;\n", vt->name, vt->name); 17007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 17107ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams if (api->ret.typeName[0]) { 17207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams needFlush = 1; 17307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 17407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 17507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, " io->mToCore.commit"); 17607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams if (needFlush) { 17707ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, "Sync"); 17807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 17907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, "(RS_CMD_ID_%s, size);\n", api->name); 18007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 18107ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams if (api->ret.typeName[0]) { 18207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, " return reinterpret_cast<"); 18307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams printVarType(f, &api->ret); 18407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, ">(io->mToCoreRet);\n"); 18507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 186d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 187d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "};\n\n"); 188d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 189d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 190d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 191d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsvoid printPlaybackCpp(FILE *f) 192d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 193d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int ct; 194d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams int ct2; 195d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 196d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "#include \"rsDevice.h\"\n"); 197d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "#include \"rsContext.h\"\n"); 198d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "#include \"rsThreadIO.h\"\n"); 199d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams //fprintf(f, "#include \"rsgApiStructs.h\"\n"); 200d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "#include \"rsgApiFuncDecl.h\"\n"); 201d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "\n"); 202d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "namespace android {\n"); 203d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "namespace renderscript {\n"); 20407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, "#include \"rsHandcode.h\"\n"); 205d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "\n"); 206d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 207d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams for(ct=0; ct < apiCount; ct++) { 208d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const ApiEntry * api = &apis[ct]; 209d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 210d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "void rsp_%s(Context *con, const void *vp)\n", api->name); 211d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "{\n"); 21207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams if (api->handcodePlay) { 21307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, " rsHCPLAY_%s(con, vp);\n", api->name); 21407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } else { 21507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams //fprintf(f, " LOGE(\"play command %s\\n\");\n", api->name); 21607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, " const RS_CMD_%s *cmd = static_cast<const RS_CMD_%s *>(vp);\n", api->name, api->name); 21707ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, " "); 21807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams if (api->ret.typeName[0]) { 21907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, "con->mIO.mToCoreRet = (intptr_t)"); 22007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 22107ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, "rsi_%s(con", api->name); 22207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams for(ct2=0; ct2 < api->paramCount; ct2++) { 22307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams const VarType *vt = &api->params[ct2]; 22407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, ",\n cmd->%s", vt->name); 22507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 22607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams fprintf(f, ");\n"); 227d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 228d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "};\n\n"); 229d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 230d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 231d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "RsPlaybackFunc gPlaybackFuncs[] = {\n"); 232d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " NULL,\n"); 233d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams for(ct=0; ct < apiCount; ct++) { 234d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, " %s%s,\n", "rsp_", apis[ct].name); 235d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 236d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "};\n"); 237d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 238d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "};\n"); 239d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "};\n"); 240d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 241d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 242d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsint main(int argc, char **argv) 243d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 244d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (argc != 3) { 245d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(stderr, "usage: %s commandFile outFile\n", argv[0]); 246d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return 1; 247d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 248d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const char* rsgFile = argv[1]; 249d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const char* outFile = argv[2]; 250d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams FILE* input = fopen(rsgFile, "r"); 251d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 252d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams char choice = fgetc(input); 253d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fclose(input); 254d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 255d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (choice < '0' || choice > '3') { 256d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(stderr, "Uknown command: \'%c\'\n", choice); 257d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return -2; 258d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 259d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 260d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams yylex(); 261d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams // printf("# of lines = %d\n", num_lines); 262d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 263d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams FILE *f = fopen(outFile, "w"); 264d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 265d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printFileHeader(f); 266d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams switch(choice) { 267d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams case '0': // rsgApiStructs.h 268d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams { 269d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "\n"); 270d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "#include \"rsContext.h\"\n"); 271d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "\n"); 272d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "namespace android {\n"); 273d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "namespace renderscript {\n"); 274d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printStructures(f); 275d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printFuncDecls(f, "rsi_", 1); 276d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printPlaybackFuncs(f, "rsp_"); 277d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "\n\ntypedef void (*RsPlaybackFunc)(Context *, const void *);\n"); 278d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "extern RsPlaybackFunc gPlaybackFuncs[];\n"); 279d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 280d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "}\n"); 281d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fprintf(f, "}\n"); 282d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 283d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams break; 284d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 285d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams case '1': // rsgApiFuncDecl.h 286d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams { 287d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printFuncDecls(f, "rs", 0); 288d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 289d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams break; 290d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 291d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams case '2': // rsgApi.cpp 292d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams { 293d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printApiCpp(f); 294d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 295d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams break; 296d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 297d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams case '3': // rsgApiReplay.cpp 298d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams { 299d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printFileHeader(f); 300d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams printPlaybackCpp(f); 301d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 302d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams break; 303d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 304d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams fclose(f); 305d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return 0; 306d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 307