17eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams#define NO_RS_FUNCS 1
27eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
37eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams#include "stdio.h"
47eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams#include "RenderScript.h"
57eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams#include <vector>
67eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
77eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Samsstruct Element;
87eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
97eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Samsstruct ElementField {
107eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    const char *name;
117eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    Element *e;
127eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    ElementField(const char *n, Element *_e) {
137eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        name = n;
147eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        e = _e;
157eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    }
167eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    ElementField() {
177eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        name = NULL;
187eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        e = NULL;
197eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    }
207eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams};
217eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
227eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Samsstruct Element {
237eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    ElementField *fields;
247eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    size_t fieldCount;
257eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    const char *name;
267eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    bool generated;
277eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
287eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    RsDataType compType;
297eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    uint32_t compVectorSize;
307eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
317eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    Element() {
327eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        fields = NULL;
337eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        fieldCount = 0;
347eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        name = NULL;
357eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        generated = false;
367eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        compType = RS_TYPE_ELEMENT;
377eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        compVectorSize = 0;
387eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    }
397eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
407eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    Element(uint32_t _fieldCount, const char *_name) {
417eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        fields = new ElementField[_fieldCount];
427eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        fieldCount = _fieldCount;
437eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        name = _name;
447eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        generated = false;
457eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        compType = RS_TYPE_ELEMENT;
467eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        compVectorSize = 0;
477eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    }
487eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
497eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    Element(RsDataType t, uint32_t s) {
507eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        fields = NULL;
517eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        fieldCount = 0;
527eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        name = NULL;
537eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        generated = false;
547eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        compType = t;
557eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        compVectorSize = s;
567eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    }
577eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
587eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams};
597eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
607eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
617eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Samsstatic void genHeader(FILE *f, const char *packageName)
627eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams{
637eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "package %s;\n", packageName);
647eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "\n");
657eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "import android.renderscript.*;\n");
667eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "\n");
677eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "\n");
687eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams}
697eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
707eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Samsstatic const char * RSTypeToJava(RsDataType dt)
717eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams{
727eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    switch(dt) {
737eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_FLOAT_16:         return "float";
747eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_FLOAT_32:         return "float";
757eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_FLOAT_64:         return "double";
767eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
777eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_SIGNED_8:         return "byte";
787eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_SIGNED_16:        return "short";
797eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_SIGNED_32:        return "int";
807eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_SIGNED_64:        return "long";
817eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
827eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_UNSIGNED_8:       return "short";
837eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_UNSIGNED_16:      return "int";
847eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_UNSIGNED_32:      return "long";
857eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_UNSIGNED_64:      return NULL;
867eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
877eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_ELEMENT:          return "android.renderscript.Element";
887eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_TYPE:             return "android.renderscript.Type";
897eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_ALLOCATION:       return "android.renderscript.Allocation";
907eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_SAMPLER:          return "android.renderscript.Sampler";
917eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_SCRIPT:           return "android.renderscript.Script";
927eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_MESH:             return "android.renderscript.Mesh";
937eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_PROGRAM_FRAGMENT: return "android.renderscript.ProgramFragment";
947eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_PROGRAM_VERTEX:   return "android.renderscript.ProgramVertex";
957eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_PROGRAM_RASTER:   return "android.renderscript.ProgramRaster";
967eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_PROGRAM_STORE:    return "android.renderscript.ProgramStore";
977eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    default: return NULL;
987eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    }
997eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    return NULL;
1007eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams}
1017eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1027eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Samsstatic const char * RSTypeToString(RsDataType dt)
1037eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams{
1047eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    switch(dt) {
1057eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_FLOAT_16:         return "F16";
1067eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_FLOAT_32:         return "F32";
1077eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_FLOAT_64:         return "F64";
1087eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1097eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_SIGNED_8:         return "I8";
1107eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_SIGNED_16:        return "I16";
1117eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_SIGNED_32:        return "I32";
1127eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_SIGNED_64:        return "I64";
1137eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1147eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_UNSIGNED_8:       return "U8";
1157eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_UNSIGNED_16:      return "U16";
1167eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_UNSIGNED_32:      return "U32";
1177eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    case RS_TYPE_UNSIGNED_64:      return "U64";
1187eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1197eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_ELEMENT:          return "android.renderscript.Element";
1207eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_TYPE:             return "android.renderscript.Type";
1217eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_ALLOCATION:       return "android.renderscript.Allocation";
1227eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_SAMPLER:          return "android.renderscript.Sampler";
1237eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_SCRIPT:           return "android.renderscript.Script";
1247eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_MESH:             return "android.renderscript.Mesh";
1257eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_PROGRAM_FRAGMENT: return "android.renderscript.ProgramFragment";
1267eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_PROGRAM_VERTEX:   return "android.renderscript.ProgramVertex";
1277eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_PROGRAM_RASTER:   return "android.renderscript.ProgramRaster";
1287eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    //case RS_TYPE_PROGRAM_STORE:    return "android.renderscript.ProgramStore";
1297eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    default: return NULL;
1307eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    }
1317eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    return NULL;
1327eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams}
1337eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1347eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Samsbool rsGenerateElementClass(const Element *e, const char *packageName, FILE *f)
1357eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams{
1367eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    genHeader(f, packageName);
1377eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1387eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "class Element_%s {\n", e->name);
1397eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1407eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    for (size_t ct=0; ct < e->fieldCount; ct++) {
1417eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        const char *ts = RSTypeToJava(e->fields[ct].e->compType);
1427eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        if (ts == NULL) {
1437eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams            return false;
1447eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        }
1457eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        fprintf(f, "    public %s %s;\n", ts, e->fields[ct].name);
1467eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    }
1477eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1487eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "\n");
1497eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "    static Element getElement(RenderScript rs) {\n");
1507eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "        Element.Builder eb = new Element.Builder(rs);\n");
1517eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    for (size_t ct=0; ct < e->fieldCount; ct++) {
1527eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        const char *ts = RSTypeToString(e->fields[ct].e->compType);
1537eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        fprintf(f, "         eb.add(Element.USER_%s(rs), \"%s\");\n", ts, e->fields[ct].name);
1547eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    }
1557eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "        return eb.create();\n");
1567eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "    }\n");
1577eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1587eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "    static Allocation createAllocation(RenderScript rs) {\n");
1597eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "        Element e = getElement(rs);\n");
1607eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "        Allocation a = Allocation.createSized(rs, e, 1);\n");
1617eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "        return a;\n");
1627eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "    }\n");
1637eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1647eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1657eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "    void copyToAllocation(Allocation a) {\n");
1667eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "        mIOBuffer.reset();\n");
1677eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    for (size_t ct=0; ct < e->fieldCount; ct++) {
1687eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        const char *ts = RSTypeToString(e->fields[ct].e->compType);
1697eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        fprintf(f, "         mIOBuffer.add%s(%s);\n", ts, e->fields[ct].name);
1707eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    }
1717eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "        a.data(mIOBuffer.getData());\n");
1727eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "    }\n");
1737eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1747eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1757eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1767eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "    private FieldPacker mIOBuffer[];\n");
1777eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "    public Element_%s() {\n", e->name);
1787eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "        mIOBuffer = new FieldPacker(%i);\n", 100/*element->getSizeBytes()*/);
1797eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "    }\n");
1807eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1817eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1827eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "}\n");
1837eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1847eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    return true;
1857eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams}
1867eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1877eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Samsbool rsGenerateElementClassFile(Element *e, const char *packageName)
1887eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams{
1897eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    char buf[1024];
1907eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    sprintf(buf, "Element_%s.java", e->name);
1917eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    printf("Creating file %s \n", buf);
1927eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    FILE *f = fopen(buf, "w");
1937eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    bool ret = rsGenerateElementClass(e, packageName, f);
1947eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fclose(f);
1957eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    return ret;
1967eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams}
1977eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1987eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
1997eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2007eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2017eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams/*
2027eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Samsbool rsGenerateScriptClass(const ScriptC *script, const char *packageName, FILE *f)
2037eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams{
2047eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    genHeader(f, packageName);
2057eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2067eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    fprintf(f, "class ScriptC_%s {\n", script->getName());
2077eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2087eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2097eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2107eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams        ObjectBaseRef<const Type> mTypes[MAX_SCRIPT_BANKS];
2117eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    String8 mSlotNames[MAX_SCRIPT_BANKS];
2127eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    bool mSlotWritable[MAX_SCRIPT_BANKS];
2137eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2147eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2157eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams}
2167eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams*/
2177eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2187eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2197eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2207eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Samsint main(int argc, const char *argv)
2217eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams{
2227eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    Element *u8 = new Element(RS_TYPE_UNSIGNED_8, 1);
2237eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    Element *i32 = new Element(RS_TYPE_SIGNED_32, 1);
2247eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    Element *f32 = new Element(RS_TYPE_FLOAT_32, 1);
2257eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2267eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    Element *e_Pixel = new Element(4, "Pixel");
2277eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Pixel->fields[0].e = u8;
2287eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Pixel->fields[0].name = "a";
2297eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Pixel->fields[1].e = u8;
2307eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Pixel->fields[1].name = "b";
2317eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Pixel->fields[2].e = u8;
2327eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Pixel->fields[2].name = "g";
2337eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Pixel->fields[3].e = u8;
2347eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Pixel->fields[3].name = "r";
2357eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2367eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    Element *e_Params = new Element(5, "Params");
2377eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Params->fields[0].e = i32;
2387eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Params->fields[0].name = "inHeight";
2397eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Params->fields[1].e = i32;
2407eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Params->fields[1].name = "inWidth";
2417eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Params->fields[2].e = i32;
2427eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Params->fields[2].name = "outHeight";
2437eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Params->fields[3].e = i32;
2447eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Params->fields[3].name = "outWidth";
2457eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Params->fields[4].e = f32;
2467eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    e_Params->fields[4].name = "threshold";
2477eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2487eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2497eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    printf("1\n");
2507eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    rsGenerateElementClassFile(e_Pixel, "android");
2517eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams    rsGenerateElementClassFile(e_Params, "android");
2527eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
2537eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams}
2547eecbf2085bcfe475daf68090a1a4f47fbb6ec72Jason Sams
255