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 using namespace android::RSC;
     31 
     32 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSElementTest_testCreatePixel(JNIEnv * env,
     33                                                                                            jclass obj,
     34                                                                                            jstring pathObj)
     35 {
     36     const char * path = env->GetStringUTFChars(pathObj, NULL);
     37     sp<RS> mRS = new RS();
     38     mRS->init(path);
     39     env->ReleaseStringUTFChars(pathObj, path);
     40 
     41     bool passed = true;
     42     passed &= (Element::createPixel(mRS,
     43                                     RS_TYPE_UNSIGNED_8,
     44                                     RS_KIND_PIXEL_A) != nullptr);
     45     passed &= (Element::createPixel(mRS,
     46                                     RS_TYPE_UNSIGNED_5_6_5,
     47                                     RS_KIND_PIXEL_RGB) != nullptr);
     48     passed &= (Element::createPixel(mRS,
     49                                     RS_TYPE_UNSIGNED_8,
     50                                     RS_KIND_PIXEL_RGB) != nullptr);
     51     passed &= (Element::createPixel(mRS,
     52                                     RS_TYPE_UNSIGNED_5_5_5_1,
     53                                     RS_KIND_PIXEL_RGBA) != nullptr);
     54     passed &= (Element::createPixel(mRS,
     55                                     RS_TYPE_UNSIGNED_4_4_4_4,
     56                                     RS_KIND_PIXEL_RGBA) != nullptr);
     57     passed &= (Element::createPixel(mRS,
     58                                     RS_TYPE_UNSIGNED_8,
     59                                     RS_KIND_PIXEL_RGBA) != nullptr);
     60 
     61     return passed;
     62 }
     63 
     64 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSElementTest_testCreateVector(JNIEnv * env,
     65                                                                                             jclass obj,
     66                                                                                             jstring pathObj)
     67 {
     68     const char * path = env->GetStringUTFChars(pathObj, NULL);
     69     sp<RS> mRS = new RS();
     70     mRS->init(path);
     71     env->ReleaseStringUTFChars(pathObj, path);
     72 
     73     bool passed = true;
     74     for (int len = 2; len <= 4; len ++) {
     75         passed &= (Element::createVector(mRS, RS_TYPE_FLOAT_32, len) != nullptr);
     76         passed &= (Element::createVector(mRS, RS_TYPE_FLOAT_64, len) != nullptr);
     77         passed &= (Element::createVector(mRS, RS_TYPE_SIGNED_8, len) != nullptr);
     78         passed &= (Element::createVector(mRS, RS_TYPE_SIGNED_16, len) != nullptr);
     79         passed &= (Element::createVector(mRS, RS_TYPE_SIGNED_32, len) != nullptr);
     80         passed &= (Element::createVector(mRS, RS_TYPE_SIGNED_64, len) != nullptr);
     81         passed &= (Element::createVector(mRS, RS_TYPE_UNSIGNED_8, len) != nullptr);
     82         passed &= (Element::createVector(mRS, RS_TYPE_UNSIGNED_16, len) != nullptr);
     83         passed &= (Element::createVector(mRS, RS_TYPE_UNSIGNED_32, len) != nullptr);
     84         passed &= (Element::createVector(mRS, RS_TYPE_UNSIGNED_64, len) != nullptr);
     85     }
     86 
     87     return passed;
     88 }
     89 
     90 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSElementTest_testPrebuiltElements(JNIEnv * env,
     91                                                                                                 jclass obj,
     92                                                                                                 jstring pathObj)
     93 {
     94     const char * path = env->GetStringUTFChars(pathObj, NULL);
     95     sp<RS> mRS = new RS();
     96     mRS->init(path);
     97     env->ReleaseStringUTFChars(pathObj, path);
     98 
     99     bool passed = true;
    100     passed &= (Element::A_8(mRS) != nullptr);
    101     passed &= (Element::RGBA_4444(mRS) != nullptr);
    102     passed &= (Element::RGBA_5551(mRS) != nullptr);
    103     passed &= (Element::RGB_565(mRS) != nullptr);
    104     passed &= (Element::RGB_888(mRS) != nullptr);
    105     passed &= (Element::RGBA_8888(mRS) != nullptr);
    106     passed &= (Element::F32(mRS) != nullptr);
    107     passed &= (Element::F32_2(mRS) != nullptr);
    108     passed &= (Element::F32_3(mRS) != nullptr);
    109     passed &= (Element::F32_4(mRS) != nullptr);
    110     passed &= (Element::F64(mRS) != nullptr);
    111     passed &= (Element::F64_2(mRS) != nullptr);
    112     passed &= (Element::F64_3(mRS) != nullptr);
    113     passed &= (Element::F64_4(mRS) != nullptr);
    114     passed &= (Element::I8(mRS) != nullptr);
    115     passed &= (Element::I8_2(mRS) != nullptr);
    116     passed &= (Element::I8_3(mRS) != nullptr);
    117     passed &= (Element::I8_4(mRS) != nullptr);
    118     passed &= (Element::I16(mRS) != nullptr);
    119     passed &= (Element::I16_2(mRS) != nullptr);
    120     passed &= (Element::I16_3(mRS) != nullptr);
    121     passed &= (Element::I16_4(mRS) != nullptr);
    122     passed &= (Element::I32(mRS) != nullptr);
    123     passed &= (Element::I32_2(mRS) != nullptr);
    124     passed &= (Element::I32_3(mRS) != nullptr);
    125     passed &= (Element::I32_4(mRS) != nullptr);
    126     passed &= (Element::I64(mRS) != nullptr);
    127     passed &= (Element::I64_2(mRS) != nullptr);
    128     passed &= (Element::I64_3(mRS) != nullptr);
    129     passed &= (Element::I64_4(mRS) != nullptr);
    130     passed &= (Element::U8(mRS) != nullptr);
    131     passed &= (Element::U8_2(mRS) != nullptr);
    132     passed &= (Element::U8_3(mRS) != nullptr);
    133     passed &= (Element::U8_4(mRS) != nullptr);
    134     passed &= (Element::U16(mRS) != nullptr);
    135     passed &= (Element::U16_2(mRS) != nullptr);
    136     passed &= (Element::U16_3(mRS) != nullptr);
    137     passed &= (Element::U16_4(mRS) != nullptr);
    138     passed &= (Element::U32(mRS) != nullptr);
    139     passed &= (Element::U32_2(mRS) != nullptr);
    140     passed &= (Element::U32_3(mRS) != nullptr);
    141     passed &= (Element::U32_4(mRS) != nullptr);
    142     passed &= (Element::U64(mRS) != nullptr);
    143     passed &= (Element::U64_2(mRS) != nullptr);
    144     passed &= (Element::U64_3(mRS) != nullptr);
    145     passed &= (Element::U64_4(mRS) != nullptr);
    146     passed &= (Element::MATRIX_2X2(mRS) != nullptr);
    147     passed &= (Element::MATRIX_3X3(mRS) != nullptr);
    148     passed &= (Element::MATRIX_4X4(mRS) != nullptr);
    149     passed &= (Element::ALLOCATION(mRS) != nullptr);
    150     passed &= (Element::SAMPLER(mRS) != nullptr);
    151     passed &= (Element::SCRIPT(mRS) != nullptr);
    152     passed &= (Element::TYPE(mRS) != nullptr);
    153     passed &= (Element::BOOLEAN(mRS) != nullptr);
    154     passed &= (Element::ELEMENT(mRS) != nullptr);
    155 
    156     return passed;
    157 }
    158 
    159 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSElementTest_testIsCompatible(JNIEnv * env,
    160                                                                                             jclass obj,
    161                                                                                             jstring pathObj)
    162 {
    163     const char * path = env->GetStringUTFChars(pathObj, NULL);
    164     sp<RS> mRS = new RS();
    165     mRS->init(path);
    166     env->ReleaseStringUTFChars(pathObj, path);
    167 
    168     bool passed = true;
    169     sp<const Element> ALLOCATION = Element::ALLOCATION(mRS);
    170     // A_8 is in U8
    171     sp<const Element> BOOLEAN = Element::BOOLEAN(mRS);
    172     sp<const Element> ELEMENT = Element::ELEMENT(mRS);
    173     sp<const Element> F32 = Element::F32(mRS);
    174     sp<const Element> F32_2 = Element::F32_2(mRS);
    175     sp<const Element> F32_3 = Element::F32_3(mRS);
    176     sp<const Element> F32_4 = Element::F32_4(mRS);
    177     sp<const Element> F64 = Element::F64(mRS);
    178     sp<const Element> I16 = Element::I16(mRS);
    179     sp<const Element> I32 = Element::I32(mRS);
    180     sp<const Element> I64 = Element::I64(mRS);
    181     sp<const Element> I8 = Element::I8(mRS);
    182     // MATRIX4X4 is in MATRIX_4X4
    183     sp<const Element> MATRIX_2X2 = Element::MATRIX_2X2(mRS);
    184     sp<const Element> MATRIX_3X3 = Element::MATRIX_3X3(mRS);
    185     sp<const Element> MATRIX_4X4 = Element::MATRIX_4X4(mRS);
    186 
    187     sp<const Element> RGBA_4444 = Element::RGBA_4444(mRS);
    188     sp<const Element> RGBA_5551 = Element::RGBA_5551(mRS);
    189     // RGBA_8888 is in U8_4
    190     sp<const Element> RGB_565 = Element::RGB_565(mRS);
    191     // RGB_888 is in U8_3
    192     sp<const Element> SAMPLER = Element::SAMPLER(mRS);
    193     sp<const Element> SCRIPT = Element::SCRIPT(mRS);
    194     sp<const Element> TYPE = Element::TYPE(mRS);
    195     sp<const Element> U16 = Element::U16(mRS);
    196     sp<const Element> U32 = Element::U32(mRS);
    197     sp<const Element> U64 = Element::U64(mRS);
    198     sp<const Element> U8 = Element::A_8(mRS);
    199     sp<const Element> U8_3 = Element::RGB_888(mRS);
    200     sp<const Element> U8_4 = Element::U8_4(mRS);
    201 
    202     int numTypes = 27;
    203     sp<const Element> ElementArrs[] = { ALLOCATION, BOOLEAN, ELEMENT, F32, F32_2,
    204                                       F32_3, F32_4, F64, I16, I32, I64, I8,
    205                                       MATRIX_2X2, MATRIX_3X3, MATRIX_4X4, RGBA_4444,
    206                                       RGBA_5551, RGB_565, SAMPLER, SCRIPT, TYPE,
    207                                       U16, U32, U64, U8, U8_3, U8_4 };
    208 
    209     for (int i = 0; i < numTypes; i++) {
    210         for (int j = 0; j < numTypes; j++) {
    211             if (i == j) {
    212                 // Elements within a group are compatible
    213                 passed &= (ElementArrs[i]->isCompatible(ElementArrs[j]));
    214             } else {
    215                 // Elements from different groups are incompatible
    216                 passed &= !(ElementArrs[i]->isCompatible(ElementArrs[j]));
    217             }
    218         }
    219     }
    220     return passed;
    221 }
    222 
    223 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSElementTest_testElementBuilder(JNIEnv * env,
    224                                                                                               jclass obj,
    225                                                                                               jstring pathObj)
    226 {
    227     const char * path = env->GetStringUTFChars(pathObj, NULL);
    228     sp<RS> mRS = new RS();
    229     mRS->init(path);
    230     env->ReleaseStringUTFChars(pathObj, path);
    231 
    232     bool passed = true;
    233     for (int arraySize = 1; arraySize <= 3; arraySize++) {
    234         // Now test array size
    235         Element::Builder *eb = new Element::Builder(mRS);
    236         eb->add(Element::A_8(mRS), "A_8", arraySize);
    237         eb->add(Element::RGBA_4444(mRS), "RGBA_4444", arraySize);
    238         eb->add(Element::RGBA_5551(mRS), "RGBA_5551", arraySize);
    239         eb->add(Element::RGB_565(mRS), "RGB_565", arraySize);
    240         eb->add(Element::RGB_888(mRS), "RGB_888", arraySize);
    241         eb->add(Element::RGBA_8888(mRS), "RGBA_8888", arraySize);
    242         eb->add(Element::F32(mRS), "F32", arraySize);
    243         eb->add(Element::F32_2(mRS), "F32_2", arraySize);
    244         eb->add(Element::F32_3(mRS), "F32_3", arraySize);
    245         eb->add(Element::F32_4(mRS), "F32_4", arraySize);
    246         eb->add(Element::F64(mRS), "F64", arraySize);
    247         eb->add(Element::F64_2(mRS), "F64_2", arraySize);
    248         eb->add(Element::F64_3(mRS), "F64_3", arraySize);
    249         eb->add(Element::F64_4(mRS), "F64_4", arraySize);
    250         eb->add(Element::I8(mRS), "I8", arraySize);
    251         eb->add(Element::I8_2(mRS), "I8_2", arraySize);
    252         eb->add(Element::I8_3(mRS), "I8_3", arraySize);
    253         eb->add(Element::I8_4(mRS), "I8_4", arraySize);
    254         eb->add(Element::I16(mRS), "I16", arraySize);
    255         eb->add(Element::I16_2(mRS), "I16_2", arraySize);
    256         eb->add(Element::I16_3(mRS), "I16_3", arraySize);
    257         eb->add(Element::I16_4(mRS), "I16_4", arraySize);
    258         eb->add(Element::I32(mRS), "I32", arraySize);
    259         eb->add(Element::I32_2(mRS), "I32_2", arraySize);
    260         eb->add(Element::I32_3(mRS), "I32_3", arraySize);
    261         eb->add(Element::I32_4(mRS), "I32_4", arraySize);
    262         eb->add(Element::I64(mRS), "I64", arraySize);
    263         eb->add(Element::I64_2(mRS), "I64_2", arraySize);
    264         eb->add(Element::I64_3(mRS), "I64_3", arraySize);
    265         eb->add(Element::I64_4(mRS), "I64_4", arraySize);
    266         eb->add(Element::U8(mRS), "U8", arraySize);
    267         eb->add(Element::U8_2(mRS), "U8_2", arraySize);
    268         eb->add(Element::U8_3(mRS), "U8_3", arraySize);
    269         eb->add(Element::U8_4(mRS), "U8_4", arraySize);
    270         eb->add(Element::U16(mRS), "U16", arraySize);
    271         eb->add(Element::U16_2(mRS), "U16_2", arraySize);
    272         eb->add(Element::U16_3(mRS), "U16_3", arraySize);
    273         eb->add(Element::U16_4(mRS), "U16_4", arraySize);
    274         eb->add(Element::U32(mRS), "U32", arraySize);
    275         eb->add(Element::U32_2(mRS), "U32_2", arraySize);
    276         eb->add(Element::U32_3(mRS), "U32_3", arraySize);
    277         eb->add(Element::U32_4(mRS), "U32_4", arraySize);
    278         eb->add(Element::U64(mRS), "U64", arraySize);
    279         eb->add(Element::U64_2(mRS), "U64_2", arraySize);
    280         eb->add(Element::U64_3(mRS), "U64_3", arraySize);
    281         eb->add(Element::U64_4(mRS), "U64_4", arraySize);
    282         eb->add(Element::MATRIX_2X2(mRS), "MATRIX_2X2", arraySize);
    283         eb->add(Element::MATRIX_3X3(mRS), "MATRIX_3X3", arraySize);
    284         eb->add(Element::MATRIX_4X4(mRS), "MATRIX_4X4", arraySize);
    285         eb->add(Element::ALLOCATION(mRS), "ALLOCATION", arraySize);
    286         eb->add(Element::SAMPLER(mRS), "SAMPLER", arraySize);
    287         eb->add(Element::SCRIPT(mRS), "SCRIPT", arraySize);
    288         eb->add(Element::TYPE(mRS), "TYPE", arraySize);
    289         eb->add(Element::BOOLEAN(mRS), "BOOLEAN", arraySize);
    290         eb->add(Element::ELEMENT(mRS), "ELEMENT", arraySize);
    291         passed &= (eb->create() != nullptr);
    292     }
    293     return passed;
    294 }
    295 
    296