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