1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 284614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato#include "spec.h" 384614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato#include <stdio.h> 4da3b58d804b59595f1c618ff271fecd8a9ce59edShih-wei Liao#include <string.h> 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 6afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid printFileHeader(FILE *f) { 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "/*\n"); 8186e59154a0fb86e05e283e9c083b69878c06720Jason Sams fprintf(f, " * Copyright (C) 2011 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 24afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid printVarType(FILE *f, const VarType *vt) { 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (vt->isConst) { 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "const "); 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 30afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk switch (vt->type) { 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case 0: 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "void"); 33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case 1: 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "int%i_t", vt->bits); 36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case 2: 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "uint%i_t", vt->bits); 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case 3: 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (vt->bits == 32) 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "float"); 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams else 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "double"); 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case 4: 4784614dd02411e1cf9a4c37aa421898c471cfad20Joe Onorato fprintf(f, "%s", vt->typeName); 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 51afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk if (vt->ptrLevel) { 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " "); 53afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct=0; ct < vt->ptrLevel; ct++) { 54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "*"); 55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 575fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams} 585fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams 595fb1aeb6374f814d72117803682bc141cc6b0895Jason Samsvoid printVarTypeAndName(FILE *f, const VarType *vt) { 605fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams printVarType(f, vt); 61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 62afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk if (vt->name[0]) { 63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " %s", vt->name); 64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 67afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid printArgList(FILE *f, const ApiEntry * api, int assumePrevious) { 68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 69afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct=0; ct < api->paramCount; ct++) { 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (ct || assumePrevious) { 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ", "); 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 735fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams printVarTypeAndName(f, &api->params[ct]); 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 77afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid printStructures(FILE *f) { 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct2; 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 81afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct=0; ct < apiCount; ct++) { 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "typedef struct RS_CMD_%s_rec RS_CMD_%s;\n", apis[ct].name, apis[ct].name); 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 86afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct=0; ct < apiCount; ct++) { 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const ApiEntry * api = &apis[ct]; 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#define RS_CMD_ID_%s %i\n", api->name, ct+1); 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "struct RS_CMD_%s_rec {\n", api->name); 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //fprintf(f, " RsCommandHeader _hdr;\n"); 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 92afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct2=0; ct2 < api->paramCount; ct2++) { 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " "); 945fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams printVarTypeAndName(f, &api->params[ct2]); 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ";\n"); 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n\n"); 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 101c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Samsvoid printFuncDecl(FILE *f, const ApiEntry *api, const char *prefix, int addContext, int isFnPtr) { 1025fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams printVarTypeAndName(f, &api->ret); 103c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams if (isFnPtr) { 104c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams char t[1024]; 105c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams strcpy(t, api->name); 106c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams if (strlen(prefix) == 0) { 107c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams if (t[0] > 'A' && t[0] < 'Z') { 108c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams t[0] -= 'A' - 'a'; 109c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 110c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 111c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, " (* %s%s) (", prefix, api->name); 112c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } else { 113c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, " %s%s (", prefix, api->name); 114c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 115186e59154a0fb86e05e283e9c083b69878c06720Jason Sams if (!api->nocontext) { 116186e59154a0fb86e05e283e9c083b69878c06720Jason Sams if (addContext) { 117186e59154a0fb86e05e283e9c083b69878c06720Jason Sams fprintf(f, "Context *"); 118186e59154a0fb86e05e283e9c083b69878c06720Jason Sams } else { 119186e59154a0fb86e05e283e9c083b69878c06720Jason Sams fprintf(f, "RsContext rsc"); 120186e59154a0fb86e05e283e9c083b69878c06720Jason Sams } 121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 122186e59154a0fb86e05e283e9c083b69878c06720Jason Sams printArgList(f, api, !api->nocontext); 123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ")"); 124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 126afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid printFuncDecls(FILE *f, const char *prefix, int addContext) { 127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 128afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct=0; ct < apiCount; ct++) { 129c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams printFuncDecl(f, &apis[ct], prefix, addContext, 0); 130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, ";\n"); 131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n\n"); 133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 135c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Samsvoid printFuncPointers(FILE *f, int addContext) { 136c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "\n"); 137c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "typedef struct RsApiEntrypoints {\n"); 138c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams int ct; 139c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams for (ct=0; ct < apiCount; ct++) { 140c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, " "); 141c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams printFuncDecl(f, &apis[ct], "", addContext, 1); 142c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, ";\n"); 143c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 144c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "} RsApiEntrypoints_t;\n\n"); 145c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams} 146c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 147afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid printPlaybackFuncs(FILE *f, const char *prefix) { 148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 149afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct=0; ct < apiCount; ct++) { 150186e59154a0fb86e05e283e9c083b69878c06720Jason Sams if (apis[ct].direct) { 151186e59154a0fb86e05e283e9c083b69878c06720Jason Sams continue; 152186e59154a0fb86e05e283e9c083b69878c06720Jason Sams } 153186e59154a0fb86e05e283e9c083b69878c06720Jason Sams 154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "void %s%s (Context *, const void *);\n", prefix, apis[ct].name); 155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 1585fb1aeb6374f814d72117803682bc141cc6b0895Jason Samsstatic int hasInlineDataPointers(const ApiEntry * api) { 1595fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams int ret = 0; 1605fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams int ct; 161b693112b7513227b06d4a0a4e712ad3ce01451b4Jason Sams if (api->sync || api->ret.typeName[0]) { 1625fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams return 0; 1635fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } 1645fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams for (ct=0; ct < api->paramCount; ct++) { 1655fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams const VarType *vt = &api->params[ct]; 1665fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams 1675fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams if (!vt->isConst && vt->ptrLevel) { 1685fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams // Non-const pointers cannot be inlined. 1695fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams return 0; 1705fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } 1715fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams if (vt->ptrLevel > 1) { 1725fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams // not handled yet. 1735fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams return 0; 1745fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } 1755fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams 1765fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams if (vt->isConst && vt->ptrLevel) { 1775fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams // Non-const pointers cannot be inlined. 1785fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams ret = 1; 1795fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } 1805fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } 1815fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams return ret; 1825fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams} 1835fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams 184afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid printApiCpp(FILE *f) { 185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct2; 187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsDevice.h\"\n"); 189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsContext.h\"\n"); 190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsThreadIO.h\"\n"); 1914edf030cbb7c6ac08dc563335c2af73c20f6e2e5Alex Sakhartchouk fprintf(f, "#include \"rsgApiStructs.h\"\n"); 192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsgApiFuncDecl.h\"\n"); 1932008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "#include \"rsFifo.h\"\n"); 194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "using namespace android;\n"); 196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "using namespace android::renderscript;\n"); 197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 199c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams printFuncPointers(f, 0); 200c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 201c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams // Generate RS funcs for local fifo 202afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct=0; ct < apiCount; ct++) { 203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int needFlush = 0; 204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const ApiEntry * api = &apis[ct]; 205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 206c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "static "); 207c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams printFuncDecl(f, api, "LF_", 0, 0); 208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n{\n"); 2091a4efa363916977ef9aeab756725b3bdc880a15bJason Sams if (api->direct) { 2101a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " "); 2111a4efa363916977ef9aeab756725b3bdc880a15bJason Sams if (api->ret.typeName[0]) { 2121a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, "return "); 2131a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } 2141a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, "rsi_%s(", api->name); 2151a4efa363916977ef9aeab756725b3bdc880a15bJason Sams if (!api->nocontext) { 2161a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, "(Context *)rsc"); 217c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 218afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct2=0; ct2 < api->paramCount; ct2++) { 2199397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams const VarType *vt = &api->params[ct2]; 220c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams if (ct2 > 0 || !api->nocontext) { 221c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, ", "); 222c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 223c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "%s", vt->name); 2249397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams } 2259397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams fprintf(f, ");\n"); 2269397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams } else { 2274d252d6e807b89764dad123ac845df298c52ca97Tim Murray // handle synchronous path 2284d252d6e807b89764dad123ac845df298c52ca97Tim Murray fprintf(f, " if (((Context *)rsc)->isSynchronous()) {\n"); 2294d252d6e807b89764dad123ac845df298c52ca97Tim Murray fprintf(f, " "); 2304d252d6e807b89764dad123ac845df298c52ca97Tim Murray if (api->ret.typeName[0]) { 2314d252d6e807b89764dad123ac845df298c52ca97Tim Murray fprintf(f, "return "); 2324d252d6e807b89764dad123ac845df298c52ca97Tim Murray } 2334d252d6e807b89764dad123ac845df298c52ca97Tim Murray fprintf(f, "rsi_%s(", api->name); 2344d252d6e807b89764dad123ac845df298c52ca97Tim Murray if (!api->nocontext) { 2354d252d6e807b89764dad123ac845df298c52ca97Tim Murray fprintf(f, "(Context *)rsc"); 2364d252d6e807b89764dad123ac845df298c52ca97Tim Murray } 2374d252d6e807b89764dad123ac845df298c52ca97Tim Murray for (ct2=0; ct2 < api->paramCount; ct2++) { 2384d252d6e807b89764dad123ac845df298c52ca97Tim Murray const VarType *vt = &api->params[ct2]; 2394d252d6e807b89764dad123ac845df298c52ca97Tim Murray if (ct2 > 0 || !api->nocontext) { 2404d252d6e807b89764dad123ac845df298c52ca97Tim Murray fprintf(f, ", "); 2414d252d6e807b89764dad123ac845df298c52ca97Tim Murray } 2424d252d6e807b89764dad123ac845df298c52ca97Tim Murray fprintf(f, "%s", vt->name); 2434d252d6e807b89764dad123ac845df298c52ca97Tim Murray } 2444d252d6e807b89764dad123ac845df298c52ca97Tim Murray fprintf(f, ");\n"); 2454d252d6e807b89764dad123ac845df298c52ca97Tim Murray if (!api->ret.typeName[0]) { 2464d252d6e807b89764dad123ac845df298c52ca97Tim Murray fprintf(f, " return;"); 2474d252d6e807b89764dad123ac845df298c52ca97Tim Murray } 2484d252d6e807b89764dad123ac845df298c52ca97Tim Murray fprintf(f, " }\n\n"); 2494d252d6e807b89764dad123ac845df298c52ca97Tim Murray 2509397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams fprintf(f, " ThreadIO *io = &((Context *)rsc)->mIO;\n"); 251099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray fprintf(f, " const size_t size = sizeof(RS_CMD_%s);\n", api->name); 2525fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams if (hasInlineDataPointers(api)) { 253099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray fprintf(f, " size_t dataSize = 0;\n"); 2545fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 2555fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams const VarType *vt = &api->params[ct2]; 2565fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams if (vt->isConst && vt->ptrLevel) { 2575fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams fprintf(f, " dataSize += %s_length;\n", vt->name); 2585fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } 2595fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } 2605fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } 2615fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams 262af12ac6a08651464f8d823add667c706f993b587Steve Block //fprintf(f, " ALOGE(\"add command %s\\n\");\n", api->name); 2635fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams if (hasInlineDataPointers(api)) { 264b693112b7513227b06d4a0a4e712ad3ce01451b4Jason Sams fprintf(f, " RS_CMD_%s *cmd = NULL;\n", api->name); 265bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " if (dataSize < io->getMaxInlineSize()) {;\n"); 2661a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " cmd = static_cast<RS_CMD_%s *>(io->coreHeader(RS_CMD_ID_%s, dataSize + size));\n", api->name, api->name); 267b693112b7513227b06d4a0a4e712ad3ce01451b4Jason Sams fprintf(f, " } else {\n"); 2681a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " cmd = static_cast<RS_CMD_%s *>(io->coreHeader(RS_CMD_ID_%s, size));\n", api->name, api->name); 269b693112b7513227b06d4a0a4e712ad3ce01451b4Jason Sams fprintf(f, " }\n"); 2705fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams fprintf(f, " uint8_t *payload = (uint8_t *)&cmd[1];\n"); 2716e58aef90ec70adf4e7d6d18b869aed143a2ec02Jason Sams } else { 2721a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 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); 2735fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } 2749397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams 275afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct2=0; ct2 < api->paramCount; ct2++) { 2769397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams const VarType *vt = &api->params[ct2]; 2779397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams needFlush += vt->ptrLevel; 2785fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams if (vt->ptrLevel && hasInlineDataPointers(api)) { 279bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " if (dataSize < io->getMaxInlineSize()) {\n"); 2805fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams fprintf(f, " memcpy(payload, %s, %s_length);\n", vt->name, vt->name); 2815fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams fprintf(f, " cmd->%s = (", vt->name); 2825fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams printVarType(f, vt); 2835f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, ")(payload - ((uint8_t *)&cmd[1]));\n"); 2845fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams fprintf(f, " payload += %s_length;\n", vt->name); 2855fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams fprintf(f, " } else {\n"); 2865fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams fprintf(f, " cmd->%s = %s;\n", vt->name, vt->name); 2875fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams fprintf(f, " }\n"); 2885fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams 2895fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } else { 2905fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams fprintf(f, " cmd->%s = %s;\n", vt->name, vt->name); 2915fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams } 2929397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams } 2931a4efa363916977ef9aeab756725b3bdc880a15bJason Sams if (api->ret.typeName[0] || api->sync) { 2949397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams needFlush = 1; 2959397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams } 2969397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams 2975f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, " io->coreCommit();\n"); 2985fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams if (hasInlineDataPointers(api)) { 299bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " if (dataSize >= io->getMaxInlineSize()) {\n"); 3005f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, " io->coreGetReturn(NULL, 0);\n"); 3015fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams fprintf(f, " }\n"); 3025f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams } else if (api->ret.typeName[0]) { 3031a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, "\n "); 3042008747941749ad27fe80663d23036ac320e998fJason Sams printVarType(f, &api->ret); 3051a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " ret;\n"); 3061a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " io->coreGetReturn(&ret, sizeof(ret));\n"); 3071a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " return ret;\n"); 3085f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams } else if (needFlush) { 3095f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, " io->coreGetReturn(NULL, 0);\n"); 3109397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams } 311326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 312326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n\n"); 3132008747941749ad27fe80663d23036ac320e998fJason Sams 3142008747941749ad27fe80663d23036ac320e998fJason Sams 315bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams // Generate a remote sender function 316bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams const char * str = "core"; 317bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if (api->direct) { 318bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams str = "async"; 319bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 320bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 3212008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "static "); 3222008747941749ad27fe80663d23036ac320e998fJason Sams printFuncDecl(f, api, "RF_", 0, 0); 3232008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "\n{\n"); 324bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " ThreadIO *io = &((Context *)rsc)->mIO;\n"); 3252008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " const uint32_t cmdID = RS_CMD_ID_%s;\n", api->name); 326bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->%sWrite(&cmdID, sizeof(cmdID));\n\n", str); 327bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 3281a4efa363916977ef9aeab756725b3bdc880a15bJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 3291a4efa363916977ef9aeab756725b3bdc880a15bJason Sams const VarType *vt = &api->params[ct2]; 330bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if (vt->ptrLevel == 0) { 331bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->%sWrite(& %s, sizeof(%s));\n", str, vt->name, vt->name); 3322008747941749ad27fe80663d23036ac320e998fJason Sams } 3331a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } 3341a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, "\n"); 3352008747941749ad27fe80663d23036ac320e998fJason Sams 3361a4efa363916977ef9aeab756725b3bdc880a15bJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 3371a4efa363916977ef9aeab756725b3bdc880a15bJason Sams const VarType *vt = &api->params[ct2]; 338bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if ((vt->ptrLevel == 1) && (vt->isConst)) { 339bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->%sWrite(%s, %s_length);\n", str, vt->name, vt->name); 340bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 341bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 342bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, "\n"); 343bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 344bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 345bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams const VarType *vt = &api->params[ct2]; 346bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if ((vt->ptrLevel == 2) && (vt->isConst)) { 3471a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " for (size_t ct = 0; ct < (%s_length_length / sizeof(%s_length)); ct++) {\n", vt->name, vt->name); 348bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->%sWrite(%s[ct], %s_length[ct]);\n", str, vt->name, vt->name); 3491a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " }\n"); 3502008747941749ad27fe80663d23036ac320e998fJason Sams } 3511a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } 3521a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, "\n"); 3532008747941749ad27fe80663d23036ac320e998fJason Sams 3541a4efa363916977ef9aeab756725b3bdc880a15bJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 3551a4efa363916977ef9aeab756725b3bdc880a15bJason Sams const VarType *vt = &api->params[ct2]; 356bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if ((vt->ptrLevel == 1) && (!vt->isConst)) { 357bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->%sGetReturn(%s, %s_length);\n", str, vt->name, vt->name); 3581a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } 359bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 360bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, "\n"); 361bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 362bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 363bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams const VarType *vt = &api->params[ct2]; 364bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if ((vt->ptrLevel == 2) && (!vt->isConst)) { 3651a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " for (size_t ct = 0; ct < (%s_length_length / sizeof(%s_length)); ct++) {\n", vt->name, vt->name); 366bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->%sGetReturn(%s[ct], %s_length[ct]);\n", str, vt->name, vt->name); 3671a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " }\n"); 3682008747941749ad27fe80663d23036ac320e998fJason Sams } 3692008747941749ad27fe80663d23036ac320e998fJason Sams } 370bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, "\n"); 3711a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 3721a4efa363916977ef9aeab756725b3bdc880a15bJason Sams if (api->ret.typeName[0]) { 3731a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " "); 3741a4efa363916977ef9aeab756725b3bdc880a15bJason Sams printVarType(f, &api->ret); 3751a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " retValue;\n"); 376bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->%sGetReturn(&retValue, sizeof(retValue));\n", str); 3771a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " return retValue;\n"); 378bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } else /*if (api->sync)*/ { 379bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->%sGetReturn(NULL, 0);\n", str); 3801a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } 3812008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "}\n\n"); 382326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 383c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 384c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "\n"); 385c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "static RsApiEntrypoints_t s_LocalTable = {\n"); 386c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams for (ct=0; ct < apiCount; ct++) { 387c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, " LF_%s,\n", apis[ct].name); 388c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 389c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "};\n"); 390c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 3912008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "\n"); 3922008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "static RsApiEntrypoints_t s_RemoteTable = {\n"); 3932008747941749ad27fe80663d23036ac320e998fJason Sams for (ct=0; ct < apiCount; ct++) { 3942008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " RF_%s,\n", apis[ct].name); 3952008747941749ad27fe80663d23036ac320e998fJason Sams } 3962008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "};\n"); 397c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 3982008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "static RsApiEntrypoints_t *s_CurrentTable = &s_LocalTable;\n\n"); 399c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams for (ct=0; ct < apiCount; ct++) { 400c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams int needFlush = 0; 401c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams const ApiEntry * api = &apis[ct]; 402c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 403c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams printFuncDecl(f, api, "rs", 0, 0); 404c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "\n{\n"); 405c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, " "); 406c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams if (api->ret.typeName[0]) { 407c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "return "); 408c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 409c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "s_CurrentTable->%s(", api->name); 410c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 411c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams if (!api->nocontext) { 412c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "(Context *)rsc"); 413c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 414c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 415c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 416c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams const VarType *vt = &api->params[ct2]; 417c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams if (ct2 > 0 || !api->nocontext) { 418c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, ", "); 419c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 420c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "%s", vt->name); 421c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 422c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, ");\n"); 423c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams fprintf(f, "}\n\n"); 424c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 425c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 426326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 427326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 428afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid printPlaybackCpp(FILE *f) { 429326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct; 430326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int ct2; 431326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 432326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsDevice.h\"\n"); 433326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsContext.h\"\n"); 434326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsThreadIO.h\"\n"); 4354edf030cbb7c6ac08dc563335c2af73c20f6e2e5Alex Sakhartchouk fprintf(f, "#include \"rsgApiStructs.h\"\n"); 436326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsgApiFuncDecl.h\"\n"); 437326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 438326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "namespace android {\n"); 439326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "namespace renderscript {\n"); 440326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 441326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 442afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct=0; ct < apiCount; ct++) { 443326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const ApiEntry * api = &apis[ct]; 4445f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams int needFlush = 0; 445326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 446186e59154a0fb86e05e283e9c083b69878c06720Jason Sams if (api->direct) { 447186e59154a0fb86e05e283e9c083b69878c06720Jason Sams continue; 448186e59154a0fb86e05e283e9c083b69878c06720Jason Sams } 449186e59154a0fb86e05e283e9c083b69878c06720Jason Sams 4502008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "void rsp_%s(Context *con, const void *vp, size_t cmdSizeBytes) {\n", api->name); 451186e59154a0fb86e05e283e9c083b69878c06720Jason Sams fprintf(f, " const RS_CMD_%s *cmd = static_cast<const RS_CMD_%s *>(vp);\n", api->name, api->name); 4525fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams 4535f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams if (hasInlineDataPointers(api)) { 4545f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, " const uint8_t *baseData = 0;\n"); 4555f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, " if (cmdSizeBytes != sizeof(RS_CMD_%s)) {\n", api->name); 4565f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, " baseData = &((const uint8_t *)vp)[sizeof(*cmd)];\n"); 4575f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, " }\n"); 4585f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams } 4595f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams 460186e59154a0fb86e05e283e9c083b69878c06720Jason Sams fprintf(f, " "); 461186e59154a0fb86e05e283e9c083b69878c06720Jason Sams if (api->ret.typeName[0]) { 4621a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, "\n "); 4631a4efa363916977ef9aeab756725b3bdc880a15bJason Sams printVarType(f, &api->ret); 4641a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " ret = "); 465326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 466186e59154a0fb86e05e283e9c083b69878c06720Jason Sams fprintf(f, "rsi_%s(con", api->name); 467186e59154a0fb86e05e283e9c083b69878c06720Jason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 468186e59154a0fb86e05e283e9c083b69878c06720Jason Sams const VarType *vt = &api->params[ct2]; 4695f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams needFlush += vt->ptrLevel; 4705f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams 4715f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams if (hasInlineDataPointers(api) && vt->ptrLevel) { 4725f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, ",\n (const %s *)&baseData[(intptr_t)cmd->%s]", vt->typeName, vt->name); 4735f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams } else { 4745f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, ",\n cmd->%s", vt->name); 4755f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams } 476186e59154a0fb86e05e283e9c083b69878c06720Jason Sams } 477186e59154a0fb86e05e283e9c083b69878c06720Jason Sams fprintf(f, ");\n"); 478186e59154a0fb86e05e283e9c083b69878c06720Jason Sams 4795f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams if (hasInlineDataPointers(api)) { 480ee5cf0067c374e1c7e9a0736e24e55f4d19a0721Jason Sams fprintf(f, " size_t totalSize = 0;\n"); 481ee5cf0067c374e1c7e9a0736e24e55f4d19a0721Jason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 482ee5cf0067c374e1c7e9a0736e24e55f4d19a0721Jason Sams if (api->params[ct2].ptrLevel) { 483ee5cf0067c374e1c7e9a0736e24e55f4d19a0721Jason Sams fprintf(f, " totalSize += cmd->%s_length;\n", api->params[ct2].name); 484ee5cf0067c374e1c7e9a0736e24e55f4d19a0721Jason Sams } 485ee5cf0067c374e1c7e9a0736e24e55f4d19a0721Jason Sams } 486ee5cf0067c374e1c7e9a0736e24e55f4d19a0721Jason Sams 487ee5cf0067c374e1c7e9a0736e24e55f4d19a0721Jason Sams fprintf(f, " if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_%s))) {\n", api->name); 4885f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, " con->mIO.coreSetReturn(NULL, 0);\n"); 4895f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, " }\n"); 4905f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams } else if (api->ret.typeName[0]) { 4911a4efa363916977ef9aeab756725b3bdc880a15bJason Sams fprintf(f, " con->mIO.coreSetReturn(&ret, sizeof(ret));\n"); 4925f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams } else if (api->sync || needFlush) { 4935f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams fprintf(f, " con->mIO.coreSetReturn(NULL, 0);\n"); 4941a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } 4951a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 496326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n\n"); 497326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 498326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 4992008747941749ad27fe80663d23036ac320e998fJason Sams for (ct=0; ct < apiCount; ct++) { 5002008747941749ad27fe80663d23036ac320e998fJason Sams const ApiEntry * api = &apis[ct]; 5015f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams int needFlush = 0; 5022008747941749ad27fe80663d23036ac320e998fJason Sams 503bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, "void rspr_%s(Context *con, ThreadIO *io) {\n", api->name); 5042008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " RS_CMD_%s cmd;\n", api->name); 5052008747941749ad27fe80663d23036ac320e998fJason Sams 5062008747941749ad27fe80663d23036ac320e998fJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 5072008747941749ad27fe80663d23036ac320e998fJason Sams const VarType *vt = &api->params[ct2]; 508bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if (vt->ptrLevel == 0) { 509bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->coreRead(&cmd.%s, sizeof(cmd.%s));\n", vt->name, vt->name); 510bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 511bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 512bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, "\n"); 513bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 514bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 515bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams const VarType *vt = &api->params[ct2]; 5162008747941749ad27fe80663d23036ac320e998fJason Sams if (vt->ptrLevel == 1) { 5172008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " cmd.%s = (", vt->name); 5182008747941749ad27fe80663d23036ac320e998fJason Sams printVarType(f, vt); 519bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, ")malloc(cmd.%s_length);\n", vt->name); 520bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 521bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if (vt->isConst) { 522bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " if (cmd.%s_length) io->coreRead((void *)cmd.%s, cmd.%s_length);\n", vt->name, vt->name, vt->name); 523bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 5242008747941749ad27fe80663d23036ac320e998fJason Sams } 525bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 526bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, "\n"); 527bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 528bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 529bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams const VarType *vt = &api->params[ct2]; 5302008747941749ad27fe80663d23036ac320e998fJason Sams if (vt->ptrLevel == 2) { 5312008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " for (size_t ct = 0; ct < (cmd.%s_length_length / sizeof(cmd.%s_length)); ct++) {\n", vt->name, vt->name); 532bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " cmd.%s = (", vt->name); 533bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams printVarType(f, vt); 534bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, ")malloc(cmd.%s_length[ct]);\n", vt->name); 535bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->coreRead(& cmd.%s, cmd.%s_length[ct]);\n", vt->name, vt->name); 5362008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " }\n"); 5372008747941749ad27fe80663d23036ac320e998fJason Sams } 5382008747941749ad27fe80663d23036ac320e998fJason Sams } 5392008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "\n"); 5402008747941749ad27fe80663d23036ac320e998fJason Sams 5412008747941749ad27fe80663d23036ac320e998fJason Sams if (api->ret.typeName[0]) { 5422008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " "); 5432008747941749ad27fe80663d23036ac320e998fJason Sams printVarType(f, &api->ret); 5442008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " ret =\n"); 5452008747941749ad27fe80663d23036ac320e998fJason Sams } 5462008747941749ad27fe80663d23036ac320e998fJason Sams 5472008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " rsi_%s(", api->name); 5482008747941749ad27fe80663d23036ac320e998fJason Sams if (!api->nocontext) { 5492008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "con"); 5502008747941749ad27fe80663d23036ac320e998fJason Sams } 5512008747941749ad27fe80663d23036ac320e998fJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 5522008747941749ad27fe80663d23036ac320e998fJason Sams const VarType *vt = &api->params[ct2]; 5532008747941749ad27fe80663d23036ac320e998fJason Sams if (ct2 > 0 || !api->nocontext) { 5542008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, ",\n"); 5552008747941749ad27fe80663d23036ac320e998fJason Sams } 5562008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " cmd.%s", vt->name); 5572008747941749ad27fe80663d23036ac320e998fJason Sams } 5582008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, ");\n"); 5592008747941749ad27fe80663d23036ac320e998fJason Sams 560bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 561bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams const VarType *vt = &api->params[ct2]; 562bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if ((vt->ptrLevel == 1) && (!vt->isConst)) { 563bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->coreSetReturn((void *)cmd.%s, cmd.%s_length);\n", vt->name, vt->name); 564bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 565bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 566bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 567bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 568bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams const VarType *vt = &api->params[ct2]; 569bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if ((vt->ptrLevel == 2) && (!vt->isConst)) { 570bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " for (size_t ct = 0; ct < (cmd.%s_length_length / sizeof(cmd.%s_length)); ct++) {\n", vt->name, vt->name); 571bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->coreSetReturn((void *)cmd.%s[ct], cmd.%s_length[ct]);\n", vt->name, vt->name); 572bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " }\n"); 573bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 574bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 575bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, "\n"); 576bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 5772008747941749ad27fe80663d23036ac320e998fJason Sams if (api->ret.typeName[0]) { 578bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->coreSetReturn(&ret, sizeof(ret));\n"); 579bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } else /*if (needFlush)*/ { 580bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " io->coreSetReturn(NULL, 0);\n"); 581bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 582bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams 583bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 584bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams const VarType *vt = &api->params[ct2]; 585bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if (vt->ptrLevel == 1) { 586bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " free((void *)cmd.%s);\n", vt->name); 587bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 588bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 589bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams for (ct2=0; ct2 < api->paramCount; ct2++) { 590bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams const VarType *vt = &api->params[ct2]; 591bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams if (vt->ptrLevel == 2) { 592bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " for (size_t ct = 0; ct < (cmd.%s_length_length / sizeof(cmd.%s_length)); ct++) {\n", vt->name, vt->name); 593bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " free((void *)cmd.%s);\n", vt->name); 594bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, " }\n"); 595bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams } 5962008747941749ad27fe80663d23036ac320e998fJason Sams } 5972008747941749ad27fe80663d23036ac320e998fJason Sams 5982008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "};\n\n"); 5992008747941749ad27fe80663d23036ac320e998fJason Sams } 6002008747941749ad27fe80663d23036ac320e998fJason Sams 6012008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "RsPlaybackLocalFunc gPlaybackFuncs[%i] = {\n", apiCount + 1); 602326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, " NULL,\n"); 603afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk for (ct=0; ct < apiCount; ct++) { 604186e59154a0fb86e05e283e9c083b69878c06720Jason Sams if (apis[ct].direct) { 605186e59154a0fb86e05e283e9c083b69878c06720Jason Sams fprintf(f, " NULL,\n"); 606186e59154a0fb86e05e283e9c083b69878c06720Jason Sams } else { 607186e59154a0fb86e05e283e9c083b69878c06720Jason Sams fprintf(f, " %s%s,\n", "rsp_", apis[ct].name); 608186e59154a0fb86e05e283e9c083b69878c06720Jason Sams } 609326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 610326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n"); 611326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 6122008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "RsPlaybackRemoteFunc gPlaybackRemoteFuncs[%i] = {\n", apiCount + 1); 6132008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " NULL,\n"); 6142008747941749ad27fe80663d23036ac320e998fJason Sams for (ct=0; ct < apiCount; ct++) { 6152008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " %s%s,\n", "rspr_", apis[ct].name); 6162008747941749ad27fe80663d23036ac320e998fJason Sams } 6172008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "};\n"); 6182008747941749ad27fe80663d23036ac320e998fJason Sams 619326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n"); 620326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "};\n"); 621326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 622326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 6235fb1aeb6374f814d72117803682bc141cc6b0895Jason Samsvoid yylex(); 6245fb1aeb6374f814d72117803682bc141cc6b0895Jason Sams 625afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukint main(int argc, char **argv) { 626326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (argc != 3) { 627326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(stderr, "usage: %s commandFile outFile\n", argv[0]); 628326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return 1; 629326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 630326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const char* rsgFile = argv[1]; 631326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const char* outFile = argv[2]; 632326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams FILE* input = fopen(rsgFile, "r"); 633326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 634326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams char choice = fgetc(input); 635326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fclose(input); 636326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 637326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (choice < '0' || choice > '3') { 638326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(stderr, "Uknown command: \'%c\'\n", choice); 639326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return -2; 640326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 641326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 642326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams yylex(); 643326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams // printf("# of lines = %d\n", num_lines); 644326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 645326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams FILE *f = fopen(outFile, "w"); 646326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 647326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printFileHeader(f); 648afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk switch (choice) { 649326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case '0': // rsgApiStructs.h 650326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams { 651326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 652326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "#include \"rsContext.h\"\n"); 6532008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "#include \"rsFifo.h\"\n"); 654326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "\n"); 655326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "namespace android {\n"); 656326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "namespace renderscript {\n"); 657326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printStructures(f); 658326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printFuncDecls(f, "rsi_", 1); 659326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printPlaybackFuncs(f, "rsp_"); 6602008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "\n\ntypedef struct RsPlaybackRemoteHeaderRec {\n"); 6612008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, " uint32_t command;\n"); 662099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray fprintf(f, " size_t size;\n"); 6632008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "} RsPlaybackRemoteHeader;\n\n"); 6642008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "typedef void (*RsPlaybackLocalFunc)(Context *, const void *, size_t sizeBytes);\n"); 665bda75a977726835d74b2380d7e92360ed2a1ff7aJason Sams fprintf(f, "typedef void (*RsPlaybackRemoteFunc)(Context *, ThreadIO *);\n"); 6662008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "extern RsPlaybackLocalFunc gPlaybackFuncs[%i];\n", apiCount + 1); 6672008747941749ad27fe80663d23036ac320e998fJason Sams fprintf(f, "extern RsPlaybackRemoteFunc gPlaybackRemoteFuncs[%i];\n", apiCount + 1); 668326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 669326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "}\n"); 670326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fprintf(f, "}\n"); 671326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 672326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 673326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 674326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case '1': // rsgApiFuncDecl.h 675326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams { 676326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printFuncDecls(f, "rs", 0); 677326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 678326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 679326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 680326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case '2': // rsgApi.cpp 681326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams { 682326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printApiCpp(f); 683326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 684326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 685326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 686326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case '3': // rsgApiReplay.cpp 687326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams { 688326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printFileHeader(f); 689326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams printPlaybackCpp(f); 690326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 691326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 692c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 693c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams case '4': // rsgApiStream.cpp 694c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams { 695c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams printFileHeader(f); 696c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams printPlaybackCpp(f); 697c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 698c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams 699c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams case '5': // rsgApiStreamReplay.cpp 700c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams { 701c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams printFileHeader(f); 702c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams printPlaybackCpp(f); 703c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams } 704c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams break; 705326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 706326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams fclose(f); 707326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return 0; 708326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 709