blob: 7387af0d5c0f587803a4de3888ca7db79a72d17a [file] [log] [blame]
Jason Samsd19f10d2009-05-22 14:03:28 -07001/*
Stephen Hines4cbe25a2012-01-18 18:46:27 -08002 * Copyright (C) 2011-2012 The Android Open Source Project
Jason Samsd19f10d2009-05-22 14:03:28 -07003 *
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
Jason Samsf29ca502009-06-23 12:22:47 -070017#define LOG_TAG "libRS_jni"
18
Jason Samsd19f10d2009-05-22 14:03:28 -070019#include <stdlib.h>
20#include <stdio.h>
21#include <fcntl.h>
22#include <unistd.h>
23#include <math.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070024#include <utils/misc.h>
Bernhard Rosenkränzer09993f72014-11-17 20:25:28 +010025#include <inttypes.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070026
Derek Sollenbergereece0dd2014-02-27 14:31:29 -050027#include <SkBitmap.h>
Jason Samsffe9f482009-06-01 17:45:53 -070028
Mathias Agopianb13b9bd2012-02-17 18:27:36 -080029#include <androidfw/Asset.h>
30#include <androidfw/AssetManager.h>
31#include <androidfw/ResourceTypes.h>
Jason Samsf29ca502009-06-23 12:22:47 -070032
Jason Samsd19f10d2009-05-22 14:03:28 -070033#include "jni.h"
34#include "JNIHelp.h"
35#include "android_runtime/AndroidRuntime.h"
Jim Milleree956052010-08-19 18:56:00 -070036#include "android_runtime/android_view_Surface.h"
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080037#include "android_runtime/android_util_AssetManager.h"
Jason Samsd19f10d2009-05-22 14:03:28 -070038
Jason Sams1d6983a2012-02-16 16:07:49 -080039#include <rs.h>
40#include <rsEnv.h>
Jason Samsfb9aa9f2012-03-28 15:30:07 -070041#include <gui/Surface.h>
Andy McFaddend47f7d82012-12-18 09:48:38 -080042#include <gui/GLConsumer.h>
Mathias Agopian52800612013-02-14 17:11:20 -080043#include <gui/Surface.h>
Jason Samsfaa32b32011-06-20 16:58:04 -070044#include <android_runtime/android_graphics_SurfaceTexture.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070045
Steve Block3762c312012-01-06 19:20:56 +000046//#define LOG_API ALOGE
Andreas Gampe67333922014-11-10 20:35:59 -080047static constexpr bool kLogApi = false;
Jason Samsd19f10d2009-05-22 14:03:28 -070048
49using namespace android;
50
Andreas Gampe67333922014-11-10 20:35:59 -080051template <typename... T>
52void UNUSED(T... t) {}
53
Stephen Hines414fa2c2014-04-17 01:02:42 -070054#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \
Jason Samse729a942013-11-06 11:22:02 -080055 jint len = 0; \
Chris Wailes488230c32014-08-14 11:22:40 -070056 void *ptr = nullptr; \
Jason Sams21659ac2013-11-06 15:08:07 -080057 size_t typeBytes = 0; \
Stephen Hines414fa2c2014-04-17 01:02:42 -070058 jint relFlag = 0; \
59 if (readonly) { \
60 /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \
61 relFlag = JNI_ABORT; \
62 } \
Jason Samse729a942013-11-06 11:22:02 -080063 switch(dataType) { \
64 case RS_TYPE_FLOAT_32: \
65 len = _env->GetArrayLength((jfloatArray)data); \
66 ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \
Jason Sams21659ac2013-11-06 15:08:07 -080067 typeBytes = 4; \
Jason Samse729a942013-11-06 11:22:02 -080068 fnc(__VA_ARGS__); \
Stephen Hines414fa2c2014-04-17 01:02:42 -070069 _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \
Jason Samse729a942013-11-06 11:22:02 -080070 return; \
71 case RS_TYPE_FLOAT_64: \
72 len = _env->GetArrayLength((jdoubleArray)data); \
73 ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \
Jason Sams21659ac2013-11-06 15:08:07 -080074 typeBytes = 8; \
Jason Samse729a942013-11-06 11:22:02 -080075 fnc(__VA_ARGS__); \
Stephen Hines414fa2c2014-04-17 01:02:42 -070076 _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \
Jason Samse729a942013-11-06 11:22:02 -080077 return; \
78 case RS_TYPE_SIGNED_8: \
79 case RS_TYPE_UNSIGNED_8: \
80 len = _env->GetArrayLength((jbyteArray)data); \
81 ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \
Jason Sams21659ac2013-11-06 15:08:07 -080082 typeBytes = 1; \
Jason Samse729a942013-11-06 11:22:02 -080083 fnc(__VA_ARGS__); \
Stephen Hines414fa2c2014-04-17 01:02:42 -070084 _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \
Jason Samse729a942013-11-06 11:22:02 -080085 return; \
86 case RS_TYPE_SIGNED_16: \
87 case RS_TYPE_UNSIGNED_16: \
88 len = _env->GetArrayLength((jshortArray)data); \
89 ptr = _env->GetShortArrayElements((jshortArray)data, flag); \
Jason Sams21659ac2013-11-06 15:08:07 -080090 typeBytes = 2; \
Jason Samse729a942013-11-06 11:22:02 -080091 fnc(__VA_ARGS__); \
Stephen Hines414fa2c2014-04-17 01:02:42 -070092 _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \
Jason Samse729a942013-11-06 11:22:02 -080093 return; \
94 case RS_TYPE_SIGNED_32: \
95 case RS_TYPE_UNSIGNED_32: \
96 len = _env->GetArrayLength((jintArray)data); \
97 ptr = _env->GetIntArrayElements((jintArray)data, flag); \
Jason Sams21659ac2013-11-06 15:08:07 -080098 typeBytes = 4; \
Jason Samse729a942013-11-06 11:22:02 -080099 fnc(__VA_ARGS__); \
Stephen Hines414fa2c2014-04-17 01:02:42 -0700100 _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \
Jason Samse729a942013-11-06 11:22:02 -0800101 return; \
102 case RS_TYPE_SIGNED_64: \
103 case RS_TYPE_UNSIGNED_64: \
104 len = _env->GetArrayLength((jlongArray)data); \
105 ptr = _env->GetLongArrayElements((jlongArray)data, flag); \
Jason Sams21659ac2013-11-06 15:08:07 -0800106 typeBytes = 8; \
Jason Samse729a942013-11-06 11:22:02 -0800107 fnc(__VA_ARGS__); \
Stephen Hines414fa2c2014-04-17 01:02:42 -0700108 _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \
Jason Samse729a942013-11-06 11:22:02 -0800109 return; \
110 default: \
111 break; \
112 } \
Andreas Gampe67333922014-11-10 20:35:59 -0800113 UNUSED(len, ptr, typeBytes, relFlag); \
Jason Samse729a942013-11-06 11:22:02 -0800114}
115
116
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800117class AutoJavaStringToUTF8 {
118public:
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800119 AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
Chris Wailes488230c32014-08-14 11:22:40 -0700120 fCStr = env->GetStringUTFChars(str, nullptr);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800121 fLength = env->GetStringUTFLength(str);
122 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800123 ~AutoJavaStringToUTF8() {
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800124 fEnv->ReleaseStringUTFChars(fJStr, fCStr);
125 }
126 const char* c_str() const { return fCStr; }
127 jsize length() const { return fLength; }
128
129private:
130 JNIEnv* fEnv;
131 jstring fJStr;
132 const char* fCStr;
133 jsize fLength;
134};
135
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800136class AutoJavaStringArrayToUTF8 {
137public:
138 AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
139 : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
Chris Wailes488230c32014-08-14 11:22:40 -0700140 mCStrings = nullptr;
141 mSizeArray = nullptr;
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800142 if (stringsLength > 0) {
143 mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
144 mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
145 for (jsize ct = 0; ct < stringsLength; ct ++) {
146 jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
Chris Wailes488230c32014-08-14 11:22:40 -0700147 mCStrings[ct] = mEnv->GetStringUTFChars(s, nullptr);
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800148 mSizeArray[ct] = mEnv->GetStringUTFLength(s);
149 }
150 }
151 }
152 ~AutoJavaStringArrayToUTF8() {
153 for (jsize ct=0; ct < mStringsLength; ct++) {
154 jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
155 mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
156 }
157 free(mCStrings);
158 free(mSizeArray);
159 }
160 const char **c_str() const { return mCStrings; }
161 size_t *c_str_len() const { return mSizeArray; }
162 jsize length() const { return mStringsLength; }
163
164private:
165 JNIEnv *mEnv;
166 jobjectArray mStrings;
167 const char **mCStrings;
168 size_t *mSizeArray;
169 jsize mStringsLength;
170};
171
Jason Samsd19f10d2009-05-22 14:03:28 -0700172// ---------------------------------------------------------------------------
173
Jason Samsffe9f482009-06-01 17:45:53 -0700174static jfieldID gContextId = 0;
175static jfieldID gNativeBitmapID = 0;
Jason Samsd19f10d2009-05-22 14:03:28 -0700176
177static void _nInit(JNIEnv *_env, jclass _this)
178{
Tim Murrayeff663f2013-11-15 13:08:30 -0800179 gContextId = _env->GetFieldID(_this, "mContext", "J");
Jason Samsffe9f482009-06-01 17:45:53 -0700180
181 jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000182 gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J");
Jason Samsd19f10d2009-05-22 14:03:28 -0700183}
184
Jason Samsd19f10d2009-05-22 14:03:28 -0700185// ---------------------------------------------------------------------------
186
Jason Sams3eaa338e2009-06-10 15:04:38 -0700187static void
Tim Murrayeff663f2013-11-15 13:08:30 -0800188nContextFinish(JNIEnv *_env, jobject _this, jlong con)
Jason Sams96ed4cf2010-06-15 12:15:57 -0700189{
Andreas Gampe67333922014-11-10 20:35:59 -0800190 if (kLogApi) {
191 ALOGD("nContextFinish, con(%p)", (RsContext)con);
192 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800193 rsContextFinish((RsContext)con);
Jason Sams96ed4cf2010-06-15 12:15:57 -0700194}
195
Yang Ni281c3252014-10-24 08:52:24 -0700196static jlong
197nClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID,
198 jlong returnValue, jlongArray fieldIDArray,
199 jlongArray valueArray, jintArray sizeArray,
200 jlongArray depClosureArray, jlongArray depFieldIDArray) {
201 jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
202 jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
203 RsScriptFieldID* fieldIDs =
204 (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
205 for (int i = 0; i< fieldIDs_length; i++) {
206 fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
207 }
208
209 jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
210 jsize values_length = _env->GetArrayLength(valueArray);
211 uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
212 for (int i = 0; i < values_length; i++) {
213 values[i] = (uintptr_t)jValues[i];
214 }
215
216 jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
217 jsize sizes_length = _env->GetArrayLength(sizeArray);
218
219 jlong* jDepClosures =
220 _env->GetLongArrayElements(depClosureArray, nullptr);
221 jsize depClosures_length = _env->GetArrayLength(depClosureArray);
222 RsClosure* depClosures =
223 (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length);
224 for (int i = 0; i < depClosures_length; i++) {
225 depClosures[i] = (RsClosure)jDepClosures[i];
226 }
227
228 jlong* jDepFieldIDs =
229 _env->GetLongArrayElements(depFieldIDArray, nullptr);
230 jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray);
231 RsScriptFieldID* depFieldIDs =
232 (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length);
233 for (int i = 0; i < depClosures_length; i++) {
234 depFieldIDs[i] = (RsClosure)jDepFieldIDs[i];
235 }
236
237 return (jlong)(uintptr_t)rsClosureCreate(
238 (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue,
239 fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
240 (size_t*)sizes, (size_t)sizes_length,
241 depClosures, (size_t)depClosures_length,
242 depFieldIDs, (size_t)depFieldIDs_length);
243}
244
Yang Nibe392ad2015-01-23 17:16:02 -0800245static jlong
246nInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID,
247 jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray,
248 jintArray sizeArray) {
249 jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr);
250 jsize jParamLength = _env->GetArrayLength(paramArray);
251
252 jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
253 jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
254 RsScriptFieldID* fieldIDs =
255 (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
256 for (int i = 0; i< fieldIDs_length; i++) {
257 fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
258 }
259
260 jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
261 jsize values_length = _env->GetArrayLength(valueArray);
262 uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
263 for (int i = 0; i < values_length; i++) {
264 values[i] = (uintptr_t)jValues[i];
265 }
266
267 jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
268 jsize sizes_length = _env->GetArrayLength(sizeArray);
269
270 return (jlong)(uintptr_t)rsInvokeClosureCreate(
271 (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength,
272 fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
273 (size_t*)sizes, (size_t)sizes_length);
274}
275
Yang Ni281c3252014-10-24 08:52:24 -0700276static void
277nClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
278 jint index, jlong value, jint size) {
279 rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index,
280 (uintptr_t)value, (size_t)size);
281}
282
283static void
284nClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
285 jlong fieldID, jlong value, jint size) {
286 rsClosureSetGlobal((RsContext)con, (RsClosure)closureID,
287 (RsScriptFieldID)fieldID, (uintptr_t)value, (size_t)size);
288}
289
290static long
291nScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con,
Yang Niebf63402015-01-16 11:06:26 -0800292 jstring cacheDir, jlongArray closureArray) {
293 AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
294
Yang Ni281c3252014-10-24 08:52:24 -0700295 jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr);
296 jsize numClosures = _env->GetArrayLength(closureArray);
297 RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
298 for (int i = 0; i < numClosures; i++) {
299 closures[i] = (RsClosure)jClosures[i];
300 }
301
Yang Niebf63402015-01-16 11:06:26 -0800302 return (jlong)(uintptr_t)rsScriptGroup2Create(
303 (RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length(),
304 closures, numClosures);
Yang Ni281c3252014-10-24 08:52:24 -0700305}
306
307static void
308nScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) {
309 rsScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID);
310}
311
Jason Sams96ed4cf2010-06-15 12:15:57 -0700312static void
Tim Murray460a0492013-11-19 12:45:54 -0800313nAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str)
Jason Sams3eaa338e2009-06-10 15:04:38 -0700314{
Andreas Gampe67333922014-11-10 20:35:59 -0800315 if (kLogApi) {
316 ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
317 }
Jason Sams3eaa338e2009-06-10 15:04:38 -0700318 jint len = _env->GetArrayLength(str);
319 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Tim Murrayeff663f2013-11-15 13:08:30 -0800320 rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -0700321 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
322}
323
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700324static jstring
Tim Murray460a0492013-11-19 12:45:54 -0800325nGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj)
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700326{
Andreas Gampe67333922014-11-10 20:35:59 -0800327 if (kLogApi) {
328 ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
329 }
Chris Wailes488230c32014-08-14 11:22:40 -0700330 const char *name = nullptr;
Tim Murrayeff663f2013-11-15 13:08:30 -0800331 rsaGetName((RsContext)con, (void *)obj, &name);
Chris Wailes488230c32014-08-14 11:22:40 -0700332 if(name == nullptr || strlen(name) == 0) {
333 return nullptr;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700334 }
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700335 return _env->NewStringUTF(name);
336}
337
Jason Sams7ce033d2009-08-18 14:14:24 -0700338static void
Tim Murray460a0492013-11-19 12:45:54 -0800339nObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
Jason Sams7ce033d2009-08-18 14:14:24 -0700340{
Andreas Gampe67333922014-11-10 20:35:59 -0800341 if (kLogApi) {
342 ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
343 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800344 rsObjDestroy((RsContext)con, (void *)obj);
Jason Sams7ce033d2009-08-18 14:14:24 -0700345}
346
Jason Sams3eaa338e2009-06-10 15:04:38 -0700347// ---------------------------------------------------------------------------
348
Tim Murrayeff663f2013-11-15 13:08:30 -0800349static jlong
Jason Samsd19f10d2009-05-22 14:03:28 -0700350nDeviceCreate(JNIEnv *_env, jobject _this)
351{
Andreas Gampe67333922014-11-10 20:35:59 -0800352 if (kLogApi) {
353 ALOGD("nDeviceCreate");
354 }
Tim Murray3aa89c12014-08-18 17:51:22 -0700355 return (jlong)(uintptr_t)rsDeviceCreate();
Jason Samsd19f10d2009-05-22 14:03:28 -0700356}
357
358static void
Tim Murray5eaf4682014-01-10 11:25:52 -0800359nDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
Jason Samsd19f10d2009-05-22 14:03:28 -0700360{
Andreas Gampe67333922014-11-10 20:35:59 -0800361 if (kLogApi) {
362 ALOGD("nDeviceDestroy");
363 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700364 return rsDeviceDestroy((RsDevice)dev);
365}
366
Jason Samsebfb4362009-09-23 13:57:02 -0700367static void
Tim Murray5eaf4682014-01-10 11:25:52 -0800368nDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
Jason Samsebfb4362009-09-23 13:57:02 -0700369{
Andreas Gampe67333922014-11-10 20:35:59 -0800370 if (kLogApi) {
371 ALOGD("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
372 }
Jason Samsebfb4362009-09-23 13:57:02 -0700373 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
374}
375
Tim Murrayeff663f2013-11-15 13:08:30 -0800376static jlong
Jason Sams81cd2b12014-12-02 12:36:43 -0800377nContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint flags, jint sdkVer, jint contextType)
Jason Samsd19f10d2009-05-22 14:03:28 -0700378{
Andreas Gampe67333922014-11-10 20:35:59 -0800379 if (kLogApi) {
380 ALOGD("nContextCreate");
381 }
Jason Sams81cd2b12014-12-02 12:36:43 -0800382 return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, 0, sdkVer, (RsContextType)contextType, flags);
Jason Sams704ff642010-02-09 16:05:07 -0800383}
384
Tim Murrayeff663f2013-11-15 13:08:30 -0800385static jlong
Tim Murray5eaf4682014-01-10 11:25:52 -0800386nContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000387 jint colorMin, jint colorPref,
388 jint alphaMin, jint alphaPref,
389 jint depthMin, jint depthPref,
390 jint stencilMin, jint stencilPref,
391 jint samplesMin, jint samplesPref, jfloat samplesQ,
392 jint dpi)
Jason Sams704ff642010-02-09 16:05:07 -0800393{
Jason Sams11c8af92010-10-13 15:31:10 -0700394 RsSurfaceConfig sc;
395 sc.alphaMin = alphaMin;
396 sc.alphaPref = alphaPref;
397 sc.colorMin = colorMin;
398 sc.colorPref = colorPref;
399 sc.depthMin = depthMin;
400 sc.depthPref = depthPref;
401 sc.samplesMin = samplesMin;
402 sc.samplesPref = samplesPref;
403 sc.samplesQ = samplesQ;
404
Andreas Gampe67333922014-11-10 20:35:59 -0800405 if (kLogApi) {
406 ALOGD("nContextCreateGL");
407 }
Tim Murray3aa89c12014-08-18 17:51:22 -0700408 return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
Jason Samsd19f10d2009-05-22 14:03:28 -0700409}
410
411static void
Tim Murrayeff663f2013-11-15 13:08:30 -0800412nContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800413{
Andreas Gampe67333922014-11-10 20:35:59 -0800414 if (kLogApi) {
415 ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
416 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800417 rsContextSetPriority((RsContext)con, p);
Jason Sams7d787b42009-11-15 12:14:26 -0800418}
419
420
421
422static void
Tim Murrayeff663f2013-11-15 13:08:30 -0800423nContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800424{
Andreas Gampe67333922014-11-10 20:35:59 -0800425 if (kLogApi) {
426 ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con,
427 width, height, (Surface *)wnd);
428 }
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800429
Chris Wailes488230c32014-08-14 11:22:40 -0700430 ANativeWindow * window = nullptr;
431 if (wnd == nullptr) {
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800432
433 } else {
Jeff Brown64a55af2012-08-26 02:47:39 -0700434 window = android_view_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800435 }
436
Tim Murrayeff663f2013-11-15 13:08:30 -0800437 rsContextSetSurface((RsContext)con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800438}
439
440static void
Tim Murrayeff663f2013-11-15 13:08:30 -0800441nContextDestroy(JNIEnv *_env, jobject _this, jlong con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700442{
Andreas Gampe67333922014-11-10 20:35:59 -0800443 if (kLogApi) {
444 ALOGD("nContextDestroy, con(%p)", (RsContext)con);
445 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800446 rsContextDestroy((RsContext)con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700447}
448
Jason Sams715333b2009-11-17 17:26:46 -0800449static void
Tim Murrayeff663f2013-11-15 13:08:30 -0800450nContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800451{
Andreas Gampe67333922014-11-10 20:35:59 -0800452 if (kLogApi) {
453 ALOGD("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
454 }
Jason Sams715333b2009-11-17 17:26:46 -0800455 rsContextDump((RsContext)con, bits);
456}
Jason Samsd19f10d2009-05-22 14:03:28 -0700457
458static void
Tim Murrayeff663f2013-11-15 13:08:30 -0800459nContextPause(JNIEnv *_env, jobject _this, jlong con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700460{
Andreas Gampe67333922014-11-10 20:35:59 -0800461 if (kLogApi) {
462 ALOGD("nContextPause, con(%p)", (RsContext)con);
463 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800464 rsContextPause((RsContext)con);
Jason Sams65e7aa52009-09-24 17:38:20 -0700465}
466
467static void
Tim Murrayeff663f2013-11-15 13:08:30 -0800468nContextResume(JNIEnv *_env, jobject _this, jlong con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700469{
Andreas Gampe67333922014-11-10 20:35:59 -0800470 if (kLogApi) {
471 ALOGD("nContextResume, con(%p)", (RsContext)con);
472 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800473 rsContextResume((RsContext)con);
Jason Sams65e7aa52009-09-24 17:38:20 -0700474}
475
Jason Sams1c415172010-11-08 17:06:46 -0800476
477static jstring
Tim Murrayeff663f2013-11-15 13:08:30 -0800478nContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
Jason Sams1c415172010-11-08 17:06:46 -0800479{
Andreas Gampe67333922014-11-10 20:35:59 -0800480 if (kLogApi) {
481 ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con);
482 }
Jason Sams1c415172010-11-08 17:06:46 -0800483 char buf[1024];
484
485 size_t receiveLen;
486 uint32_t subID;
Tim Murrayeff663f2013-11-15 13:08:30 -0800487 int id = rsContextGetMessage((RsContext)con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700488 buf, sizeof(buf),
489 &receiveLen, sizeof(receiveLen),
Jason Samsedbfabd2011-05-17 15:01:29 -0700490 &subID, sizeof(subID));
Jason Sams1c415172010-11-08 17:06:46 -0800491 if (!id && receiveLen) {
Bernhard Rosenkränzer09993f72014-11-17 20:25:28 +0100492 ALOGV("message receive buffer too small. %zu", receiveLen);
Jason Sams1c415172010-11-08 17:06:46 -0800493 }
494 return _env->NewStringUTF(buf);
495}
496
Jason Samsedbfabd2011-05-17 15:01:29 -0700497static jint
Tim Murrayeff663f2013-11-15 13:08:30 -0800498nContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
Jason Sams516c3192009-10-06 13:58:47 -0700499{
Jason Sams516c3192009-10-06 13:58:47 -0700500 jint len = _env->GetArrayLength(data);
Andreas Gampe67333922014-11-10 20:35:59 -0800501 if (kLogApi) {
502 ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
503 }
Chris Wailes488230c32014-08-14 11:22:40 -0700504 jint *ptr = _env->GetIntArrayElements(data, nullptr);
Jason Sams516c3192009-10-06 13:58:47 -0700505 size_t receiveLen;
Jason Sams1c415172010-11-08 17:06:46 -0800506 uint32_t subID;
Tim Murrayeff663f2013-11-15 13:08:30 -0800507 int id = rsContextGetMessage((RsContext)con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700508 ptr, len * 4,
509 &receiveLen, sizeof(receiveLen),
Jason Samsedbfabd2011-05-17 15:01:29 -0700510 &subID, sizeof(subID));
Jason Sams516c3192009-10-06 13:58:47 -0700511 if (!id && receiveLen) {
Bernhard Rosenkränzer09993f72014-11-17 20:25:28 +0100512 ALOGV("message receive buffer too small. %zu", receiveLen);
Jason Sams516c3192009-10-06 13:58:47 -0700513 }
514 _env->ReleaseIntArrayElements(data, ptr, 0);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000515 return (jint)id;
Jason Sams1c415172010-11-08 17:06:46 -0800516}
517
518static jint
Tim Murrayeff663f2013-11-15 13:08:30 -0800519nContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
Jason Sams1c415172010-11-08 17:06:46 -0800520{
Andreas Gampe67333922014-11-10 20:35:59 -0800521 if (kLogApi) {
522 ALOGD("nContextPeekMessage, con(%p)", (RsContext)con);
523 }
Chris Wailes488230c32014-08-14 11:22:40 -0700524 jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr);
Jason Sams1c415172010-11-08 17:06:46 -0800525 size_t receiveLen;
526 uint32_t subID;
Tim Murrayeff663f2013-11-15 13:08:30 -0800527 int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
Jason Samsedbfabd2011-05-17 15:01:29 -0700528 &subID, sizeof(subID));
Jason Sams1c415172010-11-08 17:06:46 -0800529 auxDataPtr[0] = (jint)subID;
530 auxDataPtr[1] = (jint)receiveLen;
531 _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000532 return (jint)id;
Jason Sams516c3192009-10-06 13:58:47 -0700533}
534
Tim Murrayeff663f2013-11-15 13:08:30 -0800535static void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
Jason Sams516c3192009-10-06 13:58:47 -0700536{
Andreas Gampe67333922014-11-10 20:35:59 -0800537 if (kLogApi) {
538 ALOGD("nContextInitToClient, con(%p)", (RsContext)con);
539 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800540 rsContextInitToClient((RsContext)con);
Jason Sams516c3192009-10-06 13:58:47 -0700541}
542
Tim Murrayeff663f2013-11-15 13:08:30 -0800543static void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
Jason Sams516c3192009-10-06 13:58:47 -0700544{
Andreas Gampe67333922014-11-10 20:35:59 -0800545 if (kLogApi) {
546 ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con);
547 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800548 rsContextDeinitToClient((RsContext)con);
Jason Sams516c3192009-10-06 13:58:47 -0700549}
550
Jason Sams455d6442013-02-05 19:20:18 -0800551static void
Tim Murrayeff663f2013-11-15 13:08:30 -0800552nContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
Jason Sams455d6442013-02-05 19:20:18 -0800553{
Chris Wailes488230c32014-08-14 11:22:40 -0700554 jint *ptr = nullptr;
Jason Sams455d6442013-02-05 19:20:18 -0800555 jint len = 0;
556 if (data) {
557 len = _env->GetArrayLength(data);
Stephen Hines4a043c12014-08-21 23:20:32 -0700558 ptr = _env->GetIntArrayElements(data, nullptr);
Jason Sams455d6442013-02-05 19:20:18 -0800559 }
Andreas Gampe67333922014-11-10 20:35:59 -0800560 if (kLogApi) {
561 ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
562 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800563 rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
Jason Sams455d6442013-02-05 19:20:18 -0800564 if (data) {
565 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
566 }
567}
568
569
Jason Sams516c3192009-10-06 13:58:47 -0700570
Tim Murray460a0492013-11-19 12:45:54 -0800571static jlong
Andreas Gampe67333922014-11-10 20:35:59 -0800572nElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm,
573 jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700574{
Andreas Gampe67333922014-11-10 20:35:59 -0800575 if (kLogApi) {
Bernhard Rosenkränzer09993f72014-11-17 20:25:28 +0100576 ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con,
Andreas Gampe67333922014-11-10 20:35:59 -0800577 type, kind, norm, size);
578 }
579 return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind,
580 norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700581}
582
Tim Murray460a0492013-11-19 12:45:54 -0800583static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -0800584nElementCreate2(JNIEnv *_env, jobject _this, jlong con,
Ashok Bhat98071552014-02-12 09:54:43 +0000585 jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700586{
Jason Sams718cd1f2009-12-23 14:35:29 -0800587 int fieldCount = _env->GetArrayLength(_ids);
Andreas Gampe67333922014-11-10 20:35:59 -0800588 if (kLogApi) {
589 ALOGD("nElementCreate2, con(%p)", (RsContext)con);
590 }
Jason Sams718cd1f2009-12-23 14:35:29 -0800591
Chris Wailes488230c32014-08-14 11:22:40 -0700592 jlong *jIds = _env->GetLongArrayElements(_ids, nullptr);
593 jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr);
Ashok Bhat98071552014-02-12 09:54:43 +0000594
595 RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
596 uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
597
598 for(int i = 0; i < fieldCount; i ++) {
599 ids[i] = (RsElement)jIds[i];
600 arraySizes[i] = (uint32_t)jArraySizes[i];
601 }
Jason Sams718cd1f2009-12-23 14:35:29 -0800602
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800603 AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
604
605 const char **nameArray = names.c_str();
606 size_t *sizeArray = names.c_str_len();
607
Tim Murray3aa89c12014-08-18 17:51:22 -0700608 jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con,
Ashok Bhat98071552014-02-12 09:54:43 +0000609 (const RsElement *)ids, fieldCount,
Jason Sams7a22e102011-05-06 14:14:30 -0700610 nameArray, fieldCount * sizeof(size_t), sizeArray,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700611 (const uint32_t *)arraySizes, fieldCount);
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800612
Ashok Bhat98071552014-02-12 09:54:43 +0000613 free(ids);
614 free(arraySizes);
615 _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
616 _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
617
Tim Murray3aa89c12014-08-18 17:51:22 -0700618 return (jlong)(uintptr_t)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700619}
620
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700621static void
Tim Murray460a0492013-11-19 12:45:54 -0800622nElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700623{
624 int dataSize = _env->GetArrayLength(_elementData);
Andreas Gampe67333922014-11-10 20:35:59 -0800625 if (kLogApi) {
626 ALOGD("nElementGetNativeData, con(%p)", (RsContext)con);
627 }
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700628
629 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
630 assert(dataSize == 5);
631
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000632 uintptr_t elementData[5];
Tim Murrayeff663f2013-11-15 13:08:30 -0800633 rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700634
635 for(jint i = 0; i < dataSize; i ++) {
Ashok Bhat98071552014-02-12 09:54:43 +0000636 const jint data = (jint)elementData[i];
637 _env->SetIntArrayRegion(_elementData, i, 1, &data);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700638 }
639}
640
641
642static void
Tim Murray460a0492013-11-19 12:45:54 -0800643nElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
Ashok Bhat98071552014-02-12 09:54:43 +0000644 jlongArray _IDs,
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700645 jobjectArray _names,
646 jintArray _arraySizes)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700647{
Ashok Bhat98071552014-02-12 09:54:43 +0000648 uint32_t dataSize = _env->GetArrayLength(_IDs);
Andreas Gampe67333922014-11-10 20:35:59 -0800649 if (kLogApi) {
650 ALOGD("nElementGetSubElements, con(%p)", (RsContext)con);
651 }
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700652
Ashok Bhat98071552014-02-12 09:54:43 +0000653 uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t));
654 const char **names = (const char **)malloc(dataSize * sizeof(const char *));
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000655 uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t));
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700656
Andreas Gampe67333922014-11-10 20:35:59 -0800657 rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes,
658 (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700659
Ashok Bhat98071552014-02-12 09:54:43 +0000660 for(uint32_t i = 0; i < dataSize; i++) {
Tim Murray3aa89c12014-08-18 17:51:22 -0700661 const jlong id = (jlong)(uintptr_t)ids[i];
Ashok Bhat98071552014-02-12 09:54:43 +0000662 const jint arraySize = (jint)arraySizes[i];
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700663 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
Ashok Bhat98071552014-02-12 09:54:43 +0000664 _env->SetLongArrayRegion(_IDs, i, 1, &id);
665 _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700666 }
667
668 free(ids);
669 free(names);
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700670 free(arraySizes);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700671}
672
Jason Samsd19f10d2009-05-22 14:03:28 -0700673// -----------------------------------
674
Tim Murray460a0492013-11-19 12:45:54 -0800675static jlong
676nTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
Jason Samsb109cc72013-01-07 18:20:12 -0800677 jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
Jason Samsd19f10d2009-05-22 14:03:28 -0700678{
Andreas Gampe67333922014-11-10 20:35:59 -0800679 if (kLogApi) {
680 ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
Bernhard Rosenkränzer09993f72014-11-17 20:25:28 +0100681 (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv);
Andreas Gampe67333922014-11-10 20:35:59 -0800682 }
Jason Sams3b9c52a2010-10-14 17:48:46 -0700683
Andreas Gampe67333922014-11-10 20:35:59 -0800684 return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips,
685 faces, yuv);
Jason Samsd19f10d2009-05-22 14:03:28 -0700686}
687
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700688static void
Ashok Bhat98071552014-02-12 09:54:43 +0000689nTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700690{
691 // We are packing 6 items: mDimX; mDimY; mDimZ;
692 // mDimLOD; mDimFaces; mElement; into typeData
693 int elementCount = _env->GetArrayLength(_typeData);
694
695 assert(elementCount == 6);
Andreas Gampe67333922014-11-10 20:35:59 -0800696 if (kLogApi) {
697 ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con);
698 }
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700699
Ashok Bhat98071552014-02-12 09:54:43 +0000700 uintptr_t typeData[6];
Tim Murrayeff663f2013-11-15 13:08:30 -0800701 rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700702
703 for(jint i = 0; i < elementCount; i ++) {
Tim Murray3aa89c12014-08-18 17:51:22 -0700704 const jlong data = (jlong)(uintptr_t)typeData[i];
Ashok Bhat98071552014-02-12 09:54:43 +0000705 _env->SetLongArrayRegion(_typeData, i, 1, &data);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700706 }
707}
708
Jason Samsd19f10d2009-05-22 14:03:28 -0700709// -----------------------------------
710
Tim Murray460a0492013-11-19 12:45:54 -0800711static jlong
Andreas Gampe67333922014-11-10 20:35:59 -0800712nAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage,
713 jlong pointer)
Jason Samsd19f10d2009-05-22 14:03:28 -0700714{
Andreas Gampe67333922014-11-10 20:35:59 -0800715 if (kLogApi) {
716 ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)",
717 (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
718 }
719 return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type,
720 (RsAllocationMipmapControl)mips,
721 (uint32_t)usage, (uintptr_t)pointer);
Jason Samsd19f10d2009-05-22 14:03:28 -0700722}
723
Jason Samsd19f10d2009-05-22 14:03:28 -0700724static void
Tim Murray460a0492013-11-19 12:45:54 -0800725nAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
Jason Sams5476b452010-12-08 16:14:36 -0800726{
Andreas Gampe67333922014-11-10 20:35:59 -0800727 if (kLogApi) {
728 ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a,
729 bits);
730 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800731 rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
Jason Sams5476b452010-12-08 16:14:36 -0800732}
733
Jason Sams72226e02013-02-22 12:45:54 -0800734static jobject
Tim Murray460a0492013-11-19 12:45:54 -0800735nAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a)
Jason Sams615e7ce2012-01-13 14:01:20 -0800736{
Andreas Gampe67333922014-11-10 20:35:59 -0800737 if (kLogApi) {
738 ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
739 }
Jason Sams615e7ce2012-01-13 14:01:20 -0800740
Andreas Gampe67333922014-11-10 20:35:59 -0800741 IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con,
742 (RsAllocation)a);
Jason Sams72226e02013-02-22 12:45:54 -0800743 sp<IGraphicBufferProducer> bp = v;
Chris Wailes488230c32014-08-14 11:22:40 -0700744 v->decStrong(nullptr);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700745
Jason Sams72226e02013-02-22 12:45:54 -0800746 jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp);
747 return o;
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700748}
749
750static void
Tim Murray460a0492013-11-19 12:45:54 -0800751nAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
Jason Sams163766c2012-02-15 12:04:24 -0800752{
Andreas Gampe67333922014-11-10 20:35:59 -0800753 if (kLogApi) {
754 ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con,
755 (RsAllocation)alloc, (Surface *)sur);
756 }
Jason Sams163766c2012-02-15 12:04:24 -0800757
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700758 sp<Surface> s;
Jason Sams163766c2012-02-15 12:04:24 -0800759 if (sur != 0) {
Jeff Brown64a55af2012-08-26 02:47:39 -0700760 s = android_view_Surface_getSurface(_env, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800761 }
762
Andreas Gampe67333922014-11-10 20:35:59 -0800763 rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc,
764 static_cast<ANativeWindow *>(s.get()));
Jason Sams163766c2012-02-15 12:04:24 -0800765}
766
767static void
Tim Murray460a0492013-11-19 12:45:54 -0800768nAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
Jason Sams163766c2012-02-15 12:04:24 -0800769{
Andreas Gampe67333922014-11-10 20:35:59 -0800770 if (kLogApi) {
Bernhard Rosenkränzer09993f72014-11-17 20:25:28 +0100771 ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
Andreas Gampe67333922014-11-10 20:35:59 -0800772 }
Tim Murray460a0492013-11-19 12:45:54 -0800773 rsAllocationIoSend((RsContext)con, (RsAllocation)alloc);
Jason Sams163766c2012-02-15 12:04:24 -0800774}
775
776static void
Tim Murray460a0492013-11-19 12:45:54 -0800777nAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
Jason Sams163766c2012-02-15 12:04:24 -0800778{
Andreas Gampe67333922014-11-10 20:35:59 -0800779 if (kLogApi) {
Bernhard Rosenkränzer09993f72014-11-17 20:25:28 +0100780 ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
Andreas Gampe67333922014-11-10 20:35:59 -0800781 }
Tim Murray460a0492013-11-19 12:45:54 -0800782 rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc);
Jason Sams163766c2012-02-15 12:04:24 -0800783}
784
785
786static void
Tim Murray460a0492013-11-19 12:45:54 -0800787nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
Jason Samsf7086092011-01-12 13:28:37 -0800788{
Andreas Gampe67333922014-11-10 20:35:59 -0800789 if (kLogApi) {
790 ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
791 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800792 rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
Jason Samsf7086092011-01-12 13:28:37 -0800793}
794
Tim Murray460a0492013-11-19 12:45:54 -0800795static jlong
Andreas Gampe67333922014-11-10 20:35:59 -0800796nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
797 jobject jbitmap, jint usage)
Jason Samsffe9f482009-06-01 17:45:53 -0700798{
Jason Samsffe9f482009-06-01 17:45:53 -0700799 SkBitmap const * nativeBitmap =
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000800 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Jason Samsffe9f482009-06-01 17:45:53 -0700801 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsffe9f482009-06-01 17:45:53 -0700802
Jason Sams5476b452010-12-08 16:14:36 -0800803 bitmap.lockPixels();
804 const void* ptr = bitmap.getPixels();
Tim Murray3aa89c12014-08-18 17:51:22 -0700805 jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700806 (RsType)type, (RsAllocationMipmapControl)mip,
807 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800808 bitmap.unlockPixels();
809 return id;
Jason Samsffe9f482009-06-01 17:45:53 -0700810}
Jason Samsfe08d992009-05-27 14:45:32 -0700811
Tim Murray460a0492013-11-19 12:45:54 -0800812static jlong
Andreas Gampe67333922014-11-10 20:35:59 -0800813nAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type,
814 jint mip, jobject jbitmap, jint usage)
Tim Murraya3145512012-12-04 17:59:29 -0800815{
816 SkBitmap const * nativeBitmap =
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000817 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Tim Murraya3145512012-12-04 17:59:29 -0800818 const SkBitmap& bitmap(*nativeBitmap);
819
820 bitmap.lockPixels();
821 const void* ptr = bitmap.getPixels();
Tim Murray3aa89c12014-08-18 17:51:22 -0700822 jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con,
Tim Murraya3145512012-12-04 17:59:29 -0800823 (RsType)type, (RsAllocationMipmapControl)mip,
Ashok Bhat98071552014-02-12 09:54:43 +0000824 (uint32_t)usage, (uintptr_t)ptr);
Tim Murraya3145512012-12-04 17:59:29 -0800825 bitmap.unlockPixels();
826 return id;
827}
828
Tim Murray460a0492013-11-19 12:45:54 -0800829static jlong
Andreas Gampe67333922014-11-10 20:35:59 -0800830nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
831 jobject jbitmap, jint usage)
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800832{
833 SkBitmap const * nativeBitmap =
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000834 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800835 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800836
Jason Sams5476b452010-12-08 16:14:36 -0800837 bitmap.lockPixels();
838 const void* ptr = bitmap.getPixels();
Tim Murray3aa89c12014-08-18 17:51:22 -0700839 jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700840 (RsType)type, (RsAllocationMipmapControl)mip,
841 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800842 bitmap.unlockPixels();
843 return id;
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800844}
845
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700846static void
Tim Murray460a0492013-11-19 12:45:54 -0800847nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700848{
849 SkBitmap const * nativeBitmap =
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000850 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700851 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsf7086092011-01-12 13:28:37 -0800852 int w = bitmap.width();
853 int h = bitmap.height();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700854
Jason Sams4ef66502010-12-10 16:03:15 -0800855 bitmap.lockPixels();
856 const void* ptr = bitmap.getPixels();
Tim Murrayeff663f2013-11-15 13:08:30 -0800857 rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700858 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
Tim Murray38faea302012-11-27 14:55:08 -0800859 w, h, ptr, bitmap.getSize(), 0);
Jason Sams4ef66502010-12-10 16:03:15 -0800860 bitmap.unlockPixels();
861}
862
863static void
Tim Murray460a0492013-11-19 12:45:54 -0800864nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
Jason Sams4ef66502010-12-10 16:03:15 -0800865{
866 SkBitmap const * nativeBitmap =
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000867 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Jason Sams4ef66502010-12-10 16:03:15 -0800868 const SkBitmap& bitmap(*nativeBitmap);
869
870 bitmap.lockPixels();
871 void* ptr = bitmap.getPixels();
Tim Murrayeff663f2013-11-15 13:08:30 -0800872 rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize());
Jason Sams4ef66502010-12-10 16:03:15 -0800873 bitmap.unlockPixels();
Alex Sakhartchouk835b8542011-07-20 14:33:10 -0700874 bitmap.notifyPixelsChanged();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700875}
876
Stephen Hines414fa2c2014-04-17 01:02:42 -0700877// Copies from the Java object data into the Allocation pointed to by _alloc.
Jason Samsd19f10d2009-05-22 14:03:28 -0700878static void
Tim Murray460a0492013-11-19 12:45:54 -0800879nAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000880 jint count, jobject data, jint sizeBytes, jint dataType)
Jason Samsd19f10d2009-05-22 14:03:28 -0700881{
Jason Samse729a942013-11-06 11:22:02 -0800882 RsAllocation *alloc = (RsAllocation *)_alloc;
Andreas Gampe67333922014-11-10 20:35:59 -0800883 if (kLogApi) {
884 ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
885 "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes,
886 dataType);
887 }
888 PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, (RsContext)con, alloc, offset, lod, count,
889 ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700890}
891
Stephen Hines414fa2c2014-04-17 01:02:42 -0700892// Copies from the Java array data into the Allocation pointed to by alloc.
Jason Samsd19f10d2009-05-22 14:03:28 -0700893static void
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000894// native void rsnAllocationElementData1D(long con, long id, int xoff, int compIdx, byte[] d, int sizeBytes);
Andreas Gampe67333922014-11-10 20:35:59 -0800895nAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod,
896 jint compIdx, jbyteArray data, jint sizeBytes)
Jason Sams49bdaf02010-08-31 13:50:42 -0700897{
898 jint len = _env->GetArrayLength(data);
Andreas Gampe67333922014-11-10 20:35:59 -0800899 if (kLogApi) {
900 ALOGD("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), "
901 "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len,
902 sizeBytes);
903 }
Chris Wailes488230c32014-08-14 11:22:40 -0700904 jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
Tim Murrayeff663f2013-11-15 13:08:30 -0800905 rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
Jason Sams49bdaf02010-08-31 13:50:42 -0700906 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
907}
908
Stephen Hines414fa2c2014-04-17 01:02:42 -0700909// Copies from the Java object data into the Allocation pointed to by _alloc.
Jason Sams49bdaf02010-08-31 13:50:42 -0700910static void
Tim Murray460a0492013-11-19 12:45:54 -0800911nAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000912 jint w, jint h, jobject data, jint sizeBytes, jint dataType)
Jason Samsfb9f82c2011-01-12 14:53:25 -0800913{
Jason Samse729a942013-11-06 11:22:02 -0800914 RsAllocation *alloc = (RsAllocation *)_alloc;
915 RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
Andreas Gampe67333922014-11-10 20:35:59 -0800916 if (kLogApi) {
917 ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
918 "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
919 }
Chris Wailes488230c32014-08-14 11:22:40 -0700920 PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
Jason Samsd19f10d2009-05-22 14:03:28 -0700921}
922
Stephen Hines414fa2c2014-04-17 01:02:42 -0700923// Copies from the Allocation pointed to by srcAlloc into the Allocation
924// pointed to by dstAlloc.
Jason Sams40a29e82009-08-10 14:55:26 -0700925static void
Tim Murrayeff663f2013-11-15 13:08:30 -0800926nAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
Tim Murray460a0492013-11-19 12:45:54 -0800927 jlong dstAlloc, jint dstXoff, jint dstYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700928 jint dstMip, jint dstFace,
929 jint width, jint height,
Tim Murray460a0492013-11-19 12:45:54 -0800930 jlong srcAlloc, jint srcXoff, jint srcYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700931 jint srcMip, jint srcFace)
932{
Andreas Gampe67333922014-11-10 20:35:59 -0800933 if (kLogApi) {
934 ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
935 " dstMip(%i), dstFace(%i), width(%i), height(%i),"
936 " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
937 (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
938 width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
939 }
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700940
Tim Murrayeff663f2013-11-15 13:08:30 -0800941 rsAllocationCopy2DRange((RsContext)con,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700942 (RsAllocation)dstAlloc,
943 dstXoff, dstYoff,
944 dstMip, dstFace,
945 width, height,
946 (RsAllocation)srcAlloc,
947 srcXoff, srcYoff,
948 srcMip, srcFace);
949}
950
Stephen Hines414fa2c2014-04-17 01:02:42 -0700951// Copies from the Java object data into the Allocation pointed to by _alloc.
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700952static void
Tim Murray460a0492013-11-19 12:45:54 -0800953nAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
Jason Samse729a942013-11-06 11:22:02 -0800954 jint w, jint h, jint d, jobject data, int sizeBytes, int dataType)
Jason Samsb05d6892013-04-09 15:59:24 -0700955{
Jason Samse729a942013-11-06 11:22:02 -0800956 RsAllocation *alloc = (RsAllocation *)_alloc;
Andreas Gampe67333922014-11-10 20:35:59 -0800957 if (kLogApi) {
958 ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i),"
959 " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
960 lod, w, h, d, sizeBytes);
961 }
Chris Wailes488230c32014-08-14 11:22:40 -0700962 PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
Jason Samsb05d6892013-04-09 15:59:24 -0700963}
964
Stephen Hines414fa2c2014-04-17 01:02:42 -0700965// Copies from the Allocation pointed to by srcAlloc into the Allocation
966// pointed to by dstAlloc.
Jason Samsb05d6892013-04-09 15:59:24 -0700967static void
Tim Murrayeff663f2013-11-15 13:08:30 -0800968nAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
Tim Murray460a0492013-11-19 12:45:54 -0800969 jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700970 jint dstMip,
971 jint width, jint height, jint depth,
Tim Murray460a0492013-11-19 12:45:54 -0800972 jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700973 jint srcMip)
974{
Andreas Gampe67333922014-11-10 20:35:59 -0800975 if (kLogApi) {
976 ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
977 " dstMip(%i), width(%i), height(%i),"
978 " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
979 (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip,
980 width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip);
981 }
Jason Samsb05d6892013-04-09 15:59:24 -0700982
Tim Murrayeff663f2013-11-15 13:08:30 -0800983 rsAllocationCopy3DRange((RsContext)con,
Jason Samsb05d6892013-04-09 15:59:24 -0700984 (RsAllocation)dstAlloc,
985 dstXoff, dstYoff, dstZoff, dstMip,
986 width, height, depth,
987 (RsAllocation)srcAlloc,
988 srcXoff, srcYoff, srcZoff, srcMip);
989}
990
Jason Sams21659ac2013-11-06 15:08:07 -0800991
Stephen Hines414fa2c2014-04-17 01:02:42 -0700992// Copies from the Allocation pointed to by _alloc into the Java object data.
Jason Samsb05d6892013-04-09 15:59:24 -0700993static void
Tim Murray460a0492013-11-19 12:45:54 -0800994nAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType)
Jason Sams40a29e82009-08-10 14:55:26 -0700995{
Jason Sams21659ac2013-11-06 15:08:07 -0800996 RsAllocation *alloc = (RsAllocation *)_alloc;
Andreas Gampe67333922014-11-10 20:35:59 -0800997 if (kLogApi) {
998 ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
999 }
Stephen Hines414fa2c2014-04-17 01:02:42 -07001000 PER_ARRAY_TYPE(0, rsAllocationRead, false, (RsContext)con, alloc, ptr, len * typeBytes);
Jason Sams40a29e82009-08-10 14:55:26 -07001001}
1002
Stephen Hines414fa2c2014-04-17 01:02:42 -07001003// Copies from the Allocation pointed to by _alloc into the Java object data.
Jason Sams40a29e82009-08-10 14:55:26 -07001004static void
Tim Murray460a0492013-11-19 12:45:54 -08001005nAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
Jason Sams21659ac2013-11-06 15:08:07 -08001006 jint count, jobject data, int sizeBytes, int dataType)
Jason Samsfb9f82c2011-01-12 14:53:25 -08001007{
Jason Sams21659ac2013-11-06 15:08:07 -08001008 RsAllocation *alloc = (RsAllocation *)_alloc;
Andreas Gampe67333922014-11-10 20:35:59 -08001009 if (kLogApi) {
1010 ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
1011 "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType);
1012 }
Stephen Hines414fa2c2014-04-17 01:02:42 -07001013 PER_ARRAY_TYPE(0, rsAllocation1DRead, false, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsfb9f82c2011-01-12 14:53:25 -08001014}
1015
Stephen Hines414fa2c2014-04-17 01:02:42 -07001016// Copies from the Allocation pointed to by _alloc into the Java object data.
Jason Samsfb9f82c2011-01-12 14:53:25 -08001017static void
Tim Murray460a0492013-11-19 12:45:54 -08001018nAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
Jason Sams21659ac2013-11-06 15:08:07 -08001019 jint w, jint h, jobject data, int sizeBytes, int dataType)
Jason Samsfb9f82c2011-01-12 14:53:25 -08001020{
Jason Sams21659ac2013-11-06 15:08:07 -08001021 RsAllocation *alloc = (RsAllocation *)_alloc;
1022 RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
Andreas Gampe67333922014-11-10 20:35:59 -08001023 if (kLogApi) {
1024 ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
1025 "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
1026 }
1027 PER_ARRAY_TYPE(0, rsAllocation2DRead, false, (RsContext)con, alloc, xoff, yoff, lod, face, w, h,
1028 ptr, sizeBytes, 0);
Jason Sams40a29e82009-08-10 14:55:26 -07001029}
Jason Samsd19f10d2009-05-22 14:03:28 -07001030
Tim Murray460a0492013-11-19 12:45:54 -08001031static jlong
1032nAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -07001033{
Andreas Gampe67333922014-11-10 20:35:59 -08001034 if (kLogApi) {
1035 ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
1036 }
Tim Murray3aa89c12014-08-18 17:51:22 -07001037 return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -07001038}
1039
Jason Sams5edc6082010-10-05 13:32:49 -07001040static void
Tim Murray460a0492013-11-19 12:45:54 -08001041nAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
Jason Sams5edc6082010-10-05 13:32:49 -07001042{
Andreas Gampe67333922014-11-10 20:35:59 -08001043 if (kLogApi) {
1044 ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con,
1045 (RsAllocation)alloc, dimX);
1046 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001047 rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
Jason Sams5edc6082010-10-05 13:32:49 -07001048}
1049
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001050// -----------------------------------
1051
Tim Murray460a0492013-11-19 12:45:54 -08001052static jlong
1053nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001054{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001055 Asset* asset = reinterpret_cast<Asset*>(native_asset);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001056 ALOGV("______nFileA3D %p", asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001057
Tim Murray3aa89c12014-08-18 17:51:22 -07001058 jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001059 return id;
1060}
1061
Tim Murray460a0492013-11-19 12:45:54 -08001062static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001063nFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001064{
1065 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
Chris Wailes488230c32014-08-14 11:22:40 -07001066 if (mgr == nullptr) {
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001067 return 0;
1068 }
1069
1070 AutoJavaStringToUTF8 str(_env, _path);
1071 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
Chris Wailes488230c32014-08-14 11:22:40 -07001072 if (asset == nullptr) {
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001073 return 0;
1074 }
1075
Tim Murray3aa89c12014-08-18 17:51:22 -07001076 jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001077 return id;
1078}
1079
Tim Murray460a0492013-11-19 12:45:54 -08001080static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001081nFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001082{
1083 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Tim Murray3aa89c12014-08-18 17:51:22 -07001084 jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001085
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001086 return id;
1087}
1088
Tim Murray460a0492013-11-19 12:45:54 -08001089static jint
1090nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001091{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001092 int32_t numEntries = 0;
Tim Murrayeff663f2013-11-15 13:08:30 -08001093 rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001094 return (jint)numEntries;
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001095}
1096
1097static void
Tim Murray460a0492013-11-19 12:45:54 -08001098nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001099{
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001100 ALOGV("______nFileA3D %p", (RsFile) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001101 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
1102
Tim Murrayeff663f2013-11-15 13:08:30 -08001103 rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001104
1105 for(jint i = 0; i < numEntries; i ++) {
1106 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
1107 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
1108 }
1109
1110 free(fileEntries);
1111}
1112
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001113static jlong
Tim Murray460a0492013-11-19 12:45:54 -08001114nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001115{
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001116 ALOGV("______nFileA3D %p", (RsFile) fileA3D);
Tim Murray3aa89c12014-08-18 17:51:22 -07001117 jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -07001118 return id;
1119}
Jason Samsd19f10d2009-05-22 14:03:28 -07001120
1121// -----------------------------------
1122
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001123static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001124nFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001125 jstring fileName, jfloat fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001126{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001127 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Tim Murray3aa89c12014-08-18 17:51:22 -07001128 jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -07001129 fileNameUTF.c_str(), fileNameUTF.length(),
1130 fontSize, dpi);
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001131
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001132 return id;
1133}
1134
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001135static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001136nFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001137 jstring name, jfloat fontSize, jint dpi, jlong native_asset)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001138{
1139 Asset* asset = reinterpret_cast<Asset*>(native_asset);
1140 AutoJavaStringToUTF8 nameUTF(_env, name);
1141
Tim Murray3aa89c12014-08-18 17:51:22 -07001142 jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -07001143 nameUTF.c_str(), nameUTF.length(),
1144 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001145 asset->getBuffer(false), asset->getLength());
1146 return id;
1147}
1148
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001149static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001150nFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001151 jfloat fontSize, jint dpi)
1152{
1153 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
Chris Wailes488230c32014-08-14 11:22:40 -07001154 if (mgr == nullptr) {
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001155 return 0;
1156 }
1157
1158 AutoJavaStringToUTF8 str(_env, _path);
1159 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
Chris Wailes488230c32014-08-14 11:22:40 -07001160 if (asset == nullptr) {
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001161 return 0;
1162 }
1163
Tim Murray3aa89c12014-08-18 17:51:22 -07001164 jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -07001165 str.c_str(), str.length(),
1166 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001167 asset->getBuffer(false), asset->getLength());
1168 delete asset;
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001169 return id;
1170}
1171
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001172// -----------------------------------
1173
1174static void
Tim Murray460a0492013-11-19 12:45:54 -08001175nScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -07001176{
Andreas Gampe67333922014-11-10 20:35:59 -08001177 if (kLogApi) {
1178 ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con,
1179 (RsScript)script, (RsAllocation)alloc, slot);
1180 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001181 rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -07001182}
1183
1184static void
Tim Murray460a0492013-11-19 12:45:54 -08001185nScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -07001186{
Andreas Gampe67333922014-11-10 20:35:59 -08001187 if (kLogApi) {
1188 ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script,
1189 slot, val);
1190 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001191 rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -07001192}
1193
Tim Murray7c4caad2013-04-10 16:21:40 -07001194static jint
Tim Murray460a0492013-11-19 12:45:54 -08001195nScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -07001196{
Andreas Gampe67333922014-11-10 20:35:59 -08001197 if (kLogApi) {
1198 ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1199 }
Tim Murray7c4caad2013-04-10 16:21:40 -07001200 int value = 0;
Tim Murrayeff663f2013-11-15 13:08:30 -08001201 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -07001202 return value;
1203}
1204
Jason Sams4d339932010-05-11 14:03:58 -07001205static void
Tim Murray460a0492013-11-19 12:45:54 -08001206nScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001207{
Andreas Gampe67333922014-11-10 20:35:59 -08001208 if (kLogApi) {
Bernhard Rosenkränzer09993f72014-11-17 20:25:28 +01001209 ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script,
Andreas Gampe67333922014-11-10 20:35:59 -08001210 slot, val);
1211 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001212 rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001213}
1214
1215static void
Tim Murray460a0492013-11-19 12:45:54 -08001216nScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
Stephen Hines031ec58c2010-10-11 10:54:21 -07001217{
Andreas Gampe67333922014-11-10 20:35:59 -08001218 if (kLogApi) {
Bernhard Rosenkränzer09993f72014-11-17 20:25:28 +01001219 ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script,
Andreas Gampe67333922014-11-10 20:35:59 -08001220 slot, val);
1221 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001222 rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
Stephen Hines031ec58c2010-10-11 10:54:21 -07001223}
1224
Tim Murray7c4caad2013-04-10 16:21:40 -07001225static jlong
Tim Murray460a0492013-11-19 12:45:54 -08001226nScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -07001227{
Andreas Gampe67333922014-11-10 20:35:59 -08001228 if (kLogApi) {
1229 ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1230 }
Tim Murray7c4caad2013-04-10 16:21:40 -07001231 jlong value = 0;
Tim Murrayeff663f2013-11-15 13:08:30 -08001232 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -07001233 return value;
1234}
1235
Stephen Hines031ec58c2010-10-11 10:54:21 -07001236static void
Tim Murray460a0492013-11-19 12:45:54 -08001237nScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -07001238{
Andreas Gampe67333922014-11-10 20:35:59 -08001239 if (kLogApi) {
1240 ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script,
1241 slot, val);
1242 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001243 rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -07001244}
1245
Tim Murray7c4caad2013-04-10 16:21:40 -07001246static jfloat
Tim Murray460a0492013-11-19 12:45:54 -08001247nScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -07001248{
Andreas Gampe67333922014-11-10 20:35:59 -08001249 if (kLogApi) {
1250 ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1251 }
Tim Murray7c4caad2013-04-10 16:21:40 -07001252 jfloat value = 0;
Tim Murrayeff663f2013-11-15 13:08:30 -08001253 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -07001254 return value;
1255}
1256
Jason Sams4d339932010-05-11 14:03:58 -07001257static void
Tim Murray460a0492013-11-19 12:45:54 -08001258nScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
Stephen Hinesca54ec32010-09-20 17:20:30 -07001259{
Andreas Gampe67333922014-11-10 20:35:59 -08001260 if (kLogApi) {
1261 ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script,
1262 slot, val);
1263 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001264 rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
Stephen Hinesca54ec32010-09-20 17:20:30 -07001265}
1266
Tim Murray7c4caad2013-04-10 16:21:40 -07001267static jdouble
Tim Murray460a0492013-11-19 12:45:54 -08001268nScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -07001269{
Andreas Gampe67333922014-11-10 20:35:59 -08001270 if (kLogApi) {
1271 ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1272 }
Tim Murray7c4caad2013-04-10 16:21:40 -07001273 jdouble value = 0;
Tim Murrayeff663f2013-11-15 13:08:30 -08001274 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -07001275 return value;
1276}
1277
Stephen Hinesca54ec32010-09-20 17:20:30 -07001278static void
Tim Murray460a0492013-11-19 12:45:54 -08001279nScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -07001280{
Andreas Gampe67333922014-11-10 20:35:59 -08001281 if (kLogApi) {
1282 ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1283 }
Jason Sams4d339932010-05-11 14:03:58 -07001284 jint len = _env->GetArrayLength(data);
Chris Wailes488230c32014-08-14 11:22:40 -07001285 jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
Tim Murrayeff663f2013-11-15 13:08:30 -08001286 rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
Jason Sams4d339932010-05-11 14:03:58 -07001287 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1288}
1289
Stephen Hinesadeb8092012-04-20 14:26:06 -07001290static void
Tim Murray460a0492013-11-19 12:45:54 -08001291nScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Tim Murray7c4caad2013-04-10 16:21:40 -07001292{
Andreas Gampe67333922014-11-10 20:35:59 -08001293 if (kLogApi) {
1294 ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1295 }
Tim Murray7c4caad2013-04-10 16:21:40 -07001296 jint len = _env->GetArrayLength(data);
Chris Wailes488230c32014-08-14 11:22:40 -07001297 jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
Tim Murrayeff663f2013-11-15 13:08:30 -08001298 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
Stephen Hines414fa2c2014-04-17 01:02:42 -07001299 _env->ReleaseByteArrayElements(data, ptr, 0);
Tim Murray7c4caad2013-04-10 16:21:40 -07001300}
1301
1302static void
Andreas Gampe67333922014-11-10 20:35:59 -08001303nScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data,
1304 jlong elem, jintArray dims)
Stephen Hinesadeb8092012-04-20 14:26:06 -07001305{
Andreas Gampe67333922014-11-10 20:35:59 -08001306 if (kLogApi) {
1307 ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1308 }
Stephen Hinesadeb8092012-04-20 14:26:06 -07001309 jint len = _env->GetArrayLength(data);
Chris Wailes488230c32014-08-14 11:22:40 -07001310 jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
Stephen Hinesadeb8092012-04-20 14:26:06 -07001311 jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
Chris Wailes488230c32014-08-14 11:22:40 -07001312 jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr);
Tim Murrayeff663f2013-11-15 13:08:30 -08001313 rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
Stephen Hinesbc5d3ee2014-06-25 00:03:39 -07001314 (const uint32_t*) dimsPtr, dimsLen);
Stephen Hinesadeb8092012-04-20 14:26:06 -07001315 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1316 _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1317}
1318
Jason Samsd19f10d2009-05-22 14:03:28 -07001319
1320static void
Tim Murray460a0492013-11-19 12:45:54 -08001321nScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -07001322{
Andreas Gampe67333922014-11-10 20:35:59 -08001323 if (kLogApi) {
1324 ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
1325 }
Romain Guy584a3752009-07-30 18:45:01 -07001326
1327 jint length = _env->GetArrayLength(timeZone);
1328 jbyte* timeZone_ptr;
1329 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1330
Tim Murrayeff663f2013-11-15 13:08:30 -08001331 rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -07001332
1333 if (timeZone_ptr) {
1334 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1335 }
1336}
1337
Jason Samsfbf0b9e2009-08-13 12:59:04 -07001338static void
Tim Murray460a0492013-11-19 12:45:54 -08001339nScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -07001340{
Andreas Gampe67333922014-11-10 20:35:59 -08001341 if (kLogApi) {
1342 ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
1343 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001344 rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
Jason Samsbe2e8412009-09-16 15:04:38 -07001345}
1346
1347static void
Tim Murray460a0492013-11-19 12:45:54 -08001348nScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -07001349{
Andreas Gampe67333922014-11-10 20:35:59 -08001350 if (kLogApi) {
1351 ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1352 }
Jason Sams4d339932010-05-11 14:03:58 -07001353 jint len = _env->GetArrayLength(data);
Chris Wailes488230c32014-08-14 11:22:40 -07001354 jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
Tim Murrayeff663f2013-11-15 13:08:30 -08001355 rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
Jason Sams4d339932010-05-11 14:03:58 -07001356 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1357}
1358
Jason Sams6e494d32011-04-27 16:33:11 -07001359static void
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001360nScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot,
1361 jlongArray ains, jlong aout, jbyteArray params,
1362 jintArray limits)
Jason Sams6e494d32011-04-27 16:33:11 -07001363{
Andreas Gampe67333922014-11-10 20:35:59 -08001364 if (kLogApi) {
1365 ALOGD("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1366 }
Jason Sams6e494d32011-04-27 16:33:11 -07001367
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001368 jint in_len = 0;
Chris Wailes488230c32014-08-14 11:22:40 -07001369 jlong *in_ptr = nullptr;
Chris Wailes94961062014-06-11 12:01:28 -07001370
Chris Wailes488230c32014-08-14 11:22:40 -07001371 RsAllocation *in_allocs = nullptr;
Chris Wailes94961062014-06-11 12:01:28 -07001372
Chris Wailes488230c32014-08-14 11:22:40 -07001373 if (ains != nullptr) {
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001374 in_len = _env->GetArrayLength(ains);
Chris Wailes488230c32014-08-14 11:22:40 -07001375 in_ptr = _env->GetLongArrayElements(ains, nullptr);
Chris Wailes94961062014-06-11 12:01:28 -07001376
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001377 if (sizeof(RsAllocation) == sizeof(jlong)) {
1378 in_allocs = (RsAllocation*)in_ptr;
Chris Wailes94961062014-06-11 12:01:28 -07001379
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001380 } else {
1381 // Convert from 64-bit jlong types to the native pointer type.
Chris Wailes94961062014-06-11 12:01:28 -07001382
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001383 in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation));
1384
1385 for (int index = in_len; --index >= 0;) {
1386 in_allocs[index] = (RsAllocation)in_ptr[index];
1387 }
1388 }
Chris Wailes94961062014-06-11 12:01:28 -07001389 }
1390
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001391 jint param_len = 0;
Chris Wailes488230c32014-08-14 11:22:40 -07001392 jbyte *param_ptr = nullptr;
Chris Wailes94961062014-06-11 12:01:28 -07001393
Chris Wailes488230c32014-08-14 11:22:40 -07001394 if (params != nullptr) {
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001395 param_len = _env->GetArrayLength(params);
Chris Wailes488230c32014-08-14 11:22:40 -07001396 param_ptr = _env->GetByteArrayElements(params, nullptr);
Chris Wailes94961062014-06-11 12:01:28 -07001397 }
1398
Chris Wailes488230c32014-08-14 11:22:40 -07001399 RsScriptCall sc, *sca = nullptr;
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001400 uint32_t sc_size = 0;
Chris Wailes94961062014-06-11 12:01:28 -07001401
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001402 jint limit_len = 0;
Chris Wailes488230c32014-08-14 11:22:40 -07001403 jint *limit_ptr = nullptr;
Chris Wailes94961062014-06-11 12:01:28 -07001404
Chris Wailes488230c32014-08-14 11:22:40 -07001405 if (limits != nullptr) {
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001406 limit_len = _env->GetArrayLength(limits);
Chris Wailes488230c32014-08-14 11:22:40 -07001407 limit_ptr = _env->GetIntArrayElements(limits, nullptr);
Chris Wailes94961062014-06-11 12:01:28 -07001408
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001409 assert(limit_len == 6);
Andreas Gampe67333922014-11-10 20:35:59 -08001410 UNUSED(limit_len); // As the assert might not be compiled.
Chris Wailes94961062014-06-11 12:01:28 -07001411
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001412 sc.xStart = limit_ptr[0];
1413 sc.xEnd = limit_ptr[1];
1414 sc.yStart = limit_ptr[2];
1415 sc.yEnd = limit_ptr[3];
1416 sc.zStart = limit_ptr[4];
1417 sc.zEnd = limit_ptr[5];
1418 sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
Jason Sams14331ab2015-01-26 18:14:36 -08001419 sc.arrayStart = 0;
1420 sc.arrayEnd = 0;
1421 sc.array2Start = 0;
1422 sc.array2End = 0;
1423 sc.array3Start = 0;
1424 sc.array3End = 0;
1425 sc.array4Start = 0;
1426 sc.array4End = 0;
Chris Wailes94961062014-06-11 12:01:28 -07001427
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001428 sca = &sc;
Chris Wailes94961062014-06-11 12:01:28 -07001429 }
1430
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001431 rsScriptForEachMulti((RsContext)con, (RsScript)script, slot,
1432 in_allocs, in_len, (RsAllocation)aout,
1433 param_ptr, param_len, sca, sc_size);
Chris Wailes94961062014-06-11 12:01:28 -07001434
Chris Wailes488230c32014-08-14 11:22:40 -07001435 if (ains != nullptr) {
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001436 _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
Chris Wailes94961062014-06-11 12:01:28 -07001437 }
1438
Chris Wailes488230c32014-08-14 11:22:40 -07001439 if (params != nullptr) {
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001440 _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT);
1441 }
1442
Chris Wailes488230c32014-08-14 11:22:40 -07001443 if (limits != nullptr) {
Chris Wailesbe7b1de2014-07-15 10:56:14 -07001444 _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT);
1445 }
Chris Wailes94961062014-06-11 12:01:28 -07001446}
1447
Jason Sams22534172009-08-04 16:58:20 -07001448// -----------------------------------
1449
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001450static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001451nScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
Jason Samse4a06c52011-03-16 16:29:28 -07001452 jstring resName, jstring cacheDir,
1453 jbyteArray scriptRef, jint length)
Jason Sams22534172009-08-04 16:58:20 -07001454{
Andreas Gampe67333922014-11-10 20:35:59 -08001455 if (kLogApi) {
1456 ALOGD("nScriptCCreate, con(%p)", (RsContext)con);
1457 }
Jason Sams22534172009-08-04 16:58:20 -07001458
Jason Samse4a06c52011-03-16 16:29:28 -07001459 AutoJavaStringToUTF8 resNameUTF(_env, resName);
1460 AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001461 jlong ret = 0;
Chris Wailes488230c32014-08-14 11:22:40 -07001462 jbyte* script_ptr = nullptr;
Jack Palevich43702d82009-05-28 13:38:16 -07001463 jint _exception = 0;
1464 jint remaining;
Jack Palevich43702d82009-05-28 13:38:16 -07001465 if (!scriptRef) {
1466 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001467 //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
Jack Palevich43702d82009-05-28 13:38:16 -07001468 goto exit;
1469 }
Jack Palevich43702d82009-05-28 13:38:16 -07001470 if (length < 0) {
1471 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001472 //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
Jack Palevich43702d82009-05-28 13:38:16 -07001473 goto exit;
1474 }
Jason Samse4a06c52011-03-16 16:29:28 -07001475 remaining = _env->GetArrayLength(scriptRef);
Jack Palevich43702d82009-05-28 13:38:16 -07001476 if (remaining < length) {
1477 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001478 //jniThrowException(_env, "java/lang/IllegalArgumentException",
1479 // "length > script.length - offset");
Jack Palevich43702d82009-05-28 13:38:16 -07001480 goto exit;
1481 }
Jason Samse4a06c52011-03-16 16:29:28 -07001482 script_ptr = (jbyte *)
Jack Palevich43702d82009-05-28 13:38:16 -07001483 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
Jack Palevich43702d82009-05-28 13:38:16 -07001484
Tim Murrayeff663f2013-11-15 13:08:30 -08001485 //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
Jason Samse4a06c52011-03-16 16:29:28 -07001486
Tim Murray3aa89c12014-08-18 17:51:22 -07001487 ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -07001488 resNameUTF.c_str(), resNameUTF.length(),
1489 cacheDirUTF.c_str(), cacheDirUTF.length(),
Jason Samse4a06c52011-03-16 16:29:28 -07001490 (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -07001491
Jack Palevich43702d82009-05-28 13:38:16 -07001492exit:
Jason Samse4a06c52011-03-16 16:29:28 -07001493 if (script_ptr) {
1494 _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
Jack Palevich43702d82009-05-28 13:38:16 -07001495 _exception ? JNI_ABORT: 0);
1496 }
Jason Samsd19f10d2009-05-22 14:03:28 -07001497
Tim Murray3aa89c12014-08-18 17:51:22 -07001498 return (jlong)(uintptr_t)ret;
Jason Samsd19f10d2009-05-22 14:03:28 -07001499}
1500
Tim Murray460a0492013-11-19 12:45:54 -08001501static jlong
1502nScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
Jason Sams6ab97682012-08-10 12:09:43 -07001503{
Andreas Gampe67333922014-11-10 20:35:59 -08001504 if (kLogApi) {
1505 ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id,
1506 (void *)eid);
1507 }
Tim Murray3aa89c12014-08-18 17:51:22 -07001508 return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
Jason Sams6ab97682012-08-10 12:09:43 -07001509}
1510
Tim Murray460a0492013-11-19 12:45:54 -08001511static jlong
1512nScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
Jason Sams08a81582012-09-18 12:32:10 -07001513{
Andreas Gampe67333922014-11-10 20:35:59 -08001514 if (kLogApi) {
1515 ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con,
1516 (void *)sid, slot, sig);
1517 }
Tim Murray3aa89c12014-08-18 17:51:22 -07001518 return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
Jason Sams08a81582012-09-18 12:32:10 -07001519}
1520
Tim Murray460a0492013-11-19 12:45:54 -08001521static jlong
Yang Nibe392ad2015-01-23 17:16:02 -08001522nScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
1523{
1524 if (kLogApi) {
1525 ALOGD("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con,
1526 (void *)sid, slot);
1527 }
1528 return (jlong)(uintptr_t)rsScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot);
1529}
1530
1531static jlong
Tim Murray460a0492013-11-19 12:45:54 -08001532nScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
Jason Sams08a81582012-09-18 12:32:10 -07001533{
Andreas Gampe67333922014-11-10 20:35:59 -08001534 if (kLogApi) {
1535 ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid,
1536 slot);
1537 }
Tim Murray3aa89c12014-08-18 17:51:22 -07001538 return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
Jason Sams08a81582012-09-18 12:32:10 -07001539}
1540
Tim Murray460a0492013-11-19 12:45:54 -08001541static jlong
Ashok Bhat98071552014-02-12 09:54:43 +00001542nScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
1543 jlongArray _dstk, jlongArray _dstf, jlongArray _types)
Jason Sams08a81582012-09-18 12:32:10 -07001544{
Andreas Gampe67333922014-11-10 20:35:59 -08001545 if (kLogApi) {
1546 ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con);
1547 }
Jason Sams08a81582012-09-18 12:32:10 -07001548
Ashok Bhat98071552014-02-12 09:54:43 +00001549 jint kernelsLen = _env->GetArrayLength(_kernels);
Chris Wailes488230c32014-08-14 11:22:40 -07001550 jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr);
Ashok Bhat98071552014-02-12 09:54:43 +00001551 RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
1552 for(int i = 0; i < kernelsLen; ++i) {
1553 kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
1554 }
Jason Sams08a81582012-09-18 12:32:10 -07001555
Ashok Bhat98071552014-02-12 09:54:43 +00001556 jint srcLen = _env->GetArrayLength(_src);
Chris Wailes488230c32014-08-14 11:22:40 -07001557 jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr);
Ashok Bhat98071552014-02-12 09:54:43 +00001558 RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
1559 for(int i = 0; i < srcLen; ++i) {
1560 srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
1561 }
Jason Sams08a81582012-09-18 12:32:10 -07001562
Ashok Bhat98071552014-02-12 09:54:43 +00001563 jint dstkLen = _env->GetArrayLength(_dstk);
Chris Wailes488230c32014-08-14 11:22:40 -07001564 jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr);
Ashok Bhat98071552014-02-12 09:54:43 +00001565 RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
1566 for(int i = 0; i < dstkLen; ++i) {
1567 dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
1568 }
1569
1570 jint dstfLen = _env->GetArrayLength(_dstf);
Chris Wailes488230c32014-08-14 11:22:40 -07001571 jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr);
Ashok Bhat98071552014-02-12 09:54:43 +00001572 RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
1573 for(int i = 0; i < dstfLen; ++i) {
1574 dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
1575 }
1576
1577 jint typesLen = _env->GetArrayLength(_types);
Chris Wailes488230c32014-08-14 11:22:40 -07001578 jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr);
Ashok Bhat98071552014-02-12 09:54:43 +00001579 RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
1580 for(int i = 0; i < typesLen; ++i) {
1581 typesPtr[i] = (RsType)jTypesPtr[i];
1582 }
1583
Tim Murray3aa89c12014-08-18 17:51:22 -07001584 jlong id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con,
Ashok Bhat98071552014-02-12 09:54:43 +00001585 (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
1586 (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
1587 (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
1588 (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
1589 (RsType *)typesPtr, typesLen * sizeof(RsType));
1590
1591 free(kernelsPtr);
1592 free(srcPtr);
1593 free(dstkPtr);
1594 free(dstfPtr);
1595 free(typesPtr);
1596 _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
1597 _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
1598 _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
1599 _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
1600 _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
Jason Sams08a81582012-09-18 12:32:10 -07001601 return id;
1602}
1603
1604static void
Tim Murray460a0492013-11-19 12:45:54 -08001605nScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
Jason Sams08a81582012-09-18 12:32:10 -07001606{
Andreas Gampe67333922014-11-10 20:35:59 -08001607 if (kLogApi) {
1608 ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
1609 (void *)gid, (void *)kid, (void *)alloc);
1610 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001611 rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
Jason Sams08a81582012-09-18 12:32:10 -07001612}
1613
1614static void
Tim Murray460a0492013-11-19 12:45:54 -08001615nScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
Jason Sams08a81582012-09-18 12:32:10 -07001616{
Andreas Gampe67333922014-11-10 20:35:59 -08001617 if (kLogApi) {
1618 ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
1619 (void *)gid, (void *)kid, (void *)alloc);
1620 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001621 rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
Jason Sams08a81582012-09-18 12:32:10 -07001622}
1623
1624static void
Tim Murray460a0492013-11-19 12:45:54 -08001625nScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
Jason Sams08a81582012-09-18 12:32:10 -07001626{
Andreas Gampe67333922014-11-10 20:35:59 -08001627 if (kLogApi) {
1628 ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
1629 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001630 rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
Jason Sams08a81582012-09-18 12:32:10 -07001631}
1632
Jason Samsd19f10d2009-05-22 14:03:28 -07001633// ---------------------------------------------------------------------------
1634
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001635static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001636nProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
Jason Sams331bf9b2011-04-06 11:23:54 -07001637 jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1638 jboolean depthMask, jboolean ditherEnable,
1639 jint srcFunc, jint destFunc,
1640 jint depthFunc)
Jason Samsd19f10d2009-05-22 14:03:28 -07001641{
Andreas Gampe67333922014-11-10 20:35:59 -08001642 if (kLogApi) {
1643 ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con);
1644 }
Tim Murray3aa89c12014-08-18 17:51:22 -07001645 return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
Jason Sams331bf9b2011-04-06 11:23:54 -07001646 depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1647 (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
Jason Samsd19f10d2009-05-22 14:03:28 -07001648}
1649
Jason Sams0011bcf2009-12-15 12:58:36 -08001650// ---------------------------------------------------------------------------
1651
1652static void
Tim Murray460a0492013-11-19 12:45:54 -08001653nProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001654{
Andreas Gampe67333922014-11-10 20:35:59 -08001655 if (kLogApi) {
1656 ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con,
1657 (RsProgramVertex)vpv, slot, (RsAllocation)a);
1658 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001659 rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
Jason Sams0011bcf2009-12-15 12:58:36 -08001660}
Jason Sams54c0ec12009-11-30 14:49:55 -08001661
Jason Sams68afd012009-12-17 16:55:08 -08001662static void
Tim Murray460a0492013-11-19 12:45:54 -08001663nProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
Jason Sams68afd012009-12-17 16:55:08 -08001664{
Andreas Gampe67333922014-11-10 20:35:59 -08001665 if (kLogApi) {
1666 ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con,
1667 (RsProgramFragment)vpf, slot, (RsAllocation)a);
1668 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001669 rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
Jason Sams68afd012009-12-17 16:55:08 -08001670}
1671
1672static void
Tim Murray460a0492013-11-19 12:45:54 -08001673nProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
Jason Sams68afd012009-12-17 16:55:08 -08001674{
Andreas Gampe67333922014-11-10 20:35:59 -08001675 if (kLogApi) {
1676 ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con,
1677 (RsProgramFragment)vpf, slot, (RsSampler)a);
1678 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001679 rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
Jason Sams68afd012009-12-17 16:55:08 -08001680}
1681
Jason Samsd19f10d2009-05-22 14:03:28 -07001682// ---------------------------------------------------------------------------
1683
Tim Murray460a0492013-11-19 12:45:54 -08001684static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001685nProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
Ashok Bhat98071552014-02-12 09:54:43 +00001686 jobjectArray texNames, jlongArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001687{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001688 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Chris Wailes488230c32014-08-14 11:22:40 -07001689 jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001690 jint paramLen = _env->GetArrayLength(params);
1691
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001692 int texCount = _env->GetArrayLength(texNames);
1693 AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
1694 const char ** nameArray = names.c_str();
1695 size_t* sizeArray = names.c_str_len();
1696
Andreas Gampe67333922014-11-10 20:35:59 -08001697 if (kLogApi) {
1698 ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
1699 }
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001700
Ashok Bhat98071552014-02-12 09:54:43 +00001701 uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
1702 for(int i = 0; i < paramLen; ++i) {
1703 paramPtr[i] = (uintptr_t)jParamPtr[i];
1704 }
Tim Murray3aa89c12014-08-18 17:51:22 -07001705 jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001706 nameArray, texCount, sizeArray,
Ashok Bhat98071552014-02-12 09:54:43 +00001707 paramPtr, paramLen);
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001708
Ashok Bhat98071552014-02-12 09:54:43 +00001709 free(paramPtr);
1710 _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001711 return ret;
1712}
1713
1714
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001715// ---------------------------------------------------------------------------
1716
Tim Murray460a0492013-11-19 12:45:54 -08001717static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001718nProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
Ashok Bhat98071552014-02-12 09:54:43 +00001719 jobjectArray texNames, jlongArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001720{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001721 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Chris Wailes488230c32014-08-14 11:22:40 -07001722 jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr);
Jason Sams0011bcf2009-12-15 12:58:36 -08001723 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001724
Andreas Gampe67333922014-11-10 20:35:59 -08001725 if (kLogApi) {
1726 ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
1727 }
Jason Sams0011bcf2009-12-15 12:58:36 -08001728
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001729 int texCount = _env->GetArrayLength(texNames);
1730 AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
1731 const char ** nameArray = names.c_str();
1732 size_t* sizeArray = names.c_str_len();
1733
Ashok Bhat98071552014-02-12 09:54:43 +00001734 uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
1735 for(int i = 0; i < paramLen; ++i) {
1736 paramPtr[i] = (uintptr_t)jParamPtr[i];
1737 }
1738
Tim Murray3aa89c12014-08-18 17:51:22 -07001739 jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001740 nameArray, texCount, sizeArray,
Ashok Bhat98071552014-02-12 09:54:43 +00001741 paramPtr, paramLen);
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001742
Ashok Bhat98071552014-02-12 09:54:43 +00001743 free(paramPtr);
1744 _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
Jason Sams0011bcf2009-12-15 12:58:36 -08001745 return ret;
1746}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001747
Jason Samsebfb4362009-09-23 13:57:02 -07001748// ---------------------------------------------------------------------------
1749
Tim Murray460a0492013-11-19 12:45:54 -08001750static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001751nProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
Jason Samsebfb4362009-09-23 13:57:02 -07001752{
Andreas Gampe67333922014-11-10 20:35:59 -08001753 if (kLogApi) {
1754 ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con,
1755 pointSprite, cull);
1756 }
Tim Murray3aa89c12014-08-18 17:51:22 -07001757 return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
Jason Samsebfb4362009-09-23 13:57:02 -07001758}
1759
Jason Samsd19f10d2009-05-22 14:03:28 -07001760
1761// ---------------------------------------------------------------------------
1762
1763static void
Narayan Kamath78c0ce52014-03-19 10:15:51 +00001764nContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001765{
Andreas Gampe67333922014-11-10 20:35:59 -08001766 if (kLogApi) {
1767 ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
1768 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001769 rsContextBindRootScript((RsContext)con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001770}
1771
1772static void
Narayan Kamath78c0ce52014-03-19 10:15:51 +00001773nContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001774{
Andreas Gampe67333922014-11-10 20:35:59 -08001775 if (kLogApi) {
1776 ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
1777 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001778 rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001779}
1780
1781static void
Narayan Kamath78c0ce52014-03-19 10:15:51 +00001782nContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001783{
Andreas Gampe67333922014-11-10 20:35:59 -08001784 if (kLogApi) {
1785 ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con,
1786 (RsProgramFragment)pf);
1787 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001788 rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001789}
1790
Jason Sams0826a6f2009-06-15 19:04:56 -07001791static void
Narayan Kamath78c0ce52014-03-19 10:15:51 +00001792nContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001793{
Andreas Gampe67333922014-11-10 20:35:59 -08001794 if (kLogApi) {
1795 ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
1796 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001797 rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001798}
1799
Joe Onoratod7b37742009-08-09 22:57:44 -07001800static void
Narayan Kamath78c0ce52014-03-19 10:15:51 +00001801nContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001802{
Andreas Gampe67333922014-11-10 20:35:59 -08001803 if (kLogApi) {
1804 ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
1805 }
Tim Murrayeff663f2013-11-15 13:08:30 -08001806 rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
Jason Samsebfb4362009-09-23 13:57:02 -07001807}
1808
Joe Onoratod7b37742009-08-09 22:57:44 -07001809
Jason Sams02fb2cb2009-05-28 15:37:57 -07001810// ---------------------------------------------------------------------------
1811
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001812static jlong
Tim Murrayeff663f2013-11-15 13:08:30 -08001813nSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001814 jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001815{
Andreas Gampe67333922014-11-10 20:35:59 -08001816 if (kLogApi) {
1817 ALOGD("nSamplerCreate, con(%p)", (RsContext)con);
1818 }
Tim Murray3aa89c12014-08-18 17:51:22 -07001819 return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001820 (RsSamplerValue)magFilter,
1821 (RsSamplerValue)minFilter,
1822 (RsSamplerValue)wrapS,
1823 (RsSamplerValue)wrapT,
1824 (RsSamplerValue)wrapR,
1825 aniso);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001826}
1827
Jason Samsbba134c2009-06-22 15:49:21 -07001828// ---------------------------------------------------------------------------
1829
Tim Murray460a0492013-11-19 12:45:54 -08001830static jlong
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001831nPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jlong _loop, jfloat q) {
Andreas Gampe67333922014-11-10 20:35:59 -08001832 if (kLogApi) {
1833 ALOGD("nPathCreate, con(%p)", (RsContext)con);
1834 }
Jason Samsf15ed012011-10-31 13:23:43 -07001835
Tim Murray3aa89c12014-08-18 17:51:22 -07001836 jlong id = (jlong)(uintptr_t)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic,
Tim Murray460a0492013-11-19 12:45:54 -08001837 (RsAllocation)_vtx,
1838 (RsAllocation)_loop, q);
Jason Samsf15ed012011-10-31 13:23:43 -07001839 return id;
1840}
1841
Tim Murray460a0492013-11-19 12:45:54 -08001842static jlong
Ashok Bhat98071552014-02-12 09:54:43 +00001843nMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim)
Jason Samsbba134c2009-06-22 15:49:21 -07001844{
Andreas Gampe67333922014-11-10 20:35:59 -08001845 if (kLogApi) {
1846 ALOGD("nMeshCreate, con(%p)", (RsContext)con);
1847 }
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001848
1849 jint vtxLen = _env->GetArrayLength(_vtx);
Chris Wailes488230c32014-08-14 11:22:40 -07001850 jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr);
Ashok Bhat98071552014-02-12 09:54:43 +00001851 RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen);
1852 for(int i = 0; i < vtxLen; ++i) {
1853 vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i];
1854 }
1855
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001856 jint idxLen = _env->GetArrayLength(_idx);
Chris Wailes488230c32014-08-14 11:22:40 -07001857 jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr);
Ashok Bhat98071552014-02-12 09:54:43 +00001858 RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen);
1859 for(int i = 0; i < idxLen; ++i) {
1860 idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i];
1861 }
1862
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001863 jint primLen = _env->GetArrayLength(_prim);
Chris Wailes488230c32014-08-14 11:22:40 -07001864 jint *primPtr = _env->GetIntArrayElements(_prim, nullptr);
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001865
Tim Murray3aa89c12014-08-18 17:51:22 -07001866 jlong id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con,
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001867 (RsAllocation *)vtxPtr, vtxLen,
1868 (RsAllocation *)idxPtr, idxLen,
1869 (uint32_t *)primPtr, primLen);
1870
Ashok Bhat98071552014-02-12 09:54:43 +00001871 free(vtxPtr);
1872 free(idxPtr);
1873 _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0);
1874 _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0);
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001875 _env->ReleaseIntArrayElements(_prim, primPtr, 0);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001876 return id;
1877}
1878
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001879static jint
Tim Murray460a0492013-11-19 12:45:54 -08001880nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001881{
Andreas Gampe67333922014-11-10 20:35:59 -08001882 if (kLogApi) {
1883 ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
1884 }
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001885 jint vtxCount = 0;
Tim Murrayeff663f2013-11-15 13:08:30 -08001886 rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001887 return vtxCount;
1888}
1889
1890static jint
Tim Murray460a0492013-11-19 12:45:54 -08001891nMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001892{
Andreas Gampe67333922014-11-10 20:35:59 -08001893 if (kLogApi) {
1894 ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
1895 }
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001896 jint idxCount = 0;
Tim Murrayeff663f2013-11-15 13:08:30 -08001897 rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001898 return idxCount;
1899}
1900
1901static void
Ashok Bhat98071552014-02-12 09:54:43 +00001902nMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001903{
Andreas Gampe67333922014-11-10 20:35:59 -08001904 if (kLogApi) {
1905 ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
1906 }
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001907
1908 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Tim Murrayeff663f2013-11-15 13:08:30 -08001909 rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001910
1911 for(jint i = 0; i < numVtxIDs; i ++) {
Tim Murray3aa89c12014-08-18 17:51:22 -07001912 const jlong alloc = (jlong)(uintptr_t)allocs[i];
Ashok Bhat98071552014-02-12 09:54:43 +00001913 _env->SetLongArrayRegion(_ids, i, 1, &alloc);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001914 }
1915
1916 free(allocs);
1917}
1918
1919static void
Ashok Bhat98071552014-02-12 09:54:43 +00001920nMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001921{
Andreas Gampe67333922014-11-10 20:35:59 -08001922 if (kLogApi) {
1923 ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
1924 }
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001925
1926 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1927 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1928
Tim Murrayeff663f2013-11-15 13:08:30 -08001929 rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001930
1931 for(jint i = 0; i < numIndices; i ++) {
Tim Murray3aa89c12014-08-18 17:51:22 -07001932 const jlong alloc = (jlong)(uintptr_t)allocs[i];
Ashok Bhat98071552014-02-12 09:54:43 +00001933 const jint prim = (jint)prims[i];
1934 _env->SetLongArrayRegion(_idxIds, i, 1, &alloc);
1935 _env->SetIntArrayRegion(_primitives, i, 1, &prim);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001936 }
1937
1938 free(allocs);
1939 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001940}
1941
Tim Murray56f9e6f2014-05-16 11:47:26 -07001942static jint
1943nSystemGetPointerSize(JNIEnv *_env, jobject _this) {
1944 return (jint)sizeof(void*);
1945}
1946
1947
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001948// ---------------------------------------------------------------------------
1949
Jason Samsd19f10d2009-05-22 14:03:28 -07001950
Jason Sams94d8e90a2009-06-10 16:09:05 -07001951static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001952
1953static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001954{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001955
Tim Murrayeff663f2013-11-15 13:08:30 -08001956{"nDeviceCreate", "()J", (void*)nDeviceCreate },
1957{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy },
1958{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig },
1959{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage },
1960{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1961{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage },
Jason Sams1c415172010-11-08 17:06:46 -08001962
Tim Murrayeff663f2013-11-15 13:08:30 -08001963{"nContextInitToClient", "(J)V", (void*)nContextInitToClient },
1964{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001965
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001966
Jason Sams2e1872f2010-08-17 16:25:41 -07001967// All methods below are thread protected in java.
Tim Murrayeff663f2013-11-15 13:08:30 -08001968{"rsnContextCreate", "(JIII)J", (void*)nContextCreate },
1969{"rsnContextCreateGL", "(JIIIIIIIIIIIIFI)J", (void*)nContextCreateGL },
1970{"rsnContextFinish", "(J)V", (void*)nContextFinish },
1971{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority },
1972{"rsnContextSetSurface", "(JIILandroid/view/Surface;)V", (void*)nContextSetSurface },
1973{"rsnContextDestroy", "(J)V", (void*)nContextDestroy },
1974{"rsnContextDump", "(JI)V", (void*)nContextDump },
1975{"rsnContextPause", "(J)V", (void*)nContextPause },
1976{"rsnContextResume", "(J)V", (void*)nContextResume },
1977{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage },
Yang Ni281c3252014-10-24 08:52:24 -07001978{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate },
Yang Nibe392ad2015-01-23 17:16:02 -08001979{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate },
Yang Ni281c3252014-10-24 08:52:24 -07001980{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg },
1981{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal },
Tim Murray460a0492013-11-19 12:45:54 -08001982{"rsnAssignName", "(JJ[B)V", (void*)nAssignName },
1983{"rsnGetName", "(JJ)Ljava/lang/String;", (void*)nGetName },
1984{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001985
Tim Murray460a0492013-11-19 12:45:54 -08001986{"rsnFileA3DCreateFromFile", "(JLjava/lang/String;)J", (void*)nFileA3DCreateFromFile },
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001987{"rsnFileA3DCreateFromAssetStream", "(JJ)J", (void*)nFileA3DCreateFromAssetStream },
Tim Murray460a0492013-11-19 12:45:54 -08001988{"rsnFileA3DCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J", (void*)nFileA3DCreateFromAsset },
1989{"rsnFileA3DGetNumIndexEntries", "(JJ)I", (void*)nFileA3DGetNumIndexEntries },
1990{"rsnFileA3DGetIndexEntries", "(JJI[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001991{"rsnFileA3DGetEntryByIndex", "(JJI)J", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001992
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001993{"rsnFontCreateFromFile", "(JLjava/lang/String;FI)J", (void*)nFontCreateFromFile },
1994{"rsnFontCreateFromAssetStream", "(JLjava/lang/String;FIJ)J", (void*)nFontCreateFromAssetStream },
1995{"rsnFontCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J", (void*)nFontCreateFromAsset },
Jason Samsd19f10d2009-05-22 14:03:28 -07001996
Tim Murray460a0492013-11-19 12:45:54 -08001997{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate },
Ashok Bhat98071552014-02-12 09:54:43 +00001998{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 },
Tim Murray460a0492013-11-19 12:45:54 -08001999{"rsnElementGetNativeData", "(JJ[I)V", (void*)nElementGetNativeData },
Ashok Bhat98071552014-02-12 09:54:43 +00002000{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07002001
Tim Murray460a0492013-11-19 12:45:54 -08002002{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate },
Ashok Bhat98071552014-02-12 09:54:43 +00002003{"rsnTypeGetNativeData", "(JJ[J)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07002004
Ashok Bhat98071552014-02-12 09:54:43 +00002005{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped },
Tim Murray460a0492013-11-19 12:45:54 -08002006{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap },
2007{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation },
2008{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08002009
Tim Murray460a0492013-11-19 12:45:54 -08002010{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
2011{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
Jason Sams4ef66502010-12-10 16:03:15 -08002012
Tim Murray460a0492013-11-19 12:45:54 -08002013{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll },
2014{"rsnAllocationGetSurface", "(JJ)Landroid/view/Surface;", (void*)nAllocationGetSurface },
2015{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface },
2016{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend },
2017{"rsnAllocationIoReceive", "(JJ)V", (void*)nAllocationIoReceive },
2018{"rsnAllocationData1D", "(JJIIILjava/lang/Object;II)V", (void*)nAllocationData1D },
2019{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D },
2020{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;II)V", (void*)nAllocationData2D },
2021{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc },
2022{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;II)V", (void*)nAllocationData3D },
2023{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc },
2024{"rsnAllocationRead", "(JJLjava/lang/Object;I)V", (void*)nAllocationRead },
2025{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;II)V", (void*)nAllocationRead1D },
2026{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;II)V", (void*)nAllocationRead2D },
2027{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType},
2028{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D },
2029{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07002030
Tim Murray460a0492013-11-19 12:45:54 -08002031{"rsnScriptBindAllocation", "(JJJI)V", (void*)nScriptBindAllocation },
2032{"rsnScriptSetTimeZone", "(JJ[B)V", (void*)nScriptSetTimeZone },
2033{"rsnScriptInvoke", "(JJI)V", (void*)nScriptInvoke },
2034{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV },
Chris Wailesbe7b1de2014-07-15 10:56:14 -07002035
2036{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEach },
2037
Tim Murray460a0492013-11-19 12:45:54 -08002038{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI },
2039{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI },
2040{"rsnScriptSetVarJ", "(JJIJ)V", (void*)nScriptSetVarJ },
2041{"rsnScriptGetVarJ", "(JJI)J", (void*)nScriptGetVarJ },
2042{"rsnScriptSetVarF", "(JJIF)V", (void*)nScriptSetVarF },
2043{"rsnScriptGetVarF", "(JJI)F", (void*)nScriptGetVarF },
2044{"rsnScriptSetVarD", "(JJID)V", (void*)nScriptSetVarD },
2045{"rsnScriptGetVarD", "(JJI)D", (void*)nScriptGetVarD },
2046{"rsnScriptSetVarV", "(JJI[B)V", (void*)nScriptSetVarV },
2047{"rsnScriptGetVarV", "(JJI[B)V", (void*)nScriptGetVarV },
2048{"rsnScriptSetVarVE", "(JJI[BJ[I)V", (void*)nScriptSetVarVE },
2049{"rsnScriptSetVarObj", "(JJIJ)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07002050
Ashok Bhat0e0c0882014-02-04 14:57:58 +00002051{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate },
Tim Murray460a0492013-11-19 12:45:54 -08002052{"rsnScriptIntrinsicCreate", "(JIJ)J", (void*)nScriptIntrinsicCreate },
2053{"rsnScriptKernelIDCreate", "(JJII)J", (void*)nScriptKernelIDCreate },
Yang Nibe392ad2015-01-23 17:16:02 -08002054{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate },
Tim Murray460a0492013-11-19 12:45:54 -08002055{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate },
Ashok Bhat98071552014-02-12 09:54:43 +00002056{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate },
Yang Niebf63402015-01-16 11:06:26 -08002057{"rsnScriptGroup2Create", "(JLjava/lang/String;[J)J", (void*)nScriptGroup2Create },
Tim Murray460a0492013-11-19 12:45:54 -08002058{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput },
2059{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput },
2060{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute },
Yang Ni281c3252014-10-24 08:52:24 -07002061{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute },
Jason Sams0011bcf2009-12-15 12:58:36 -08002062
Ashok Bhat0e0c0882014-02-04 14:57:58 +00002063{"rsnProgramStoreCreate", "(JZZZZZZIII)J", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07002064
Tim Murray460a0492013-11-19 12:45:54 -08002065{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants },
2066{"rsnProgramBindTexture", "(JJIJ)V", (void*)nProgramBindTexture },
2067{"rsnProgramBindSampler", "(JJIJ)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07002068
Ashok Bhat98071552014-02-12 09:54:43 +00002069{"rsnProgramFragmentCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramFragmentCreate },
Tim Murray460a0492013-11-19 12:45:54 -08002070{"rsnProgramRasterCreate", "(JZI)J", (void*)nProgramRasterCreate },
Ashok Bhat98071552014-02-12 09:54:43 +00002071{"rsnProgramVertexCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07002072
Narayan Kamath78c0ce52014-03-19 10:15:51 +00002073{"rsnContextBindRootScript", "(JJ)V", (void*)nContextBindRootScript },
2074{"rsnContextBindProgramStore", "(JJ)V", (void*)nContextBindProgramStore },
2075{"rsnContextBindProgramFragment", "(JJ)V", (void*)nContextBindProgramFragment },
2076{"rsnContextBindProgramVertex", "(JJ)V", (void*)nContextBindProgramVertex },
2077{"rsnContextBindProgramRaster", "(JJ)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07002078
Ashok Bhat0e0c0882014-02-04 14:57:58 +00002079{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07002080
Ashok Bhat0e0c0882014-02-04 14:57:58 +00002081{"rsnPathCreate", "(JIZJJF)J", (void*)nPathCreate },
Ashok Bhat98071552014-02-12 09:54:43 +00002082{"rsnMeshCreate", "(J[J[J[I)J", (void*)nMeshCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07002083
Tim Murray460a0492013-11-19 12:45:54 -08002084{"rsnMeshGetVertexBufferCount", "(JJ)I", (void*)nMeshGetVertexBufferCount },
2085{"rsnMeshGetIndexCount", "(JJ)I", (void*)nMeshGetIndexCount },
Ashok Bhat98071552014-02-12 09:54:43 +00002086{"rsnMeshGetVertices", "(JJ[JI)V", (void*)nMeshGetVertices },
2087{"rsnMeshGetIndices", "(JJ[J[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07002088
Tim Murray56f9e6f2014-05-16 11:47:26 -07002089{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize },
Jason Samsd19f10d2009-05-22 14:03:28 -07002090};
2091
2092static int registerFuncs(JNIEnv *_env)
2093{
2094 return android::AndroidRuntime::registerNativeMethods(
2095 _env, classPathName, methods, NELEM(methods));
2096}
2097
2098// ---------------------------------------------------------------------------
2099
2100jint JNI_OnLoad(JavaVM* vm, void* reserved)
2101{
Chris Wailes488230c32014-08-14 11:22:40 -07002102 JNIEnv* env = nullptr;
Jason Samsd19f10d2009-05-22 14:03:28 -07002103 jint result = -1;
2104
Jason Samsd19f10d2009-05-22 14:03:28 -07002105 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
Steve Block3762c312012-01-06 19:20:56 +00002106 ALOGE("ERROR: GetEnv failed\n");
Jason Samsd19f10d2009-05-22 14:03:28 -07002107 goto bail;
2108 }
Chris Wailes488230c32014-08-14 11:22:40 -07002109 assert(env != nullptr);
Jason Samsd19f10d2009-05-22 14:03:28 -07002110
2111 if (registerFuncs(env) < 0) {
Ashok Bhat0e0c0882014-02-04 14:57:58 +00002112 ALOGE("ERROR: Renderscript native registration failed\n");
Jason Samsd19f10d2009-05-22 14:03:28 -07002113 goto bail;
2114 }
2115
2116 /* success -- return valid version number */
2117 result = JNI_VERSION_1_4;
2118
2119bail:
2120 return result;
2121}