10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "spec.h" 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include <stdio.h> 4ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include <string.h> 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printFileHeader(FILE *f) { 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "/*\n"); 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " * Copyright (C) 2011 The Android Open Source Project\n"); 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " *\n"); 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " * Licensed under the Apache License, Version 2.0 (the \"License\");\n"); 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " * you may not use this file except in compliance with the License.\n"); 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " * You may obtain a copy of the License at\n"); 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " *\n"); 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " * http://www.apache.org/licenses/LICENSE-2.0\n"); 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " *\n"); 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " * Unless required by applicable law or agreed to in writing, software\n"); 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " * distributed under the License is distributed on an \"AS IS\" BASIS,\n"); 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"); 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " * See the License for the specific language governing permissions and\n"); 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " * limitations under the License.\n"); 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " */\n\n"); 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printVarType(FILE *f, const VarType *vt) { 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct; 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->isConst) { 270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "const "); 280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines switch (vt->type) { 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case 0: 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "void"); 330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case 1: 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "int%i_t", vt->bits); 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case 2: 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "uint%i_t", vt->bits); 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case 3: 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->bits == 32) 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "float"); 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines else 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "double"); 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case 4: 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "%s", vt->typeName); 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->ptrLevel) { 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " "); 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < vt->ptrLevel; ct++) { 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "*"); 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printVarTypeAndName(FILE *f, const VarType *vt) { 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarType(f, vt); 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->name[0]) { 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " %s", vt->name); 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printArgList(FILE *f, const ApiEntry * api, int assumePrevious) { 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct; 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < api->paramCount; ct++) { 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (ct || assumePrevious) { 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ", "); 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarTypeAndName(f, &api->params[ct]); 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printStructures(FILE *f) { 780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct; 790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct2; 800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "typedef struct RS_CMD_%s_rec RS_CMD_%s;\n", apis[ct].name, apis[ct].name); 830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const ApiEntry * api = &apis[ct]; 880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#define RS_CMD_ID_%s %i\n", api->name, ct+1); 890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "struct RS_CMD_%s_rec {\n", api->name); 900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines //fprintf(f, " RsCommandHeader _hdr;\n"); 910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " "); 940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarTypeAndName(f, &api->params[ct2]); 950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ";\n"); 960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "};\n\n"); 980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printFuncDecl(FILE *f, const ApiEntry *api, const char *prefix, int addContext, int isFnPtr) { 1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarTypeAndName(f, &api->ret); 1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (isFnPtr) { 1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines char t[1024]; 1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines strcpy(t, api->name); 1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (strlen(prefix) == 0) { 1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (t[0] > 'A' && t[0] < 'Z') { 1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines t[0] -= 'A' - 'a'; 1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " (* %s%s) (", prefix, api->name); 1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else { 1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " %s%s (", prefix, api->name); 1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (!api->nocontext) { 1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (addContext) { 1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "Context *"); 1180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else { 1190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "RsContext rsc"); 1200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printArgList(f, api, !api->nocontext); 1230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ")"); 1240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printFuncDecls(FILE *f, const char *prefix, int addContext) { 1270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct; 1280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 1290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFuncDecl(f, &apis[ct], prefix, addContext, 0); 1300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ";\n"); 1310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n\n"); 1330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printFuncPointers(FILE *f, int addContext) { 1360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 1370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "typedef struct RsApiEntrypoints {\n"); 1380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct; 1390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 1400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " "); 1410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFuncDecl(f, &apis[ct], "", addContext, 1); 1420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ";\n"); 1430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "} RsApiEntrypoints_t;\n\n"); 1450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printPlaybackFuncs(FILE *f, const char *prefix) { 1480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct; 1490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 1500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (apis[ct].direct) { 1510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines continue; 1520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "void %s%s (Context *, const void *);\n", prefix, apis[ct].name); 1550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic int hasInlineDataPointers(const ApiEntry * api) { 1590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ret = 0; 1600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct; 1610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->sync || api->ret.typeName[0]) { 1620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return 0; 1630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < api->paramCount; ct++) { 1650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct]; 1660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (!vt->isConst && vt->ptrLevel) { 1680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // Non-const pointers cannot be inlined. 1690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return 0; 1700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->ptrLevel > 1) { 1720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // not handled yet. 1730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return 0; 1740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->isConst && vt->ptrLevel) { 1770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // Non-const pointers cannot be inlined. 1780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ret = 1; 1790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return ret; 1820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printApiCpp(FILE *f) { 1850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct; 1860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct2; 1870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsDevice.h\"\n"); 1890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsContext.h\"\n"); 1900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsThreadIO.h\"\n"); 1910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsgApiStructs.h\"\n"); 1920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsgApiFuncDecl.h\"\n"); 1930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsFifo.h\"\n"); 1940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 1950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "using namespace android;\n"); 1960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "using namespace android::renderscript;\n"); 1970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 1980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFuncPointers(f, 0); 2000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // Generate RS funcs for local fifo 2020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 2030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int needFlush = 0; 2040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const ApiEntry * api = &apis[ct]; 2050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "static "); 2070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFuncDecl(f, api, "LF_", 0, 0); 2080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n{\n"); 2090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->direct) { 2100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " "); 2110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->ret.typeName[0]) { 2120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "return "); 2130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "rsi_%s(", api->name); 2150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (!api->nocontext) { 2160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "(Context *)rsc"); 2170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 2190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 2200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (ct2 > 0 || !api->nocontext) { 2210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ", "); 2220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "%s", vt->name); 2240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ");\n"); 2260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else { 2270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " ThreadIO *io = &((Context *)rsc)->mIO;\n"); 2280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " const uint32_t size = sizeof(RS_CMD_%s);\n", api->name); 2290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (hasInlineDataPointers(api)) { 2300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " uint32_t dataSize = 0;\n"); 2310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 2320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 2330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->isConst && vt->ptrLevel) { 2340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " dataSize += %s_length;\n", vt->name); 2350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines //fprintf(f, " ALOGE(\"add command %s\\n\");\n", api->name); 2400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (hasInlineDataPointers(api)) { 2410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " RS_CMD_%s *cmd = NULL;\n", api->name); 2420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " if (dataSize < io->getMaxInlineSize()) {;\n"); 2430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " cmd = static_cast<RS_CMD_%s *>(io->coreHeader(RS_CMD_ID_%s, dataSize + size));\n", api->name, api->name); 2440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " } else {\n"); 2450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " cmd = static_cast<RS_CMD_%s *>(io->coreHeader(RS_CMD_ID_%s, size));\n", api->name, api->name); 2460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " }\n"); 2470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " uint8_t *payload = (uint8_t *)&cmd[1];\n"); 2480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else { 2490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " RS_CMD_%s *cmd = static_cast<RS_CMD_%s *>(io->coreHeader(RS_CMD_ID_%s, size));\n", api->name, api->name, api->name); 2500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 2530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 2540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines needFlush += vt->ptrLevel; 2550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->ptrLevel && hasInlineDataPointers(api)) { 2560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " if (dataSize < io->getMaxInlineSize()) {\n"); 2570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " memcpy(payload, %s, %s_length);\n", vt->name, vt->name); 2580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " cmd->%s = (", vt->name); 2590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarType(f, vt); 2600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ")(payload - ((uint8_t *)&cmd[1]));\n"); 2610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " payload += %s_length;\n", vt->name); 2620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " } else {\n"); 2630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " cmd->%s = %s;\n", vt->name, vt->name); 2640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " }\n"); 2650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else { 2670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " cmd->%s = %s;\n", vt->name, vt->name); 2680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->ret.typeName[0] || api->sync) { 2710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines needFlush = 1; 2720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->coreCommit();\n"); 2750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (hasInlineDataPointers(api)) { 2760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " if (dataSize >= io->getMaxInlineSize()) {\n"); 2770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->coreGetReturn(NULL, 0);\n"); 2780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " }\n"); 2790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else if (api->ret.typeName[0]) { 2800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n "); 2810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarType(f, &api->ret); 2820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " ret;\n"); 2830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->coreGetReturn(&ret, sizeof(ret));\n"); 2840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " return ret;\n"); 2850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else if (needFlush) { 2860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->coreGetReturn(NULL, 0);\n"); 2870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "};\n\n"); 2900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // Generate a remote sender function 2930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const char * str = "core"; 2940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->direct) { 2950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines str = "async"; 2960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 2970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "static "); 2990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFuncDecl(f, api, "RF_", 0, 0); 3000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n{\n"); 3010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " ThreadIO *io = &((Context *)rsc)->mIO;\n"); 3020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " const uint32_t cmdID = RS_CMD_ID_%s;\n", api->name); 3030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->%sWrite(&cmdID, sizeof(cmdID));\n\n", str); 3040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 3060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 3070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->ptrLevel == 0) { 3080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->%sWrite(& %s, sizeof(%s));\n", str, vt->name, vt->name); 3090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 3120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 3140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 3150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if ((vt->ptrLevel == 1) && (vt->isConst)) { 3160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->%sWrite(%s, %s_length);\n", str, vt->name, vt->name); 3170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 3200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 3220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 3230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if ((vt->ptrLevel == 2) && (vt->isConst)) { 3240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " for (size_t ct = 0; ct < (%s_length_length / sizeof(%s_length)); ct++) {\n", vt->name, vt->name); 3250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->%sWrite(%s[ct], %s_length[ct]);\n", str, vt->name, vt->name); 3260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " }\n"); 3270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 3300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 3320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 3330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if ((vt->ptrLevel == 1) && (!vt->isConst)) { 3340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->%sGetReturn(%s, %s_length);\n", str, vt->name, vt->name); 3350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 3380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 3400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 3410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if ((vt->ptrLevel == 2) && (!vt->isConst)) { 3420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " for (size_t ct = 0; ct < (%s_length_length / sizeof(%s_length)); ct++) {\n", vt->name, vt->name); 3430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->%sGetReturn(%s[ct], %s_length[ct]);\n", str, vt->name, vt->name); 3440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " }\n"); 3450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 3480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->ret.typeName[0]) { 3500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " "); 3510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarType(f, &api->ret); 3520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " retValue;\n"); 3530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->%sGetReturn(&retValue, sizeof(retValue));\n", str); 3540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " return retValue;\n"); 3550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else /*if (api->sync)*/ { 3560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->%sGetReturn(NULL, 0);\n", str); 3570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "}\n\n"); 3590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 3620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "static RsApiEntrypoints_t s_LocalTable = {\n"); 3630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 3640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " LF_%s,\n", apis[ct].name); 3650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "};\n"); 3670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 3690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "static RsApiEntrypoints_t s_RemoteTable = {\n"); 3700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 3710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " RF_%s,\n", apis[ct].name); 3720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "};\n"); 3740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "static RsApiEntrypoints_t *s_CurrentTable = &s_LocalTable;\n\n"); 3760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 3770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int needFlush = 0; 3780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const ApiEntry * api = &apis[ct]; 3790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFuncDecl(f, api, "rs", 0, 0); 3810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n{\n"); 3820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " "); 3830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->ret.typeName[0]) { 3840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "return "); 3850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "s_CurrentTable->%s(", api->name); 3870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (!api->nocontext) { 3890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "(Context *)rsc"); 3900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 3920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 3930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 3940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (ct2 > 0 || !api->nocontext) { 3950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ", "); 3960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "%s", vt->name); 3980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 3990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ");\n"); 4000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "}\n\n"); 4010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 4040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid printPlaybackCpp(FILE *f) { 4060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct; 4070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int ct2; 4080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsDevice.h\"\n"); 4100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsContext.h\"\n"); 4110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsThreadIO.h\"\n"); 4120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsgApiStructs.h\"\n"); 4130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsgApiFuncDecl.h\"\n"); 4140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 4150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "namespace android {\n"); 4160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "namespace renderscript {\n"); 4170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 4180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 4200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const ApiEntry * api = &apis[ct]; 4210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int needFlush = 0; 4220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->direct) { 4240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines continue; 4250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "void rsp_%s(Context *con, const void *vp, size_t cmdSizeBytes) {\n", api->name); 4280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " const RS_CMD_%s *cmd = static_cast<const RS_CMD_%s *>(vp);\n", api->name, api->name); 4290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (hasInlineDataPointers(api)) { 4310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " const uint8_t *baseData = 0;\n"); 4320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " if (cmdSizeBytes != sizeof(RS_CMD_%s)) {\n", api->name); 4330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " baseData = &((const uint8_t *)vp)[sizeof(*cmd)];\n"); 4340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " }\n"); 4350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " "); 4380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->ret.typeName[0]) { 4390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n "); 4400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarType(f, &api->ret); 4410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " ret = "); 4420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "rsi_%s(con", api->name); 4440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 4450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 4460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines needFlush += vt->ptrLevel; 4470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (hasInlineDataPointers(api) && vt->ptrLevel) { 4490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ",\n (const %s *)&baseData[(intptr_t)cmd->%s]", vt->typeName, vt->name); 4500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else { 4510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ",\n cmd->%s", vt->name); 4520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ");\n"); 4550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (hasInlineDataPointers(api)) { 4570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " size_t totalSize = 0;\n"); 4580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 4590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->params[ct2].ptrLevel) { 4600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " totalSize += cmd->%s_length;\n", api->params[ct2].name); 4610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_%s))) {\n", api->name); 4650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " con->mIO.coreSetReturn(NULL, 0);\n"); 4660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " }\n"); 4670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else if (api->ret.typeName[0]) { 4680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " con->mIO.coreSetReturn(&ret, sizeof(ret));\n"); 4690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else if (api->sync || needFlush) { 4700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " con->mIO.coreSetReturn(NULL, 0);\n"); 4710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "};\n\n"); 4740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 4770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const ApiEntry * api = &apis[ct]; 4780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int needFlush = 0; 4790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "void rspr_%s(Context *con, ThreadIO *io) {\n", api->name); 4810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " RS_CMD_%s cmd;\n", api->name); 4820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 4840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 4850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->ptrLevel == 0) { 4860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->coreRead(&cmd.%s, sizeof(cmd.%s));\n", vt->name, vt->name); 4870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 4890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 4900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 4920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 4930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->ptrLevel == 1) { 4940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " cmd.%s = (", vt->name); 4950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarType(f, vt); 4960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ")malloc(cmd.%s_length);\n", vt->name); 4970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 4980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->isConst) { 4990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " if (cmd.%s_length) io->coreRead((void *)cmd.%s, cmd.%s_length);\n", vt->name, vt->name, vt->name); 5000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 5040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 5060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 5070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->ptrLevel == 2) { 5080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " for (size_t ct = 0; ct < (cmd.%s_length_length / sizeof(cmd.%s_length)); ct++) {\n", vt->name, vt->name); 5090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " cmd.%s = (", vt->name); 5100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarType(f, vt); 5110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ")malloc(cmd.%s_length[ct]);\n", vt->name); 5120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->coreRead(& cmd.%s, cmd.%s_length[ct]);\n", vt->name, vt->name); 5130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " }\n"); 5140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 5170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->ret.typeName[0]) { 5190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " "); 5200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printVarType(f, &api->ret); 5210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " ret =\n"); 5220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " rsi_%s(", api->name); 5250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (!api->nocontext) { 5260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "con"); 5270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 5290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 5300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (ct2 > 0 || !api->nocontext) { 5310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ",\n"); 5320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " cmd.%s", vt->name); 5340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, ");\n"); 5360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 5380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 5390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if ((vt->ptrLevel == 1) && (!vt->isConst)) { 5400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->coreSetReturn((void *)cmd.%s, cmd.%s_length);\n", vt->name, vt->name); 5410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 5450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 5460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if ((vt->ptrLevel == 2) && (!vt->isConst)) { 5470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " for (size_t ct = 0; ct < (cmd.%s_length_length / sizeof(cmd.%s_length)); ct++) {\n", vt->name, vt->name); 5480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->coreSetReturn((void *)cmd.%s[ct], cmd.%s_length[ct]);\n", vt->name, vt->name); 5490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " }\n"); 5500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 5530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (api->ret.typeName[0]) { 5550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->coreSetReturn(&ret, sizeof(ret));\n"); 5560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else /*if (needFlush)*/ { 5570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " io->coreSetReturn(NULL, 0);\n"); 5580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 5610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 5620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->ptrLevel == 1) { 5630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " free((void *)cmd.%s);\n", vt->name); 5640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct2=0; ct2 < api->paramCount; ct2++) { 5670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const VarType *vt = &api->params[ct2]; 5680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (vt->ptrLevel == 2) { 5690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " for (size_t ct = 0; ct < (cmd.%s_length_length / sizeof(cmd.%s_length)); ct++) {\n", vt->name, vt->name); 5700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " free((void *)cmd.%s);\n", vt->name); 5710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " }\n"); 5720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "};\n\n"); 5760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "RsPlaybackLocalFunc gPlaybackFuncs[%i] = {\n", apiCount + 1); 5790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " NULL,\n"); 5800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 5810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (apis[ct].direct) { 5820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " NULL,\n"); 5830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else { 5840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " %s%s,\n", "rsp_", apis[ct].name); 5850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "};\n"); 5880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "RsPlaybackRemoteFunc gPlaybackRemoteFuncs[%i] = {\n", apiCount + 1); 5900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " NULL,\n"); 5910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (ct=0; ct < apiCount; ct++) { 5920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " %s%s,\n", "rspr_", apis[ct].name); 5930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 5940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "};\n"); 5950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 5960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "};\n"); 5970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "};\n"); 5980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 5990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid yylex(); 6010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesint main(int argc, char **argv) { 6030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (argc != 3) { 6040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(stderr, "usage: %s commandFile outFile\n", argv[0]); 6050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return 1; 6060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 6070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const char* rsgFile = argv[1]; 6080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const char* outFile = argv[2]; 6090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines FILE* input = fopen(rsgFile, "r"); 6100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines char choice = fgetc(input); 6120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fclose(input); 6130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (choice < '0' || choice > '3') { 6150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(stderr, "Uknown command: \'%c\'\n", choice); 6160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return -2; 6170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 6180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines yylex(); 6200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // printf("# of lines = %d\n", num_lines); 6210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines FILE *f = fopen(outFile, "w"); 6230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFileHeader(f); 6250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines switch (choice) { 6260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case '0': // rsgApiStructs.h 6270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { 6280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 6290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsContext.h\"\n"); 6300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "#include \"rsFifo.h\"\n"); 6310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n"); 6320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "namespace android {\n"); 6330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "namespace renderscript {\n"); 6340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printStructures(f); 6350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFuncDecls(f, "rsi_", 1); 6360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printPlaybackFuncs(f, "rsp_"); 6370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "\n\ntypedef struct RsPlaybackRemoteHeaderRec {\n"); 6380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " uint32_t command;\n"); 6390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, " uint32_t size;\n"); 6400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "} RsPlaybackRemoteHeader;\n\n"); 6410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "typedef void (*RsPlaybackLocalFunc)(Context *, const void *, size_t sizeBytes);\n"); 6420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "typedef void (*RsPlaybackRemoteFunc)(Context *, ThreadIO *);\n"); 6430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "extern RsPlaybackLocalFunc gPlaybackFuncs[%i];\n", apiCount + 1); 6440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "extern RsPlaybackRemoteFunc gPlaybackRemoteFuncs[%i];\n", apiCount + 1); 6450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "}\n"); 6470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fprintf(f, "}\n"); 6480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 6490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 6500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case '1': // rsgApiFuncDecl.h 6520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { 6530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFuncDecls(f, "rs", 0); 6540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 6550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 6560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case '2': // rsgApi.cpp 6580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { 6590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printApiCpp(f); 6600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 6610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 6620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case '3': // rsgApiReplay.cpp 6640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { 6650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFileHeader(f); 6660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printPlaybackCpp(f); 6670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 6680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 6690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case '4': // rsgApiStream.cpp 6710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { 6720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFileHeader(f); 6730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printPlaybackCpp(f); 6740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 6750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case '5': // rsgApiStreamReplay.cpp 6770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines { 6780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printFileHeader(f); 6790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines printPlaybackCpp(f); 6800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 6810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 6820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 6830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines fclose(f); 6840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return 0; 6850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 686