1358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 2358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray#include "RenderScript.h" 3358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 4358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray#include "ScriptC_multiply.h" 5358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 6358747a3118301c5faeee73c98dd5f839bbfb54aTim Murrayint main(int argc, char** argv) 7358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray{ 8358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 9358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray uint32_t numElems = 1024; 10358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray uint32_t stride = 1025; 11358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 12358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray if (argc >= 2) { 13358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray int tempStride = atoi(argv[1]); 14358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray if (tempStride < 1024) { 15358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray printf("stride must be greater than or equal to 1024\n"); 16358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray return 1; 17358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray } 18358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray stride = (uint32_t) tempStride; 19358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray } 20358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 21358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray sp<RS> rs = new RS(); 22358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 23863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet if (!rs->init("/system/bin")) { 24863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet printf("Could not initialize RenderScript\n"); 25863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet return 1; 26863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet } 27358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 28358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray sp<const Element> e = Element::U32(rs); 29358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 30358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray Type::Builder tb(rs, e); 31358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray tb.setX(numElems); 32358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray tb.setY(numElems); 33358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray sp<const Type> t = tb.create(); 34358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 35358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray sp<Allocation> ain = Allocation::createTyped(rs, t); 36358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray sp<Allocation> aout = Allocation::createTyped(rs, t); 37358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 3841efe87eb48ed945df2f26f4dff0eb5e00b8eebeStephen Hines sp<ScriptC_multiply> sc = new ScriptC_multiply(rs); 39358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 40358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray uint32_t* buf = (uint32_t*) malloc(stride * numElems * sizeof(uint32_t)); 41358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray if (!buf) { 42358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray printf("malloc failed\n"); 43358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray return 1; 44358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray } 45358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 46358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray for (uint32_t i = 0; i < numElems; i++) { 47358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray for (uint32_t ct=0; ct < numElems; ct++) { 48358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray *(buf+(stride*i)+ct) = (uint32_t)ct + (i * numElems); 49358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray } 50358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray } 51358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 52358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray ain->copy2DStridedFrom(buf, stride * sizeof(uint32_t)); 53358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 54358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray sc->forEach_multiply(ain, aout); 55358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 56358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray aout->copy2DStridedTo(buf, stride * sizeof(uint32_t)); 57358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 58358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray for (uint32_t i = 0; i < numElems; i++) { 59358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray for (uint32_t ct=0; ct < numElems; ct++) { 60358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray if (*(buf+(stride*i)+ct) != (uint32_t)(ct + (i * numElems)) * 2) { 61358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray printf("Mismatch at location %d, %d: %u\n", i, ct, *(buf+(stride*i)+ct)); 62358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray return 1; 63358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray } 64358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray } 65358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray } 66358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 67358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray printf("Test successful with %u stride!\n", stride); 68358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 69358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray sc.clear(); 70358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray t.clear(); 71358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray e.clear(); 72358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray ain.clear(); 73358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray aout.clear(); 74358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray} 75