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_clear_object.h>
31
32 using namespace android::RSC;
33
34 #define ObjectNum 1
35
Java_android_cts_rscpp_RSObjectTest_testClearObjectElement(JNIEnv * env,jclass obj,jstring pathObj)36 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSObjectTest_testClearObjectElement(JNIEnv * env,
37 jclass obj,
38 jstring pathObj)
39 {
40 const char * path = env->GetStringUTFChars(pathObj, nullptr);
41 sp<RS> mRS = new RS();
42 mRS->init(path);
43 env->ReleaseStringUTFChars(pathObj, path);
44
45 bool passed = true;
46
47 sp<ScriptC_clear_object> ms_clear = new ScriptC_clear_object(mRS);
48
49 sp<const Element> element = Element::BOOLEAN(mRS);
50 sp<Allocation> mOut = Allocation::createSized(mRS, Element::I32(mRS), ObjectNum);
51 ms_clear->set_element(element);
52 ms_clear->forEach_clear_element(mOut);
53
54 int tmpArray[ObjectNum];
55 mOut->copy1DTo(tmpArray);
56
57 for(int i = 0; i < ObjectNum; i++) {
58 passed &= (tmpArray[i] == 1);
59 }
60
61 return passed;
62 }
63
Java_android_cts_rscpp_RSObjectTest_testClearObjectType(JNIEnv * env,jclass obj,jstring pathObj)64 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSObjectTest_testClearObjectType(JNIEnv * env,
65 jclass obj,
66 jstring pathObj)
67 {
68 const char * path = env->GetStringUTFChars(pathObj, nullptr);
69 sp<RS> mRS = new RS();
70 mRS->init(path);
71 env->ReleaseStringUTFChars(pathObj, path);
72
73 bool passed = true;
74
75 sp<ScriptC_clear_object> ms_clear = new ScriptC_clear_object(mRS);
76
77 sp<const Type> type= Type::create(mRS, Element::I8(mRS), 1, 0, 0);
78 sp<Allocation> mOut = Allocation::createSized(mRS, Element::I32(mRS), ObjectNum);
79 ms_clear->set_type(type);
80 ms_clear->forEach_clear_type(mOut);
81
82 int tmpArray[ObjectNum];
83 mOut->copy1DTo(tmpArray);
84
85 for(int i = 0; i < ObjectNum; i++) {
86 passed &= (tmpArray[i] == 1);
87 }
88
89 return passed;
90 }
91
Java_android_cts_rscpp_RSObjectTest_testClearObjectAllocation(JNIEnv * env,jclass obj,jstring pathObj)92 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSObjectTest_testClearObjectAllocation(JNIEnv * env,
93 jclass obj,
94 jstring pathObj)
95 {
96 const char * path = env->GetStringUTFChars(pathObj, nullptr);
97 sp<RS> mRS = new RS();
98 mRS->init(path);
99 env->ReleaseStringUTFChars(pathObj, path);
100
101 bool passed = true;
102
103 sp<ScriptC_clear_object> ms_clear = new ScriptC_clear_object(mRS);
104
105 sp<Allocation> mOut = Allocation::createSized(mRS, Element::I32(mRS), ObjectNum);
106 sp<Allocation> mIn = Allocation::createSized(mRS, Element::I32(mRS), ObjectNum);
107 sp<Allocation> allocation = Allocation::createTyped(mRS, mIn->getType());
108 ms_clear->set_allocation(allocation);
109 ms_clear->forEach_clear_allocation(mOut);
110
111 int tmpArray[ObjectNum];
112 mOut->copy1DTo(tmpArray);
113
114 for(int i = 0; i < ObjectNum; i++) {
115 passed &= (tmpArray[i] == 1);
116 }
117
118 return passed;
119 }
120
Java_android_cts_rscpp_RSObjectTest_testClearObjectSampler(JNIEnv * env,jclass obj,jstring pathObj)121 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSObjectTest_testClearObjectSampler(JNIEnv * env,
122 jclass obj,
123 jstring pathObj)
124 {
125 const char * path = env->GetStringUTFChars(pathObj, nullptr);
126 sp<RS> mRS = new RS();
127 mRS->init(path);
128 env->ReleaseStringUTFChars(pathObj, path);
129
130 bool passed = true;
131
132 sp<ScriptC_clear_object> ms_clear = new ScriptC_clear_object(mRS);
133
134 sp<Sampler> sampler = Sampler::create(mRS, RS_SAMPLER_NEAREST, RS_SAMPLER_NEAREST,
135 RS_SAMPLER_WRAP, RS_SAMPLER_WRAP, 1.0f);
136 sp<Allocation> mOut = Allocation::createSized(mRS, Element::I32(mRS), ObjectNum);
137 ms_clear->set_sampler(sampler);
138 ms_clear->forEach_clear_sampler(mOut);
139
140 int tmpArray[ObjectNum];
141 mOut->copy1DTo(tmpArray);
142
143 for(int i = 0; i < ObjectNum; i++) {
144 passed &= (tmpArray[i] == 1);
145 }
146
147
148 return passed;
149 }
150
Java_android_cts_rscpp_RSObjectTest_testClearObjectScript(JNIEnv * env,jclass obj,jstring pathObj)151 extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_rscpp_RSObjectTest_testClearObjectScript(JNIEnv * env,
152 jclass obj,
153 jstring pathObj)
154 {
155 const char * path = env->GetStringUTFChars(pathObj, nullptr);
156 sp<RS> mRS = new RS();
157 mRS->init(path);
158 env->ReleaseStringUTFChars(pathObj, path);
159
160 bool passed = true;
161
162 sp<ScriptC_clear_object> ms_clear = new ScriptC_clear_object(mRS);
163
164 sp<Script> script = new ScriptC_clear_object(mRS);
165 sp<Allocation> mOut = Allocation::createSized(mRS, Element::I32(mRS), ObjectNum);
166 ms_clear->set_script(script);
167 ms_clear->forEach_clear_script(mOut);
168
169 int tmpArray[ObjectNum];
170 mOut->copy1DTo(tmpArray);
171
172 for(int i = 0; i < ObjectNum; i++) {
173 passed &= (tmpArray[i] == 1);
174 }
175
176 return passed;
177 }
178