You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.4 KiB
98 lines
2.4 KiB
4 months ago
|
|
||
|
#include "RenderScript.h"
|
||
|
|
||
|
#include "ScriptC_mono.h"
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
const uint32_t DIMX = 128;
|
||
|
const uint32_t DIMY = 128;
|
||
|
|
||
|
int test_compute()
|
||
|
{
|
||
|
bool failed = false;
|
||
|
|
||
|
sp<RS> rs = new RS();
|
||
|
printf("New RS %p\n", rs.get());
|
||
|
|
||
|
// only legitimate because this is a standalone executable
|
||
|
bool r = rs->init("/system/bin");
|
||
|
printf("Init returned %i\n", r);
|
||
|
|
||
|
sp<const Element> e = Element::U32(rs);
|
||
|
printf("Element %p\n", e.get());
|
||
|
|
||
|
Type::Builder tb(rs, e);
|
||
|
tb.setX(DIMX);
|
||
|
tb.setY(DIMY);
|
||
|
sp<const Type> t = tb.create();
|
||
|
printf("Type %p\n", t.get());
|
||
|
|
||
|
|
||
|
sp<Allocation> a1 = Allocation::createSized(rs, e, 1000);
|
||
|
printf("Allocation %p\n", a1.get());
|
||
|
|
||
|
sp<Allocation> ain = Allocation::createTyped(rs, t, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_SHARED);
|
||
|
sp<Allocation> aout = Allocation::createTyped(rs, t, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_SHARED);
|
||
|
printf("Allocation %p %p\n", ain.get(), aout.get());
|
||
|
|
||
|
size_t inputStride, outputStride;
|
||
|
|
||
|
uint32_t *input = (uint32_t*)ain->getPointer(&inputStride);
|
||
|
uint32_t *output = (uint32_t*)aout->getPointer(&outputStride);
|
||
|
|
||
|
printf("Input pointer: %p\n", input);
|
||
|
printf("Input stride: %zu\n", inputStride);
|
||
|
printf("Output pointer: %p\n", output);
|
||
|
printf("Output stride: %zu\n", outputStride);
|
||
|
|
||
|
inputStride /= sizeof(uint32_t);
|
||
|
outputStride /= sizeof(uint32_t);
|
||
|
|
||
|
for (size_t i = 0; i < DIMY; i++) {
|
||
|
for (size_t j = 0; j < DIMX; j++) {
|
||
|
input[i * inputStride + j] = rand();
|
||
|
output[i * inputStride + j] = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ain->syncAll(RS_ALLOCATION_USAGE_SHARED);
|
||
|
aout->syncAll(RS_ALLOCATION_USAGE_SHARED);
|
||
|
|
||
|
printf("Launching script\n");
|
||
|
|
||
|
sp<ScriptC_mono> sc = new ScriptC_mono(rs);
|
||
|
sc->forEach_copyAndNot(ain, aout);
|
||
|
rs->finish();
|
||
|
|
||
|
printf("Script completed\n");
|
||
|
|
||
|
ain->syncAll(RS_ALLOCATION_USAGE_SCRIPT);
|
||
|
aout->syncAll(RS_ALLOCATION_USAGE_SCRIPT);
|
||
|
|
||
|
for (size_t i = 0; i < DIMY; i++) {
|
||
|
for (size_t j = 0; j < DIMX; j++) {
|
||
|
if (input[i * inputStride + j] != ~(output[i * inputStride + j])) {
|
||
|
printf("Mismatch at location %zu, %zu\n", j, i);
|
||
|
failed = true;
|
||
|
return failed;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
return failed;
|
||
|
}
|
||
|
|
||
|
int main() {
|
||
|
bool failed = test_compute();
|
||
|
|
||
|
if (failed) {
|
||
|
printf("TEST FAILED!\n");
|
||
|
} else {
|
||
|
printf("TEST PASSED!\n");
|
||
|
}
|
||
|
|
||
|
return failed;
|
||
|
}
|