1704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
2704616e76e43c827ed554b797151a996bcbf3a77Tim Murray#include "RenderScript.h"
3704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
4704616e76e43c827ed554b797151a996bcbf3a77Tim Murray#include "ScriptC_multiply.h"
5704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
6704616e76e43c827ed554b797151a996bcbf3a77Tim Murrayusing namespace android;
79eb7f4b90120ebe4be74343856e86b46495f72dfTim Murrayusing namespace RSC;
8704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
9704616e76e43c827ed554b797151a996bcbf3a77Tim Murrayint main(int argc, char** argv)
10704616e76e43c827ed554b797151a996bcbf3a77Tim Murray{
11704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
12704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    uint32_t numElems = 1024;
13704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
14704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    if (argc >= 2) {
15704616e76e43c827ed554b797151a996bcbf3a77Tim Murray        int tempNumElems = atoi(argv[1]);
16704616e76e43c827ed554b797151a996bcbf3a77Tim Murray        if (tempNumElems < 1) {
17704616e76e43c827ed554b797151a996bcbf3a77Tim Murray            printf("numElems must be greater than 0\n");
18704616e76e43c827ed554b797151a996bcbf3a77Tim Murray            return 1;
19704616e76e43c827ed554b797151a996bcbf3a77Tim Murray        }
20704616e76e43c827ed554b797151a996bcbf3a77Tim Murray        numElems = (uint32_t) tempNumElems;
21704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    }
22704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
23704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    sp<RS> rs = new RS();
24704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
2579dc3c9c918515a793b3fdcd188cb553feccca8bTim Murray    bool r = rs->init("/system/bin");
26704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
27704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    sp<const Element> e = Element::U32(rs);
28704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
29704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    Type::Builder tb(rs, e);
30704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    tb.setX(numElems);
31704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    sp<const Type> t = tb.create();
32704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
33704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    sp<Allocation> ain = Allocation::createTyped(rs, t);
34704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    sp<Allocation> aout = Allocation::createTyped(rs, t);
35704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
3641efe87eb48ed945df2f26f4dff0eb5e00b8eebeStephen Hines    sp<ScriptC_multiply> sc = new ScriptC_multiply(rs);
37704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
38704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    uint32_t* buf = new uint32_t[numElems];
39704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    for (uint32_t ct=0; ct < numElems; ct++) {
40704616e76e43c827ed554b797151a996bcbf3a77Tim Murray        buf[ct] = (uint32_t)ct;
41704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    }
42704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
430b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray    ain->copy1DRangeFrom(0, numElems, buf);
44704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
45704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    sc->forEach_multiply(ain, aout);
46704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
470b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray    aout->copy1DRangeTo(0, numElems, buf);
48704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
49704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    for (uint32_t ct=0; ct < numElems; ct++) {
50704616e76e43c827ed554b797151a996bcbf3a77Tim Murray        if (buf[ct] !=  ct * 2) {
51704616e76e43c827ed554b797151a996bcbf3a77Tim Murray            printf("Mismatch at location %d: %u\n", ct, buf[ct]);
52704616e76e43c827ed554b797151a996bcbf3a77Tim Murray            return 1;
53704616e76e43c827ed554b797151a996bcbf3a77Tim Murray        }
54704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    }
55704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
56704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    printf("Test successful with %u elems!\n", numElems);
57704616e76e43c827ed554b797151a996bcbf3a77Tim Murray
58704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    sc.clear();
59704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    t.clear();
60704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    e.clear();
61704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    ain.clear();
62704616e76e43c827ed554b797151a996bcbf3a77Tim Murray    aout.clear();
63704616e76e43c827ed554b797151a996bcbf3a77Tim Murray}
64