Home | History | Annotate | Download | only in librscpptest
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include <jni.h>
     18 #include <android/log.h>
     19 
     20 #include <stdio.h>
     21 #include <stdlib.h>
     22 #include <math.h>
     23 
     24 #include <RenderScript.h>
     25 
     26 #define  LOG_TAG    "rscpptest"
     27 #define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
     28 #define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
     29 
     30 #include "ScriptC_foreach.h"
     31 #include "ScriptC_fe_all.h"
     32 #include "ScriptC_noroot.h"
     33 
     34 using namespace android::RSC;
     35 
     36 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSForEachTest_testForEach(JNIEnv * env,
     37                                                                                        jclass obj,
     38                                                                                        jstring pathObj)
     39 {
     40     const char * path = env->GetStringUTFChars(pathObj, NULL);
     41     sp<RS> mRS = new RS();
     42     mRS->init(path);
     43     env->ReleaseStringUTFChars(pathObj, path);
     44 
     45     bool passed = true;
     46     int x = 7;
     47 
     48     sp<ScriptC_fe_all> fe_all = new ScriptC_fe_all(mRS);
     49     sp<const Type> t = Type::create(mRS, Element::I8(mRS), x, 0, 0);
     50 
     51     // I8
     52     sp<Allocation> in = Allocation::createTyped(mRS, t);
     53     t = Type::create(mRS, Element::U8(mRS), x, 0, 0);
     54     sp<Allocation> out = Allocation::createTyped(mRS, t);
     55     fe_all->forEach_test_i8(in, out);
     56     mRS->finish();
     57 
     58     // I8_2
     59     t = Type::create(mRS, Element::I8_2(mRS), x, 0, 0);
     60     in = Allocation::createTyped(mRS, t);
     61     t = Type::create(mRS, Element::U8_2(mRS), x, 0, 0);
     62     out = Allocation::createTyped(mRS, t);
     63     fe_all->forEach_test_i8_2(in, out);
     64     mRS->finish();
     65 
     66     // I8_3
     67     t = Type::create(mRS, Element::I8_3(mRS), x, 0, 0);
     68     in = Allocation::createTyped(mRS, t);
     69     t = Type::create(mRS, Element::U8_3(mRS), x, 0, 0);
     70     out = Allocation::createTyped(mRS, t);
     71     fe_all->forEach_test_i8_3(in, out);
     72     mRS->finish();
     73 
     74     // I8_4
     75     t = Type::create(mRS, Element::I8_4(mRS), x, 0, 0);
     76     in = Allocation::createTyped(mRS, t);
     77     t = Type::create(mRS, Element::U8_4(mRS), x, 0, 0);
     78     out = Allocation::createTyped(mRS, t);
     79     fe_all->forEach_test_i8_4(in, out);
     80     mRS->finish();
     81 
     82     // I16
     83     t = Type::create(mRS, Element::I16(mRS), x, 0, 0);
     84     in = Allocation::createTyped(mRS, t);
     85     t = Type::create(mRS, Element::U16(mRS), x, 0, 0);
     86     out = Allocation::createTyped(mRS, t);
     87     fe_all->forEach_test_i16(in, out);
     88     mRS->finish();
     89 
     90     // I16_2
     91     t = Type::create(mRS, Element::I16_2(mRS), x, 0, 0);
     92     in = Allocation::createTyped(mRS, t);
     93     t = Type::create(mRS, Element::U16_2(mRS), x, 0, 0);
     94     out = Allocation::createTyped(mRS, t);
     95     fe_all->forEach_test_i16_2(in, out);
     96     mRS->finish();
     97 
     98     // I16_3
     99     t = Type::create(mRS, Element::I16_3(mRS), x, 0, 0);
    100     in = Allocation::createTyped(mRS, t);
    101     t = Type::create(mRS, Element::U16_3(mRS), x, 0, 0);
    102     out = Allocation::createTyped(mRS, t);
    103     fe_all->forEach_test_i16_3(in, out);
    104     mRS->finish();
    105 
    106     // I16_4
    107     t = Type::create(mRS, Element::I16_4(mRS), x, 0, 0);
    108     in = Allocation::createTyped(mRS, t);
    109     t = Type::create(mRS, Element::U16_4(mRS), x, 0, 0);
    110     out = Allocation::createTyped(mRS, t);
    111     fe_all->forEach_test_i16_4(in, out);
    112     mRS->finish();
    113 
    114     // I32
    115     t = Type::create(mRS, Element::I32(mRS), x, 0, 0);
    116     in = Allocation::createTyped(mRS, t);
    117     t = Type::create(mRS, Element::U32(mRS), x, 0, 0);
    118     out = Allocation::createTyped(mRS, t);
    119     fe_all->forEach_test_i32(in, out);
    120     mRS->finish();
    121 
    122     // I32_2
    123     t = Type::create(mRS, Element::I32_2(mRS), x, 0, 0);
    124     in = Allocation::createTyped(mRS, t);
    125     t = Type::create(mRS, Element::U32_2(mRS), x, 0, 0);
    126     out = Allocation::createTyped(mRS, t);
    127     fe_all->forEach_test_i32_2(in, out);
    128     mRS->finish();
    129 
    130     // I32_3
    131     t = Type::create(mRS, Element::I32_3(mRS), x, 0, 0);
    132     in = Allocation::createTyped(mRS, t);
    133     t = Type::create(mRS, Element::U32_3(mRS), x, 0, 0);
    134     out = Allocation::createTyped(mRS, t);
    135     fe_all->forEach_test_i32_3(in, out);
    136     mRS->finish();
    137 
    138     // I32_4
    139     t = Type::create(mRS, Element::I32_4(mRS), x, 0, 0);
    140     in = Allocation::createTyped(mRS, t);
    141     t = Type::create(mRS, Element::U32_4(mRS), x, 0, 0);
    142     out = Allocation::createTyped(mRS, t);
    143     fe_all->forEach_test_i32_4(in, out);
    144     mRS->finish();
    145 
    146     // I64
    147     t = Type::create(mRS, Element::I64(mRS), x, 0, 0);
    148     in = Allocation::createTyped(mRS, t);
    149     t = Type::create(mRS, Element::U64(mRS), x, 0, 0);
    150     out = Allocation::createTyped(mRS, t);
    151     fe_all->forEach_test_i64(in, out);
    152     mRS->finish();
    153 
    154     // I64_2
    155     t = Type::create(mRS, Element::I64_2(mRS), x, 0, 0);
    156     in = Allocation::createTyped(mRS, t);
    157     t = Type::create(mRS, Element::U64_2(mRS), x, 0, 0);
    158     out = Allocation::createTyped(mRS, t);
    159     fe_all->forEach_test_i64_2(in, out);
    160     mRS->finish();
    161 
    162     // I64_3
    163     t = Type::create(mRS, Element::I64_3(mRS), x, 0, 0);
    164     in = Allocation::createTyped(mRS, t);
    165     t = Type::create(mRS, Element::U64_3(mRS), x, 0, 0);
    166     out = Allocation::createTyped(mRS, t);
    167     fe_all->forEach_test_i64_3(in, out);
    168     mRS->finish();
    169 
    170     // I64_4
    171     t = Type::create(mRS, Element::I64_4(mRS), x, 0, 0);
    172     in = Allocation::createTyped(mRS, t);
    173     t = Type::create(mRS, Element::U64_4(mRS), x, 0, 0);
    174     out = Allocation::createTyped(mRS, t);
    175     fe_all->forEach_test_i64_4(in, out);
    176     mRS->finish();
    177 
    178     // F32
    179     t = Type::create(mRS, Element::F32(mRS), x, 0, 0);
    180     in = Allocation::createTyped(mRS, t);
    181     out = Allocation::createTyped(mRS, t);
    182     fe_all->forEach_test_f32(in, out);
    183     mRS->finish();
    184 
    185     // F32_2
    186     t = Type::create(mRS, Element::F32_2(mRS), x, 0, 0);
    187     in = Allocation::createTyped(mRS, t);
    188     t = Type::create(mRS, Element::F32_2(mRS), x, 0, 0);
    189     out = Allocation::createTyped(mRS, t);
    190     fe_all->forEach_test_f32_2(in, out);
    191     mRS->finish();
    192 
    193     // F32_3
    194     t = Type::create(mRS, Element::F32_3(mRS), x, 0, 0);
    195     in = Allocation::createTyped(mRS, t);
    196     out = Allocation::createTyped(mRS, t);
    197     fe_all->forEach_test_f32_3(in, out);
    198     mRS->finish();
    199 
    200     // F32_4
    201     t = Type::create(mRS, Element::F32_4(mRS), x, 0, 0);
    202     in = Allocation::createTyped(mRS, t);
    203     out = Allocation::createTyped(mRS, t);
    204     fe_all->forEach_test_f32_4(in, out);
    205     mRS->finish();
    206 
    207     // F64
    208     t = Type::create(mRS, Element::F64(mRS), x, 0, 0);
    209     in = Allocation::createTyped(mRS, t);
    210     out = Allocation::createTyped(mRS, t);
    211     fe_all->forEach_test_f64(in, out);
    212     mRS->finish();
    213 
    214     // F64_2
    215     t = Type::create(mRS, Element::F64_2(mRS), x, 0, 0);
    216     in = Allocation::createTyped(mRS, t);
    217     out = Allocation::createTyped(mRS, t);
    218     fe_all->forEach_test_f64_2(in, out);
    219     mRS->finish();
    220 
    221     // F64_3
    222     t = Type::create(mRS, Element::F64_3(mRS), x, 0, 0);
    223     in = Allocation::createTyped(mRS, t);
    224     out = Allocation::createTyped(mRS, t);
    225     fe_all->forEach_test_f64_3(in, out);
    226     mRS->finish();
    227 
    228     // F64_4
    229     t = Type::create(mRS, Element::F64_4(mRS), x, 0, 0);
    230     in = Allocation::createTyped(mRS, t);
    231     out = Allocation::createTyped(mRS, t);
    232     fe_all->forEach_test_f64_4(in, out);
    233     mRS->finish();
    234 
    235     // BOOLEAN
    236     t = Type::create(mRS, Element::BOOLEAN(mRS), x, 0, 0);
    237     in = Allocation::createTyped(mRS, t);
    238     out = Allocation::createTyped(mRS, t);
    239     fe_all->forEach_test_bool(in, out);
    240     mRS->finish();
    241 
    242     // A_8
    243     t = Type::create(mRS, Element::I8(mRS), x, 0, 0);
    244     in = Allocation::createTyped(mRS, t);
    245     t = Type::create(mRS, Element::A_8(mRS), x, 0, 0);
    246     out = Allocation::createTyped(mRS, t);
    247     fe_all->forEach_test_i8(in, out);
    248     mRS->finish();
    249 
    250     // RGBA_8888
    251     t = Type::create(mRS, Element::I8_4(mRS), x, 0, 0);
    252     in = Allocation::createTyped(mRS, t);
    253     t = Type::create(mRS, Element::RGBA_8888(mRS), x, 0, 0);
    254     out = Allocation::createTyped(mRS, t);
    255     fe_all->forEach_test_i8_4(in, out);
    256     mRS->finish();
    257 
    258     // RGB_888
    259     t = Type::create(mRS, Element::I8_3(mRS), x, 0, 0);
    260     in = Allocation::createTyped(mRS, t);
    261     t = Type::create(mRS, Element::RGB_888(mRS), x, 0, 0);
    262     out = Allocation::createTyped(mRS, t);
    263     fe_all->forEach_test_i8_3(in, out);
    264     mRS->finish();
    265 
    266     return passed;
    267 }
    268 
    269 #define RS_MSG_TEST_PASSED 100
    270 #define RS_MSG_TEST_FAILED 101
    271 
    272 static int result = 0;
    273 static void rsMsgHandler(uint32_t msgNum, const void *msgData, size_t msgLen) {
    274     if (result == 0) {
    275         result = msgNum;
    276     }
    277 }
    278 
    279 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSForEachTest_testMultipleForEach(JNIEnv * env,
    280                                                                                                jclass obj,
    281                                                                                                jstring pathObj)
    282 {
    283     const char * path = env->GetStringUTFChars(pathObj, NULL);
    284     sp<RS> mRS = new RS();
    285     mRS->init(path);
    286     env->ReleaseStringUTFChars(pathObj, path);
    287     MessageHandlerFunc_t mHandler = rsMsgHandler;
    288     mRS->setMessageHandler(mHandler);
    289 
    290     bool passed = true;
    291     sp<ScriptC_foreach> s = new ScriptC_foreach(mRS);
    292 
    293     int X = 5;
    294     int Y = 7;
    295     s->set_dimX(X);
    296     s->set_dimY(Y);
    297     sp<const Type> t = Type::create(mRS, Element::I32(mRS), X, Y, 0);
    298     sp<Allocation> A = Allocation::createTyped(mRS, t);
    299     s->set_aRaw(A);
    300     s->forEach_root(A);
    301     s->invoke_verify_root();
    302     s->forEach_foo(A, A);
    303     s->invoke_verify_foo();
    304     s->invoke_foreach_test();
    305     mRS->finish();
    306     if (result == RS_MSG_TEST_FAILED) {
    307         passed = false;
    308     }
    309     result = 0;
    310     return passed;
    311 }
    312 
    313 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSForEachTest_testNoRoot(JNIEnv * env,
    314                                                                                       jclass obj,
    315                                                                                       jstring pathObj)
    316 {
    317     const char * path = env->GetStringUTFChars(pathObj, NULL);
    318     sp<RS> mRS = new RS();
    319     mRS->init(path);
    320     env->ReleaseStringUTFChars(pathObj, path);
    321     MessageHandlerFunc_t mHandler = rsMsgHandler;
    322     mRS->setMessageHandler(mHandler);
    323 
    324     bool passed = true;
    325     sp<ScriptC_noroot> s = new ScriptC_noroot(mRS);
    326 
    327     int X = 5;
    328     int Y = 7;
    329     s->set_dimX(X);
    330     s->set_dimY(Y);
    331     sp<const Type> t = Type::create(mRS, Element::I32(mRS), X, Y, 0);
    332     sp<Allocation> A = Allocation::createTyped(mRS, t);
    333     s->set_aRaw(A);
    334     s->forEach_foo(A, A);
    335     s->invoke_verify_foo();
    336     s->invoke_noroot_test();
    337     mRS->finish();
    338     if (result == RS_MSG_TEST_FAILED) {
    339         passed = false;
    340     }
    341     result = 0;
    342     return passed;
    343 }
    344 
    345