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