1 
2 #include "RenderScript.h"
3 
4 #include "ScriptC_mono.h"
5 
6 #include <stdlib.h>
7 
8 const uint32_t DIMX = 128;
9 const uint32_t DIMY = 128;
10 
test_compute()11 int test_compute()
12 {
13     bool failed = false;
14 
15     sp<RS> rs = new RS();
16     printf("New RS %p\n", rs.get());
17 
18     // only legitimate because this is a standalone executable
19     bool r = rs->init("/system/bin");
20     printf("Init returned %i\n", r);
21 
22     sp<const Element> e = Element::U32(rs);
23     printf("Element %p\n", e.get());
24 
25     Type::Builder tb(rs, e);
26     tb.setX(DIMX);
27     tb.setY(DIMY);
28     sp<const Type> t = tb.create();
29     printf("Type %p\n", t.get());
30 
31 
32     sp<Allocation> a1 = Allocation::createSized(rs, e, 1000);
33     printf("Allocation %p\n", a1.get());
34 
35     sp<Allocation> ain = Allocation::createTyped(rs, t, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_SHARED);
36     sp<Allocation> aout = Allocation::createTyped(rs, t, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_SHARED);
37     printf("Allocation %p %p\n", ain.get(), aout.get());
38 
39     size_t inputStride, outputStride;
40 
41     uint32_t *input = (uint32_t*)ain->getPointer(&inputStride);
42     uint32_t *output = (uint32_t*)aout->getPointer(&outputStride);
43 
44     printf("Input pointer: %p\n", input);
45     printf("Input stride: %zu\n", inputStride);
46     printf("Output pointer: %p\n", output);
47     printf("Output stride: %zu\n", outputStride);
48 
49     inputStride /= sizeof(uint32_t);
50     outputStride /= sizeof(uint32_t);
51 
52     for (size_t i = 0; i < DIMY; i++) {
53         for (size_t j = 0; j < DIMX; j++) {
54             input[i * inputStride + j] = rand();
55             output[i * inputStride + j] = 0;
56         }
57     }
58 
59     ain->syncAll(RS_ALLOCATION_USAGE_SHARED);
60     aout->syncAll(RS_ALLOCATION_USAGE_SHARED);
61 
62     printf("Launching script\n");
63 
64     sp<ScriptC_mono> sc = new ScriptC_mono(rs);
65     sc->forEach_copyAndNot(ain, aout);
66     rs->finish();
67 
68     printf("Script completed\n");
69 
70     ain->syncAll(RS_ALLOCATION_USAGE_SCRIPT);
71     aout->syncAll(RS_ALLOCATION_USAGE_SCRIPT);
72 
73     for (size_t i = 0; i < DIMY; i++) {
74         for (size_t j = 0; j < DIMX; j++) {
75             if (input[i * inputStride + j] != ~(output[i * inputStride + j])) {
76                 printf("Mismatch at location %zu, %zu\n", j, i);
77                 failed = true;
78                 return failed;
79             }
80         }
81     }
82 
83 
84     return failed;
85 }
86 
main()87 int main() {
88     bool failed = test_compute();
89 
90     if (failed) {
91         printf("TEST FAILED!\n");
92     } else {
93         printf("TEST PASSED!\n");
94     }
95 
96     return failed;
97 }
98