blob: a8f92cec9ef50619d19c4ae8d8719d943158c0fa [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>
Jason Samsd19f10d2009-05-22 14:03:28 -070025
Jason Samsffe9f482009-06-01 17:45:53 -070026#include <core/SkBitmap.h>
Romain Guy650a3eb2009-08-31 14:06:43 -070027#include <core/SkPixelRef.h>
28#include <core/SkStream.h>
29#include <core/SkTemplates.h>
Jason Samsffe9f482009-06-01 17:45:53 -070030
Mathias Agopianb13b9bd2012-02-17 18:27:36 -080031#include <androidfw/Asset.h>
32#include <androidfw/AssetManager.h>
33#include <androidfw/ResourceTypes.h>
Jason Samsf29ca502009-06-23 12:22:47 -070034
Jason Samsd19f10d2009-05-22 14:03:28 -070035#include "jni.h"
36#include "JNIHelp.h"
37#include "android_runtime/AndroidRuntime.h"
Jim Milleree956052010-08-19 18:56:00 -070038#include "android_runtime/android_view_Surface.h"
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080039#include "android_runtime/android_util_AssetManager.h"
Jason Samsd19f10d2009-05-22 14:03:28 -070040
Jason Sams1d6983a2012-02-16 16:07:49 -080041#include <rs.h>
42#include <rsEnv.h>
Jason Samsfb9aa9f2012-03-28 15:30:07 -070043#include <gui/Surface.h>
Andy McFaddend47f7d82012-12-18 09:48:38 -080044#include <gui/GLConsumer.h>
Mathias Agopian52800612013-02-14 17:11:20 -080045#include <gui/Surface.h>
Jason Samsfaa32b32011-06-20 16:58:04 -070046#include <android_runtime/android_graphics_SurfaceTexture.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070047
Steve Block3762c312012-01-06 19:20:56 +000048//#define LOG_API ALOGE
Jason Samsd19f10d2009-05-22 14:03:28 -070049#define LOG_API(...)
50
51using namespace android;
52
Jason Sams6fcf2e12013-11-06 11:22:02 -080053#define PER_ARRAY_TYPE(flag, fnc, ...) { \
54 jint len = 0; \
55 void *ptr = NULL; \
Jason Sams29868dfa2013-11-06 15:08:07 -080056 size_t typeBytes = 0; \
Jason Sams6fcf2e12013-11-06 11:22:02 -080057 switch(dataType) { \
58 case RS_TYPE_FLOAT_32: \
59 len = _env->GetArrayLength((jfloatArray)data); \
60 ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \
Jason Sams29868dfa2013-11-06 15:08:07 -080061 typeBytes = 4; \
Jason Sams6fcf2e12013-11-06 11:22:02 -080062 fnc(__VA_ARGS__); \
63 _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, JNI_ABORT); \
64 return; \
65 case RS_TYPE_FLOAT_64: \
66 len = _env->GetArrayLength((jdoubleArray)data); \
67 ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \
Jason Sams29868dfa2013-11-06 15:08:07 -080068 typeBytes = 8; \
Jason Sams6fcf2e12013-11-06 11:22:02 -080069 fnc(__VA_ARGS__); \
70 _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, JNI_ABORT);\
71 return; \
72 case RS_TYPE_SIGNED_8: \
73 case RS_TYPE_UNSIGNED_8: \
74 len = _env->GetArrayLength((jbyteArray)data); \
75 ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \
Jason Sams29868dfa2013-11-06 15:08:07 -080076 typeBytes = 1; \
Jason Sams6fcf2e12013-11-06 11:22:02 -080077 fnc(__VA_ARGS__); \
78 _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, JNI_ABORT); \
79 return; \
80 case RS_TYPE_SIGNED_16: \
81 case RS_TYPE_UNSIGNED_16: \
82 len = _env->GetArrayLength((jshortArray)data); \
83 ptr = _env->GetShortArrayElements((jshortArray)data, flag); \
Jason Sams29868dfa2013-11-06 15:08:07 -080084 typeBytes = 2; \
Jason Sams6fcf2e12013-11-06 11:22:02 -080085 fnc(__VA_ARGS__); \
86 _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, JNI_ABORT); \
87 return; \
88 case RS_TYPE_SIGNED_32: \
89 case RS_TYPE_UNSIGNED_32: \
90 len = _env->GetArrayLength((jintArray)data); \
91 ptr = _env->GetIntArrayElements((jintArray)data, flag); \
Jason Sams29868dfa2013-11-06 15:08:07 -080092 typeBytes = 4; \
Jason Sams6fcf2e12013-11-06 11:22:02 -080093 fnc(__VA_ARGS__); \
94 _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, JNI_ABORT); \
95 return; \
96 case RS_TYPE_SIGNED_64: \
97 case RS_TYPE_UNSIGNED_64: \
98 len = _env->GetArrayLength((jlongArray)data); \
99 ptr = _env->GetLongArrayElements((jlongArray)data, flag); \
Jason Sams29868dfa2013-11-06 15:08:07 -0800100 typeBytes = 8; \
Jason Sams6fcf2e12013-11-06 11:22:02 -0800101 fnc(__VA_ARGS__); \
102 _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, JNI_ABORT); \
103 return; \
104 default: \
105 break; \
106 } \
107}
108
109
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800110class AutoJavaStringToUTF8 {
111public:
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800112 AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800113 fCStr = env->GetStringUTFChars(str, NULL);
114 fLength = env->GetStringUTFLength(str);
115 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800116 ~AutoJavaStringToUTF8() {
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800117 fEnv->ReleaseStringUTFChars(fJStr, fCStr);
118 }
119 const char* c_str() const { return fCStr; }
120 jsize length() const { return fLength; }
121
122private:
123 JNIEnv* fEnv;
124 jstring fJStr;
125 const char* fCStr;
126 jsize fLength;
127};
128
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800129class AutoJavaStringArrayToUTF8 {
130public:
131 AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
132 : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
133 mCStrings = NULL;
134 mSizeArray = NULL;
135 if (stringsLength > 0) {
136 mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
137 mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
138 for (jsize ct = 0; ct < stringsLength; ct ++) {
139 jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
140 mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL);
141 mSizeArray[ct] = mEnv->GetStringUTFLength(s);
142 }
143 }
144 }
145 ~AutoJavaStringArrayToUTF8() {
146 for (jsize ct=0; ct < mStringsLength; ct++) {
147 jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
148 mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
149 }
150 free(mCStrings);
151 free(mSizeArray);
152 }
153 const char **c_str() const { return mCStrings; }
154 size_t *c_str_len() const { return mSizeArray; }
155 jsize length() const { return mStringsLength; }
156
157private:
158 JNIEnv *mEnv;
159 jobjectArray mStrings;
160 const char **mCStrings;
161 size_t *mSizeArray;
162 jsize mStringsLength;
163};
164
Jason Samsd19f10d2009-05-22 14:03:28 -0700165// ---------------------------------------------------------------------------
166
Jason Samsffe9f482009-06-01 17:45:53 -0700167static jfieldID gContextId = 0;
168static jfieldID gNativeBitmapID = 0;
Jason Sams43ee06852009-08-12 17:54:11 -0700169static jfieldID gTypeNativeCache = 0;
Jason Samsd19f10d2009-05-22 14:03:28 -0700170
171static void _nInit(JNIEnv *_env, jclass _this)
172{
Tim Murraya78e9ad2013-11-15 13:08:30 -0800173 gContextId = _env->GetFieldID(_this, "mContext", "J");
Jason Samsffe9f482009-06-01 17:45:53 -0700174
175 jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
Ashok Bhata0398432014-01-20 20:08:01 +0000176 gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J");
Jason Samsd19f10d2009-05-22 14:03:28 -0700177}
178
Jason Samsd19f10d2009-05-22 14:03:28 -0700179// ---------------------------------------------------------------------------
180
Jason Sams3eaa338e2009-06-10 15:04:38 -0700181static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800182nContextFinish(JNIEnv *_env, jobject _this, jlong con)
Jason Sams96ed4cf2010-06-15 12:15:57 -0700183{
Tim Murraye926ddd2014-01-07 15:36:19 -0800184 LOG_API("nContextFinish, con(%p)", (RsContext)con);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800185 rsContextFinish((RsContext)con);
Jason Sams96ed4cf2010-06-15 12:15:57 -0700186}
187
188static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800189nAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str)
Jason Sams3eaa338e2009-06-10 15:04:38 -0700190{
Tim Murraye926ddd2014-01-07 15:36:19 -0800191 LOG_API("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
Jason Sams3eaa338e2009-06-10 15:04:38 -0700192 jint len = _env->GetArrayLength(str);
193 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800194 rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -0700195 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
196}
197
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700198static jstring
Tim Murray7a629fa2013-11-19 12:45:54 -0800199nGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj)
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700200{
Tim Murraye926ddd2014-01-07 15:36:19 -0800201 LOG_API("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700202 const char *name = NULL;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800203 rsaGetName((RsContext)con, (void *)obj, &name);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700204 if(name == NULL || strlen(name) == 0) {
205 return NULL;
206 }
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700207 return _env->NewStringUTF(name);
208}
209
Jason Sams7ce033d2009-08-18 14:14:24 -0700210static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800211nObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
Jason Sams7ce033d2009-08-18 14:14:24 -0700212{
Tim Murraye926ddd2014-01-07 15:36:19 -0800213 LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800214 rsObjDestroy((RsContext)con, (void *)obj);
Jason Sams7ce033d2009-08-18 14:14:24 -0700215}
216
Jason Sams3eaa338e2009-06-10 15:04:38 -0700217// ---------------------------------------------------------------------------
218
Tim Murraya78e9ad2013-11-15 13:08:30 -0800219static jlong
Jason Samsd19f10d2009-05-22 14:03:28 -0700220nDeviceCreate(JNIEnv *_env, jobject _this)
221{
222 LOG_API("nDeviceCreate");
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000223 return (jlong)rsDeviceCreate();
Jason Samsd19f10d2009-05-22 14:03:28 -0700224}
225
226static void
Tim Murrayb75c27e2014-01-10 11:25:52 -0800227nDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
Jason Samsd19f10d2009-05-22 14:03:28 -0700228{
229 LOG_API("nDeviceDestroy");
230 return rsDeviceDestroy((RsDevice)dev);
231}
232
Jason Samsebfb4362009-09-23 13:57:02 -0700233static void
Tim Murrayb75c27e2014-01-10 11:25:52 -0800234nDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
Jason Samsebfb4362009-09-23 13:57:02 -0700235{
236 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
237 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
238}
239
Tim Murraya78e9ad2013-11-15 13:08:30 -0800240static jlong
Tim Murrayb75c27e2014-01-10 11:25:52 -0800241nContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct)
Jason Samsd19f10d2009-05-22 14:03:28 -0700242{
243 LOG_API("nContextCreate");
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000244 return (jlong)rsContextCreate((RsDevice)dev, ver, sdkVer, (RsContextType)ct, 0);
Jason Sams704ff642010-02-09 16:05:07 -0800245}
246
Tim Murraya78e9ad2013-11-15 13:08:30 -0800247static jlong
Tim Murrayb75c27e2014-01-10 11:25:52 -0800248nContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000249 jint colorMin, jint colorPref,
250 jint alphaMin, jint alphaPref,
251 jint depthMin, jint depthPref,
252 jint stencilMin, jint stencilPref,
253 jint samplesMin, jint samplesPref, jfloat samplesQ,
254 jint dpi)
Jason Sams704ff642010-02-09 16:05:07 -0800255{
Jason Sams11c8af92010-10-13 15:31:10 -0700256 RsSurfaceConfig sc;
257 sc.alphaMin = alphaMin;
258 sc.alphaPref = alphaPref;
259 sc.colorMin = colorMin;
260 sc.colorPref = colorPref;
261 sc.depthMin = depthMin;
262 sc.depthPref = depthPref;
263 sc.samplesMin = samplesMin;
264 sc.samplesPref = samplesPref;
265 sc.samplesQ = samplesQ;
266
Jason Sams704ff642010-02-09 16:05:07 -0800267 LOG_API("nContextCreateGL");
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000268 return (jlong)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
Jason Samsd19f10d2009-05-22 14:03:28 -0700269}
270
271static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800272nContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800273{
Tim Murraye926ddd2014-01-07 15:36:19 -0800274 LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800275 rsContextSetPriority((RsContext)con, p);
Jason Sams7d787b42009-11-15 12:14:26 -0800276}
277
278
279
280static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800281nContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800282{
Tim Murraye926ddd2014-01-07 15:36:19 -0800283 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800284
Alex Sakhartchouk6c72eec2011-05-17 12:32:47 -0700285 ANativeWindow * window = NULL;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800286 if (wnd == NULL) {
287
288 } else {
Jeff Brown64a55af2012-08-26 02:47:39 -0700289 window = android_view_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800290 }
291
Tim Murraya78e9ad2013-11-15 13:08:30 -0800292 rsContextSetSurface((RsContext)con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800293}
294
295static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800296nContextDestroy(JNIEnv *_env, jobject _this, jlong con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700297{
Tim Murraye926ddd2014-01-07 15:36:19 -0800298 LOG_API("nContextDestroy, con(%p)", (RsContext)con);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800299 rsContextDestroy((RsContext)con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700300}
301
Jason Sams715333b2009-11-17 17:26:46 -0800302static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800303nContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800304{
Jason Sams715333b2009-11-17 17:26:46 -0800305 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
306 rsContextDump((RsContext)con, bits);
307}
Jason Samsd19f10d2009-05-22 14:03:28 -0700308
309static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800310nContextPause(JNIEnv *_env, jobject _this, jlong con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700311{
Tim Murraye926ddd2014-01-07 15:36:19 -0800312 LOG_API("nContextPause, con(%p)", (RsContext)con);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800313 rsContextPause((RsContext)con);
Jason Sams65e7aa52009-09-24 17:38:20 -0700314}
315
316static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800317nContextResume(JNIEnv *_env, jobject _this, jlong con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700318{
Tim Murraye926ddd2014-01-07 15:36:19 -0800319 LOG_API("nContextResume, con(%p)", (RsContext)con);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800320 rsContextResume((RsContext)con);
Jason Sams65e7aa52009-09-24 17:38:20 -0700321}
322
Jason Sams1c415172010-11-08 17:06:46 -0800323
324static jstring
Tim Murraya78e9ad2013-11-15 13:08:30 -0800325nContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
Jason Sams1c415172010-11-08 17:06:46 -0800326{
Tim Murraye926ddd2014-01-07 15:36:19 -0800327 LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con);
Jason Sams1c415172010-11-08 17:06:46 -0800328 char buf[1024];
329
330 size_t receiveLen;
331 uint32_t subID;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800332 int id = rsContextGetMessage((RsContext)con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700333 buf, sizeof(buf),
334 &receiveLen, sizeof(receiveLen),
Jason Samsedbfabd2011-05-17 15:01:29 -0700335 &subID, sizeof(subID));
Jason Sams1c415172010-11-08 17:06:46 -0800336 if (!id && receiveLen) {
Steve Block71f2cf12011-10-20 11:56:00 +0100337 ALOGV("message receive buffer too small. %i", receiveLen);
Jason Sams1c415172010-11-08 17:06:46 -0800338 }
339 return _env->NewStringUTF(buf);
340}
341
Jason Samsedbfabd2011-05-17 15:01:29 -0700342static jint
Tim Murraya78e9ad2013-11-15 13:08:30 -0800343nContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
Jason Sams516c3192009-10-06 13:58:47 -0700344{
Jason Sams516c3192009-10-06 13:58:47 -0700345 jint len = _env->GetArrayLength(data);
Tim Murraye926ddd2014-01-07 15:36:19 -0800346 LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
Jason Sams516c3192009-10-06 13:58:47 -0700347 jint *ptr = _env->GetIntArrayElements(data, NULL);
348 size_t receiveLen;
Jason Sams1c415172010-11-08 17:06:46 -0800349 uint32_t subID;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800350 int id = rsContextGetMessage((RsContext)con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700351 ptr, len * 4,
352 &receiveLen, sizeof(receiveLen),
Jason Samsedbfabd2011-05-17 15:01:29 -0700353 &subID, sizeof(subID));
Jason Sams516c3192009-10-06 13:58:47 -0700354 if (!id && receiveLen) {
Steve Block71f2cf12011-10-20 11:56:00 +0100355 ALOGV("message receive buffer too small. %i", receiveLen);
Jason Sams516c3192009-10-06 13:58:47 -0700356 }
357 _env->ReleaseIntArrayElements(data, ptr, 0);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000358 return (jint)id;
Jason Sams1c415172010-11-08 17:06:46 -0800359}
360
361static jint
Tim Murraya78e9ad2013-11-15 13:08:30 -0800362nContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
Jason Sams1c415172010-11-08 17:06:46 -0800363{
Tim Murraye926ddd2014-01-07 15:36:19 -0800364 LOG_API("nContextPeekMessage, con(%p)", (RsContext)con);
Jason Sams1c415172010-11-08 17:06:46 -0800365 jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
366 size_t receiveLen;
367 uint32_t subID;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800368 int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
Jason Samsedbfabd2011-05-17 15:01:29 -0700369 &subID, sizeof(subID));
Jason Sams1c415172010-11-08 17:06:46 -0800370 auxDataPtr[0] = (jint)subID;
371 auxDataPtr[1] = (jint)receiveLen;
372 _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000373 return (jint)id;
Jason Sams516c3192009-10-06 13:58:47 -0700374}
375
Tim Murraya78e9ad2013-11-15 13:08:30 -0800376static void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
Jason Sams516c3192009-10-06 13:58:47 -0700377{
Tim Murraye926ddd2014-01-07 15:36:19 -0800378 LOG_API("nContextInitToClient, con(%p)", (RsContext)con);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800379 rsContextInitToClient((RsContext)con);
Jason Sams516c3192009-10-06 13:58:47 -0700380}
381
Tim Murraya78e9ad2013-11-15 13:08:30 -0800382static void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
Jason Sams516c3192009-10-06 13:58:47 -0700383{
Tim Murraye926ddd2014-01-07 15:36:19 -0800384 LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800385 rsContextDeinitToClient((RsContext)con);
Jason Sams516c3192009-10-06 13:58:47 -0700386}
387
Jason Sams455d6442013-02-05 19:20:18 -0800388static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800389nContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
Jason Sams455d6442013-02-05 19:20:18 -0800390{
391 jint *ptr = NULL;
392 jint len = 0;
393 if (data) {
394 len = _env->GetArrayLength(data);
Stephen Hines57cf5602013-12-18 16:21:30 -0800395 ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams455d6442013-02-05 19:20:18 -0800396 }
Tim Murraye926ddd2014-01-07 15:36:19 -0800397 LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800398 rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
Jason Sams455d6442013-02-05 19:20:18 -0800399 if (data) {
400 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
401 }
402}
403
404
Jason Sams516c3192009-10-06 13:58:47 -0700405
Tim Murray7a629fa2013-11-19 12:45:54 -0800406static jlong
407nElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700408{
Tim Murraye926ddd2014-01-07 15:36:19 -0800409 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, type, kind, norm, size);
Tim Murray7a629fa2013-11-19 12:45:54 -0800410 return (jlong)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700411}
412
Tim Murray7a629fa2013-11-19 12:45:54 -0800413static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800414nElementCreate2(JNIEnv *_env, jobject _this, jlong con,
Ashok Bhat98071552014-02-12 09:54:43 +0000415 jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700416{
Jason Sams718cd1f2009-12-23 14:35:29 -0800417 int fieldCount = _env->GetArrayLength(_ids);
Tim Murraye926ddd2014-01-07 15:36:19 -0800418 LOG_API("nElementCreate2, con(%p)", (RsContext)con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800419
Ashok Bhat98071552014-02-12 09:54:43 +0000420 jlong *jIds = _env->GetLongArrayElements(_ids, NULL);
421 jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
422
423 RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
424 uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
425
426 for(int i = 0; i < fieldCount; i ++) {
427 ids[i] = (RsElement)jIds[i];
428 arraySizes[i] = (uint32_t)jArraySizes[i];
429 }
Jason Sams718cd1f2009-12-23 14:35:29 -0800430
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800431 AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
432
433 const char **nameArray = names.c_str();
434 size_t *sizeArray = names.c_str_len();
435
Tim Murray7a629fa2013-11-19 12:45:54 -0800436 jlong id = (jlong)rsElementCreate2((RsContext)con,
Ashok Bhat98071552014-02-12 09:54:43 +0000437 (const RsElement *)ids, fieldCount,
Jason Sams7a22e102011-05-06 14:14:30 -0700438 nameArray, fieldCount * sizeof(size_t), sizeArray,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700439 (const uint32_t *)arraySizes, fieldCount);
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800440
Ashok Bhat98071552014-02-12 09:54:43 +0000441 free(ids);
442 free(arraySizes);
443 _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
444 _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
445
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000446 return (jlong)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700447}
448
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700449static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800450nElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700451{
452 int dataSize = _env->GetArrayLength(_elementData);
Tim Murraye926ddd2014-01-07 15:36:19 -0800453 LOG_API("nElementGetNativeData, con(%p)", (RsContext)con);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700454
455 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
456 assert(dataSize == 5);
457
458 uint32_t elementData[5];
Tim Murraya78e9ad2013-11-15 13:08:30 -0800459 rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700460
461 for(jint i = 0; i < dataSize; i ++) {
Ashok Bhat98071552014-02-12 09:54:43 +0000462 const jint data = (jint)elementData[i];
463 _env->SetIntArrayRegion(_elementData, i, 1, &data);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700464 }
465}
466
467
468static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800469nElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
Ashok Bhat98071552014-02-12 09:54:43 +0000470 jlongArray _IDs,
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700471 jobjectArray _names,
472 jintArray _arraySizes)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700473{
Ashok Bhat98071552014-02-12 09:54:43 +0000474 uint32_t dataSize = _env->GetArrayLength(_IDs);
Tim Murraye926ddd2014-01-07 15:36:19 -0800475 LOG_API("nElementGetSubElements, con(%p)", (RsContext)con);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700476
Ashok Bhat98071552014-02-12 09:54:43 +0000477 uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t));
478 const char **names = (const char **)malloc(dataSize * sizeof(const char *));
479 size_t *arraySizes = (size_t *)malloc(dataSize * sizeof(size_t));
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700480
Tim Murraya78e9ad2013-11-15 13:08:30 -0800481 rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700482
Ashok Bhat98071552014-02-12 09:54:43 +0000483 for(uint32_t i = 0; i < dataSize; i++) {
484 const jlong id = (jlong)ids[i];
485 const jint arraySize = (jint)arraySizes[i];
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700486 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
Ashok Bhat98071552014-02-12 09:54:43 +0000487 _env->SetLongArrayRegion(_IDs, i, 1, &id);
488 _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700489 }
490
491 free(ids);
492 free(names);
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700493 free(arraySizes);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700494}
495
Jason Samsd19f10d2009-05-22 14:03:28 -0700496// -----------------------------------
497
Tim Murray7a629fa2013-11-19 12:45:54 -0800498static jlong
499nTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
Jason Samsb109cc72013-01-07 18:20:12 -0800500 jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
Jason Samsd19f10d2009-05-22 14:03:28 -0700501{
Jason Samsb109cc72013-01-07 18:20:12 -0800502 LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
Tim Murraye926ddd2014-01-07 15:36:19 -0800503 (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700504
Tim Murray7a629fa2013-11-19 12:45:54 -0800505 return (jlong)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, faces, yuv);
Jason Samsd19f10d2009-05-22 14:03:28 -0700506}
507
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700508static void
Ashok Bhat98071552014-02-12 09:54:43 +0000509nTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700510{
511 // We are packing 6 items: mDimX; mDimY; mDimZ;
512 // mDimLOD; mDimFaces; mElement; into typeData
513 int elementCount = _env->GetArrayLength(_typeData);
514
515 assert(elementCount == 6);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000516 LOG_API("nTypeGetNativeData, con(%p)", (RsContext)con);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700517
Ashok Bhat98071552014-02-12 09:54:43 +0000518 uintptr_t typeData[6];
Tim Murraya78e9ad2013-11-15 13:08:30 -0800519 rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700520
521 for(jint i = 0; i < elementCount; i ++) {
Ashok Bhat98071552014-02-12 09:54:43 +0000522 const jlong data = (jlong)typeData[i];
523 _env->SetLongArrayRegion(_typeData, i, 1, &data);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700524 }
525}
526
Jason Samsd19f10d2009-05-22 14:03:28 -0700527// -----------------------------------
528
Tim Murray7a629fa2013-11-19 12:45:54 -0800529static jlong
Ashok Bhat98071552014-02-12 09:54:43 +0000530nAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, jlong pointer)
Jason Samsd19f10d2009-05-22 14:03:28 -0700531{
Tim Murraye926ddd2014-01-07 15:36:19 -0800532 LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
Ashok Bhat98071552014-02-12 09:54:43 +0000533 return (jlong) rsAllocationCreateTyped((RsContext)con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uintptr_t)pointer);
Jason Samsd19f10d2009-05-22 14:03:28 -0700534}
535
Jason Samsd19f10d2009-05-22 14:03:28 -0700536static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800537nAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
Jason Sams5476b452010-12-08 16:14:36 -0800538{
Tim Murraye926ddd2014-01-07 15:36:19 -0800539 LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800540 rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
Jason Sams5476b452010-12-08 16:14:36 -0800541}
542
Jason Sams72226e02013-02-22 12:45:54 -0800543static jobject
Tim Murray7a629fa2013-11-19 12:45:54 -0800544nAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a)
Jason Sams615e7ce2012-01-13 14:01:20 -0800545{
Tim Murraye926ddd2014-01-07 15:36:19 -0800546 LOG_API("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
Jason Sams615e7ce2012-01-13 14:01:20 -0800547
Tim Murraya78e9ad2013-11-15 13:08:30 -0800548 IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, (RsAllocation)a);
Jason Sams72226e02013-02-22 12:45:54 -0800549 sp<IGraphicBufferProducer> bp = v;
550 v->decStrong(NULL);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700551
Jason Sams72226e02013-02-22 12:45:54 -0800552 jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp);
553 return o;
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700554}
555
556static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800557nAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
Jason Sams163766c2012-02-15 12:04:24 -0800558{
Stephen Hines06883b72012-05-16 18:01:34 -0700559 LOG_API("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)",
Tim Murraye926ddd2014-01-07 15:36:19 -0800560 (RsContext)con, (RsAllocation)alloc, (Surface *)sur);
Jason Sams163766c2012-02-15 12:04:24 -0800561
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700562 sp<Surface> s;
Jason Sams163766c2012-02-15 12:04:24 -0800563 if (sur != 0) {
Jeff Brown64a55af2012-08-26 02:47:39 -0700564 s = android_view_Surface_getSurface(_env, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800565 }
566
Tim Murray7a629fa2013-11-19 12:45:54 -0800567 rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, static_cast<ANativeWindow *>(s.get()));
Jason Sams163766c2012-02-15 12:04:24 -0800568}
569
570static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800571nAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
Jason Sams163766c2012-02-15 12:04:24 -0800572{
Tim Murraye926ddd2014-01-07 15:36:19 -0800573 LOG_API("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, alloc);
Tim Murray7a629fa2013-11-19 12:45:54 -0800574 rsAllocationIoSend((RsContext)con, (RsAllocation)alloc);
Jason Sams163766c2012-02-15 12:04:24 -0800575}
576
577static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800578nAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
Jason Sams163766c2012-02-15 12:04:24 -0800579{
Tim Murraye926ddd2014-01-07 15:36:19 -0800580 LOG_API("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, alloc);
Tim Murray7a629fa2013-11-19 12:45:54 -0800581 rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc);
Jason Sams163766c2012-02-15 12:04:24 -0800582}
583
584
585static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800586nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
Jason Samsf7086092011-01-12 13:28:37 -0800587{
Tim Murraye926ddd2014-01-07 15:36:19 -0800588 LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800589 rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
Jason Samsf7086092011-01-12 13:28:37 -0800590}
591
Tim Murray7a629fa2013-11-19 12:45:54 -0800592static jlong
593nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
Jason Samsffe9f482009-06-01 17:45:53 -0700594{
Jason Samsffe9f482009-06-01 17:45:53 -0700595 SkBitmap const * nativeBitmap =
Ashok Bhata0398432014-01-20 20:08:01 +0000596 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Jason Samsffe9f482009-06-01 17:45:53 -0700597 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsffe9f482009-06-01 17:45:53 -0700598
Jason Sams5476b452010-12-08 16:14:36 -0800599 bitmap.lockPixels();
600 const void* ptr = bitmap.getPixels();
Tim Murray7a629fa2013-11-19 12:45:54 -0800601 jlong id = (jlong)rsAllocationCreateFromBitmap((RsContext)con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700602 (RsType)type, (RsAllocationMipmapControl)mip,
603 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800604 bitmap.unlockPixels();
605 return id;
Jason Samsffe9f482009-06-01 17:45:53 -0700606}
Jason Samsfe08d992009-05-27 14:45:32 -0700607
Tim Murray7a629fa2013-11-19 12:45:54 -0800608static jlong
609nAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
Tim Murraya3145512012-12-04 17:59:29 -0800610{
611 SkBitmap const * nativeBitmap =
Ashok Bhata0398432014-01-20 20:08:01 +0000612 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Tim Murraya3145512012-12-04 17:59:29 -0800613 const SkBitmap& bitmap(*nativeBitmap);
614
615 bitmap.lockPixels();
616 const void* ptr = bitmap.getPixels();
Tim Murray7a629fa2013-11-19 12:45:54 -0800617 jlong id = (jlong)rsAllocationCreateTyped((RsContext)con,
Tim Murraya3145512012-12-04 17:59:29 -0800618 (RsType)type, (RsAllocationMipmapControl)mip,
Ashok Bhat98071552014-02-12 09:54:43 +0000619 (uint32_t)usage, (uintptr_t)ptr);
Tim Murraya3145512012-12-04 17:59:29 -0800620 bitmap.unlockPixels();
621 return id;
622}
623
Tim Murray7a629fa2013-11-19 12:45:54 -0800624static jlong
625nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800626{
627 SkBitmap const * nativeBitmap =
Ashok Bhata0398432014-01-20 20:08:01 +0000628 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800629 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800630
Jason Sams5476b452010-12-08 16:14:36 -0800631 bitmap.lockPixels();
632 const void* ptr = bitmap.getPixels();
Tim Murray7a629fa2013-11-19 12:45:54 -0800633 jlong id = (jlong)rsAllocationCubeCreateFromBitmap((RsContext)con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700634 (RsType)type, (RsAllocationMipmapControl)mip,
635 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800636 bitmap.unlockPixels();
637 return id;
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800638}
639
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700640static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800641nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700642{
643 SkBitmap const * nativeBitmap =
Ashok Bhata0398432014-01-20 20:08:01 +0000644 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700645 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsf7086092011-01-12 13:28:37 -0800646 int w = bitmap.width();
647 int h = bitmap.height();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700648
Jason Sams4ef66502010-12-10 16:03:15 -0800649 bitmap.lockPixels();
650 const void* ptr = bitmap.getPixels();
Tim Murraya78e9ad2013-11-15 13:08:30 -0800651 rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700652 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
Tim Murray38faea302012-11-27 14:55:08 -0800653 w, h, ptr, bitmap.getSize(), 0);
Jason Sams4ef66502010-12-10 16:03:15 -0800654 bitmap.unlockPixels();
655}
656
657static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800658nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
Jason Sams4ef66502010-12-10 16:03:15 -0800659{
660 SkBitmap const * nativeBitmap =
Ashok Bhata0398432014-01-20 20:08:01 +0000661 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Jason Sams4ef66502010-12-10 16:03:15 -0800662 const SkBitmap& bitmap(*nativeBitmap);
663
664 bitmap.lockPixels();
665 void* ptr = bitmap.getPixels();
Tim Murraya78e9ad2013-11-15 13:08:30 -0800666 rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize());
Jason Sams4ef66502010-12-10 16:03:15 -0800667 bitmap.unlockPixels();
Alex Sakhartchouk835b8542011-07-20 14:33:10 -0700668 bitmap.notifyPixelsChanged();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700669}
670
Jason Sams8a647432010-03-01 15:31:04 -0800671static void ReleaseBitmapCallback(void *bmp)
672{
673 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
674 nativeBitmap->unlockPixels();
675}
676
Romain Guy650a3eb2009-08-31 14:06:43 -0700677
Jason Samsd19f10d2009-05-22 14:03:28 -0700678static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800679nAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000680 jint count, jobject data, jint sizeBytes, jint dataType)
Jason Samsd19f10d2009-05-22 14:03:28 -0700681{
Jason Sams6fcf2e12013-11-06 11:22:02 -0800682 RsAllocation *alloc = (RsAllocation *)_alloc;
Tim Murraye926ddd2014-01-07 15:36:19 -0800683 LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
684 (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, dataType);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800685 PER_ARRAY_TYPE(NULL, rsAllocation1DData, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700686}
687
688static void
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000689// native void rsnAllocationElementData1D(long con, long id, int xoff, int compIdx, byte[] d, int sizeBytes);
690nAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod, jint compIdx, jbyteArray data, jint sizeBytes)
Jason Sams49bdaf02010-08-31 13:50:42 -0700691{
692 jint len = _env->GetArrayLength(data);
Tim Murraye926ddd2014-01-07 15:36:19 -0800693 LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
Jason Sams49bdaf02010-08-31 13:50:42 -0700694 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800695 rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
Jason Sams49bdaf02010-08-31 13:50:42 -0700696 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
697}
698
699static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800700nAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000701 jint w, jint h, jobject data, jint sizeBytes, jint dataType)
Jason Samsfb9f82c2011-01-12 14:53:25 -0800702{
Jason Sams6fcf2e12013-11-06 11:22:02 -0800703 RsAllocation *alloc = (RsAllocation *)_alloc;
704 RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
705 LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
Tim Murraye926ddd2014-01-07 15:36:19 -0800706 (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800707 PER_ARRAY_TYPE(NULL, rsAllocation2DData, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
Jason Samsd19f10d2009-05-22 14:03:28 -0700708}
709
Jason Sams40a29e82009-08-10 14:55:26 -0700710static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800711nAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -0800712 jlong dstAlloc, jint dstXoff, jint dstYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700713 jint dstMip, jint dstFace,
714 jint width, jint height,
Tim Murray7a629fa2013-11-19 12:45:54 -0800715 jlong srcAlloc, jint srcXoff, jint srcYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700716 jint srcMip, jint srcFace)
717{
Jason Sams4c2e4c82012-02-07 15:32:08 -0800718 LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700719 " dstMip(%i), dstFace(%i), width(%i), height(%i),"
720 " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
Tim Murraye926ddd2014-01-07 15:36:19 -0800721 (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700722 width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
723
Tim Murraya78e9ad2013-11-15 13:08:30 -0800724 rsAllocationCopy2DRange((RsContext)con,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700725 (RsAllocation)dstAlloc,
726 dstXoff, dstYoff,
727 dstMip, dstFace,
728 width, height,
729 (RsAllocation)srcAlloc,
730 srcXoff, srcYoff,
731 srcMip, srcFace);
732}
733
734static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800735nAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
Jason Sams6fcf2e12013-11-06 11:22:02 -0800736 jint w, jint h, jint d, jobject data, int sizeBytes, int dataType)
Jason Samsb05d6892013-04-09 15:59:24 -0700737{
Jason Sams6fcf2e12013-11-06 11:22:02 -0800738 RsAllocation *alloc = (RsAllocation *)_alloc;
739 LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i), h(%i), d(%i), sizeBytes(%i)",
Tim Murraye926ddd2014-01-07 15:36:19 -0800740 (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, sizeBytes);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800741 PER_ARRAY_TYPE(NULL, rsAllocation3DData, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
Jason Samsb05d6892013-04-09 15:59:24 -0700742}
743
744static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800745nAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -0800746 jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700747 jint dstMip,
748 jint width, jint height, jint depth,
Tim Murray7a629fa2013-11-19 12:45:54 -0800749 jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700750 jint srcMip)
751{
752 LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
753 " dstMip(%i), width(%i), height(%i),"
754 " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
Tim Murraye926ddd2014-01-07 15:36:19 -0800755 (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip,
756 width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip);
Jason Samsb05d6892013-04-09 15:59:24 -0700757
Tim Murraya78e9ad2013-11-15 13:08:30 -0800758 rsAllocationCopy3DRange((RsContext)con,
Jason Samsb05d6892013-04-09 15:59:24 -0700759 (RsAllocation)dstAlloc,
760 dstXoff, dstYoff, dstZoff, dstMip,
761 width, height, depth,
762 (RsAllocation)srcAlloc,
763 srcXoff, srcYoff, srcZoff, srcMip);
764}
765
Jason Sams29868dfa2013-11-06 15:08:07 -0800766
Jason Samsb05d6892013-04-09 15:59:24 -0700767static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800768nAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType)
Jason Sams40a29e82009-08-10 14:55:26 -0700769{
Jason Sams29868dfa2013-11-06 15:08:07 -0800770 RsAllocation *alloc = (RsAllocation *)_alloc;
Tim Murraye926ddd2014-01-07 15:36:19 -0800771 LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800772 PER_ARRAY_TYPE(0, rsAllocationRead, (RsContext)con, alloc, ptr, len * typeBytes);
Jason Sams40a29e82009-08-10 14:55:26 -0700773}
774
775static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800776nAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
Jason Sams29868dfa2013-11-06 15:08:07 -0800777 jint count, jobject data, int sizeBytes, int dataType)
Jason Samsfb9f82c2011-01-12 14:53:25 -0800778{
Jason Sams29868dfa2013-11-06 15:08:07 -0800779 RsAllocation *alloc = (RsAllocation *)_alloc;
Tim Murraye926ddd2014-01-07 15:36:19 -0800780 LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
781 (RsContext)con, alloc, offset, count, sizeBytes, dataType);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800782 PER_ARRAY_TYPE(0, rsAllocation1DRead, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsfb9f82c2011-01-12 14:53:25 -0800783}
784
785static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800786nAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
Jason Sams29868dfa2013-11-06 15:08:07 -0800787 jint w, jint h, jobject data, int sizeBytes, int dataType)
Jason Samsfb9f82c2011-01-12 14:53:25 -0800788{
Jason Sams29868dfa2013-11-06 15:08:07 -0800789 RsAllocation *alloc = (RsAllocation *)_alloc;
790 RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
791 LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
Tim Murraye926ddd2014-01-07 15:36:19 -0800792 (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800793 PER_ARRAY_TYPE(0, rsAllocation2DRead, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700794}
Jason Samsd19f10d2009-05-22 14:03:28 -0700795
Tim Murray7a629fa2013-11-19 12:45:54 -0800796static jlong
797nAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700798{
Tim Murraye926ddd2014-01-07 15:36:19 -0800799 LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
Tim Murray7a629fa2013-11-19 12:45:54 -0800800 return (jlong) rsaAllocationGetType((RsContext)con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700801}
802
Jason Sams5edc6082010-10-05 13:32:49 -0700803static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800804nAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
Jason Sams5edc6082010-10-05 13:32:49 -0700805{
Tim Murraye926ddd2014-01-07 15:36:19 -0800806 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, (RsAllocation)alloc, dimX);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800807 rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
Jason Sams5edc6082010-10-05 13:32:49 -0700808}
809
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700810// -----------------------------------
811
Tim Murray7a629fa2013-11-19 12:45:54 -0800812static jlong
813nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700814{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700815 Asset* asset = reinterpret_cast<Asset*>(native_asset);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000816 ALOGV("______nFileA3D %p", asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700817
Tim Murray7a629fa2013-11-19 12:45:54 -0800818 jlong id = (jlong)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800819 return id;
820}
821
Tim Murray7a629fa2013-11-19 12:45:54 -0800822static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800823nFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800824{
825 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
826 if (mgr == NULL) {
827 return 0;
828 }
829
830 AutoJavaStringToUTF8 str(_env, _path);
831 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
832 if (asset == NULL) {
833 return 0;
834 }
835
Tim Murray7a629fa2013-11-19 12:45:54 -0800836 jlong id = (jlong)rsaFileA3DCreateFromAsset((RsContext)con, asset);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800837 return id;
838}
839
Tim Murray7a629fa2013-11-19 12:45:54 -0800840static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800841nFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800842{
843 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Tim Murray7a629fa2013-11-19 12:45:54 -0800844 jlong id = (jlong)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800845
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700846 return id;
847}
848
Tim Murray7a629fa2013-11-19 12:45:54 -0800849static jint
850nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700851{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700852 int32_t numEntries = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800853 rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000854 return (jint)numEntries;
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700855}
856
857static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800858nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700859{
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000860 ALOGV("______nFileA3D %p", (RsFile) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700861 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
862
Tim Murraya78e9ad2013-11-15 13:08:30 -0800863 rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700864
865 for(jint i = 0; i < numEntries; i ++) {
866 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
867 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
868 }
869
870 free(fileEntries);
871}
872
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000873static jlong
Tim Murray7a629fa2013-11-19 12:45:54 -0800874nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700875{
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000876 ALOGV("______nFileA3D %p", (RsFile) fileA3D);
877 jlong id = (jlong)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700878 return id;
879}
Jason Samsd19f10d2009-05-22 14:03:28 -0700880
881// -----------------------------------
882
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000883static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800884nFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800885 jstring fileName, jfloat fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700886{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800887 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000888 jlong id = (jlong)rsFontCreateFromFile((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700889 fileNameUTF.c_str(), fileNameUTF.length(),
890 fontSize, dpi);
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700891
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800892 return id;
893}
894
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000895static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800896nFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000897 jstring name, jfloat fontSize, jint dpi, jlong native_asset)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800898{
899 Asset* asset = reinterpret_cast<Asset*>(native_asset);
900 AutoJavaStringToUTF8 nameUTF(_env, name);
901
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000902 jlong id = (jlong)rsFontCreateFromMemory((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700903 nameUTF.c_str(), nameUTF.length(),
904 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800905 asset->getBuffer(false), asset->getLength());
906 return id;
907}
908
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000909static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800910nFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800911 jfloat fontSize, jint dpi)
912{
913 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
914 if (mgr == NULL) {
915 return 0;
916 }
917
918 AutoJavaStringToUTF8 str(_env, _path);
919 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
920 if (asset == NULL) {
921 return 0;
922 }
923
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000924 jlong id = (jlong)rsFontCreateFromMemory((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700925 str.c_str(), str.length(),
926 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800927 asset->getBuffer(false), asset->getLength());
928 delete asset;
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700929 return id;
930}
931
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700932// -----------------------------------
933
934static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800935nScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700936{
Tim Murraye926ddd2014-01-07 15:36:19 -0800937 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800938 rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700939}
940
941static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800942nScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700943{
Tim Murraye926ddd2014-01-07 15:36:19 -0800944 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800945 rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700946}
947
Tim Murray7c4caad2013-04-10 16:21:40 -0700948static jint
Tim Murray7a629fa2013-11-19 12:45:54 -0800949nScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700950{
Tim Murraye926ddd2014-01-07 15:36:19 -0800951 LOG_API("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700952 int value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800953 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700954 return value;
955}
956
Jason Sams4d339932010-05-11 14:03:58 -0700957static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800958nScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800959{
Tim Murraye926ddd2014-01-07 15:36:19 -0800960 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800961 rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800962}
963
964static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800965nScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
Stephen Hines031ec58c2010-10-11 10:54:21 -0700966{
Tim Murraye926ddd2014-01-07 15:36:19 -0800967 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800968 rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
Stephen Hines031ec58c2010-10-11 10:54:21 -0700969}
970
Tim Murray7c4caad2013-04-10 16:21:40 -0700971static jlong
Tim Murray7a629fa2013-11-19 12:45:54 -0800972nScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700973{
Tim Murraye926ddd2014-01-07 15:36:19 -0800974 LOG_API("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700975 jlong value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800976 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700977 return value;
978}
979
Stephen Hines031ec58c2010-10-11 10:54:21 -0700980static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800981nScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700982{
Tim Murraye926ddd2014-01-07 15:36:19 -0800983 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800984 rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700985}
986
Tim Murray7c4caad2013-04-10 16:21:40 -0700987static jfloat
Tim Murray7a629fa2013-11-19 12:45:54 -0800988nScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700989{
Tim Murraye926ddd2014-01-07 15:36:19 -0800990 LOG_API("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700991 jfloat value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800992 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700993 return value;
994}
995
Jason Sams4d339932010-05-11 14:03:58 -0700996static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800997nScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
Stephen Hinesca54ec32010-09-20 17:20:30 -0700998{
Tim Murraye926ddd2014-01-07 15:36:19 -0800999 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001000 rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
Stephen Hinesca54ec32010-09-20 17:20:30 -07001001}
1002
Tim Murray7c4caad2013-04-10 16:21:40 -07001003static jdouble
Tim Murray7a629fa2013-11-19 12:45:54 -08001004nScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -07001005{
Tim Murraye926ddd2014-01-07 15:36:19 -08001006 LOG_API("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -07001007 jdouble value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001008 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -07001009 return value;
1010}
1011
Stephen Hinesca54ec32010-09-20 17:20:30 -07001012static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001013nScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -07001014{
Tim Murraye926ddd2014-01-07 15:36:19 -08001015 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Jason Sams4d339932010-05-11 14:03:58 -07001016 jint len = _env->GetArrayLength(data);
1017 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001018 rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
Jason Sams4d339932010-05-11 14:03:58 -07001019 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1020}
1021
Stephen Hinesadeb8092012-04-20 14:26:06 -07001022static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001023nScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Tim Murray7c4caad2013-04-10 16:21:40 -07001024{
Tim Murraye926ddd2014-01-07 15:36:19 -08001025 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -07001026 jint len = _env->GetArrayLength(data);
1027 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001028 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
Tim Murray7c4caad2013-04-10 16:21:40 -07001029 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1030}
1031
1032static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001033nScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jlong elem, jintArray dims)
Stephen Hinesadeb8092012-04-20 14:26:06 -07001034{
Tim Murraye926ddd2014-01-07 15:36:19 -08001035 LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Stephen Hinesadeb8092012-04-20 14:26:06 -07001036 jint len = _env->GetArrayLength(data);
1037 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1038 jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1039 jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001040 rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
Stephen Hinesadeb8092012-04-20 14:26:06 -07001041 (const size_t*) dimsPtr, dimsLen);
1042 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1043 _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1044}
1045
Jason Samsd19f10d2009-05-22 14:03:28 -07001046
1047static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001048nScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -07001049{
Tim Murraye926ddd2014-01-07 15:36:19 -08001050 LOG_API("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
Romain Guy584a3752009-07-30 18:45:01 -07001051
1052 jint length = _env->GetArrayLength(timeZone);
1053 jbyte* timeZone_ptr;
1054 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1055
Tim Murraya78e9ad2013-11-15 13:08:30 -08001056 rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -07001057
1058 if (timeZone_ptr) {
1059 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1060 }
1061}
1062
Jason Samsfbf0b9e2009-08-13 12:59:04 -07001063static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001064nScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -07001065{
Tim Murraye926ddd2014-01-07 15:36:19 -08001066 LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001067 rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
Jason Samsbe2e8412009-09-16 15:04:38 -07001068}
1069
1070static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001071nScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -07001072{
Tim Murraye926ddd2014-01-07 15:36:19 -08001073 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Jason Sams4d339932010-05-11 14:03:58 -07001074 jint len = _env->GetArrayLength(data);
1075 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001076 rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
Jason Sams4d339932010-05-11 14:03:58 -07001077 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1078}
1079
Jason Sams6e494d32011-04-27 16:33:11 -07001080static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001081nScriptForEach(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001082 jlong script, jint slot, jlong ain, jlong aout)
Jason Sams6e494d32011-04-27 16:33:11 -07001083{
Tim Murraye926ddd2014-01-07 15:36:19 -08001084 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001085 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, NULL, 0);
Jason Sams6e494d32011-04-27 16:33:11 -07001086}
1087static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001088nScriptForEachV(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001089 jlong script, jint slot, jlong ain, jlong aout, jbyteArray params)
Jason Sams6e494d32011-04-27 16:33:11 -07001090{
Tim Murraye926ddd2014-01-07 15:36:19 -08001091 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Jason Sams6e494d32011-04-27 16:33:11 -07001092 jint len = _env->GetArrayLength(params);
1093 jbyte *ptr = _env->GetByteArrayElements(params, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001094 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, NULL, 0);
Jason Sams6e494d32011-04-27 16:33:11 -07001095 _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1096}
1097
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001098static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001099nScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001100 jlong script, jint slot, jlong ain, jlong aout,
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001101 jint xstart, jint xend,
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001102 jint ystart, jint yend, jint zstart, jint zend)
1103{
Tim Murraye926ddd2014-01-07 15:36:19 -08001104 LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001105 RsScriptCall sc;
1106 sc.xStart = xstart;
1107 sc.xEnd = xend;
1108 sc.yStart = ystart;
1109 sc.yEnd = yend;
1110 sc.zStart = zstart;
1111 sc.zEnd = zend;
1112 sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1113 sc.arrayStart = 0;
1114 sc.arrayEnd = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001115 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, &sc, sizeof(sc));
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001116}
1117
1118static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001119nScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001120 jlong script, jint slot, jlong ain, jlong aout,
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001121 jbyteArray params, jint xstart, jint xend,
1122 jint ystart, jint yend, jint zstart, jint zend)
1123{
Tim Murraye926ddd2014-01-07 15:36:19 -08001124 LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001125 jint len = _env->GetArrayLength(params);
1126 jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1127 RsScriptCall sc;
1128 sc.xStart = xstart;
1129 sc.xEnd = xend;
1130 sc.yStart = ystart;
1131 sc.yEnd = yend;
1132 sc.zStart = zstart;
1133 sc.zEnd = zend;
1134 sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1135 sc.arrayStart = 0;
1136 sc.arrayEnd = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001137 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, &sc, sizeof(sc));
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001138 _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1139}
Jason Samsfbf0b9e2009-08-13 12:59:04 -07001140
Jason Sams22534172009-08-04 16:58:20 -07001141// -----------------------------------
1142
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001143static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001144nScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
Jason Samse4a06c52011-03-16 16:29:28 -07001145 jstring resName, jstring cacheDir,
1146 jbyteArray scriptRef, jint length)
Jason Sams22534172009-08-04 16:58:20 -07001147{
Tim Murraye926ddd2014-01-07 15:36:19 -08001148 LOG_API("nScriptCCreate, con(%p)", (RsContext)con);
Jason Sams22534172009-08-04 16:58:20 -07001149
Jason Samse4a06c52011-03-16 16:29:28 -07001150 AutoJavaStringToUTF8 resNameUTF(_env, resName);
1151 AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001152 jlong ret = 0;
Elliott Hughes8451b252011-04-07 19:17:57 -07001153 jbyte* script_ptr = NULL;
Jack Palevich43702d82009-05-28 13:38:16 -07001154 jint _exception = 0;
1155 jint remaining;
Jack Palevich43702d82009-05-28 13:38:16 -07001156 if (!scriptRef) {
1157 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001158 //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
Jack Palevich43702d82009-05-28 13:38:16 -07001159 goto exit;
1160 }
Jack Palevich43702d82009-05-28 13:38:16 -07001161 if (length < 0) {
1162 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001163 //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
Jack Palevich43702d82009-05-28 13:38:16 -07001164 goto exit;
1165 }
Jason Samse4a06c52011-03-16 16:29:28 -07001166 remaining = _env->GetArrayLength(scriptRef);
Jack Palevich43702d82009-05-28 13:38:16 -07001167 if (remaining < length) {
1168 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001169 //jniThrowException(_env, "java/lang/IllegalArgumentException",
1170 // "length > script.length - offset");
Jack Palevich43702d82009-05-28 13:38:16 -07001171 goto exit;
1172 }
Jason Samse4a06c52011-03-16 16:29:28 -07001173 script_ptr = (jbyte *)
Jack Palevich43702d82009-05-28 13:38:16 -07001174 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
Jack Palevich43702d82009-05-28 13:38:16 -07001175
Tim Murraya78e9ad2013-11-15 13:08:30 -08001176 //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
Jason Samse4a06c52011-03-16 16:29:28 -07001177
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001178 ret = (jlong)rsScriptCCreate((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -07001179 resNameUTF.c_str(), resNameUTF.length(),
1180 cacheDirUTF.c_str(), cacheDirUTF.length(),
Jason Samse4a06c52011-03-16 16:29:28 -07001181 (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -07001182
Jack Palevich43702d82009-05-28 13:38:16 -07001183exit:
Jason Samse4a06c52011-03-16 16:29:28 -07001184 if (script_ptr) {
1185 _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
Jack Palevich43702d82009-05-28 13:38:16 -07001186 _exception ? JNI_ABORT: 0);
1187 }
Jason Samsd19f10d2009-05-22 14:03:28 -07001188
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001189 return (jlong)ret;
Jason Samsd19f10d2009-05-22 14:03:28 -07001190}
1191
Tim Murray7a629fa2013-11-19 12:45:54 -08001192static jlong
1193nScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
Jason Sams6ab97682012-08-10 12:09:43 -07001194{
Tim Murraye926ddd2014-01-07 15:36:19 -08001195 LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid);
Tim Murray7a629fa2013-11-19 12:45:54 -08001196 return (jlong)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
Jason Sams6ab97682012-08-10 12:09:43 -07001197}
1198
Tim Murray7a629fa2013-11-19 12:45:54 -08001199static jlong
1200nScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
Jason Sams08a81582012-09-18 12:32:10 -07001201{
Tim Murraye926ddd2014-01-07 15:36:19 -08001202 LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, (void *)sid, slot, sig);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001203 return (jlong)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
Jason Sams08a81582012-09-18 12:32:10 -07001204}
1205
Tim Murray7a629fa2013-11-19 12:45:54 -08001206static jlong
1207nScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
Jason Sams08a81582012-09-18 12:32:10 -07001208{
Tim Murraye926ddd2014-01-07 15:36:19 -08001209 LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001210 return (jlong)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
Jason Sams08a81582012-09-18 12:32:10 -07001211}
1212
Tim Murray7a629fa2013-11-19 12:45:54 -08001213static jlong
Ashok Bhat98071552014-02-12 09:54:43 +00001214nScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
1215 jlongArray _dstk, jlongArray _dstf, jlongArray _types)
Jason Sams08a81582012-09-18 12:32:10 -07001216{
Tim Murraye926ddd2014-01-07 15:36:19 -08001217 LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con);
Jason Sams08a81582012-09-18 12:32:10 -07001218
Ashok Bhat98071552014-02-12 09:54:43 +00001219 jint kernelsLen = _env->GetArrayLength(_kernels);
1220 jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, NULL);
1221 RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
1222 for(int i = 0; i < kernelsLen; ++i) {
1223 kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
1224 }
Jason Sams08a81582012-09-18 12:32:10 -07001225
Ashok Bhat98071552014-02-12 09:54:43 +00001226 jint srcLen = _env->GetArrayLength(_src);
1227 jlong *jSrcPtr = _env->GetLongArrayElements(_src, NULL);
1228 RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
1229 for(int i = 0; i < srcLen; ++i) {
1230 srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
1231 }
Jason Sams08a81582012-09-18 12:32:10 -07001232
Ashok Bhat98071552014-02-12 09:54:43 +00001233 jint dstkLen = _env->GetArrayLength(_dstk);
1234 jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, NULL);
1235 RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
1236 for(int i = 0; i < dstkLen; ++i) {
1237 dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
1238 }
1239
1240 jint dstfLen = _env->GetArrayLength(_dstf);
1241 jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, NULL);
1242 RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
1243 for(int i = 0; i < dstfLen; ++i) {
1244 dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
1245 }
1246
1247 jint typesLen = _env->GetArrayLength(_types);
1248 jlong *jTypesPtr = _env->GetLongArrayElements(_types, NULL);
1249 RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
1250 for(int i = 0; i < typesLen; ++i) {
1251 typesPtr[i] = (RsType)jTypesPtr[i];
1252 }
1253
1254 jlong id = (jlong)rsScriptGroupCreate((RsContext)con,
1255 (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
1256 (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
1257 (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
1258 (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
1259 (RsType *)typesPtr, typesLen * sizeof(RsType));
1260
1261 free(kernelsPtr);
1262 free(srcPtr);
1263 free(dstkPtr);
1264 free(dstfPtr);
1265 free(typesPtr);
1266 _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
1267 _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
1268 _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
1269 _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
1270 _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
Jason Sams08a81582012-09-18 12:32:10 -07001271 return id;
1272}
1273
1274static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001275nScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
Jason Sams08a81582012-09-18 12:32:10 -07001276{
Tim Murraye926ddd2014-01-07 15:36:19 -08001277 LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
Jason Sams08a81582012-09-18 12:32:10 -07001278 (void *)gid, (void *)kid, (void *)alloc);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001279 rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
Jason Sams08a81582012-09-18 12:32:10 -07001280}
1281
1282static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001283nScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
Jason Sams08a81582012-09-18 12:32:10 -07001284{
Tim Murraye926ddd2014-01-07 15:36:19 -08001285 LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
Jason Sams08a81582012-09-18 12:32:10 -07001286 (void *)gid, (void *)kid, (void *)alloc);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001287 rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
Jason Sams08a81582012-09-18 12:32:10 -07001288}
1289
1290static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001291nScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
Jason Sams08a81582012-09-18 12:32:10 -07001292{
Tim Murraye926ddd2014-01-07 15:36:19 -08001293 LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001294 rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
Jason Sams08a81582012-09-18 12:32:10 -07001295}
1296
Jason Samsd19f10d2009-05-22 14:03:28 -07001297// ---------------------------------------------------------------------------
1298
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001299static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001300nProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
Jason Sams331bf9b2011-04-06 11:23:54 -07001301 jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1302 jboolean depthMask, jboolean ditherEnable,
1303 jint srcFunc, jint destFunc,
1304 jint depthFunc)
Jason Samsd19f10d2009-05-22 14:03:28 -07001305{
Tim Murraye926ddd2014-01-07 15:36:19 -08001306 LOG_API("nProgramStoreCreate, con(%p)", (RsContext)con);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001307 return (jlong)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
Jason Sams331bf9b2011-04-06 11:23:54 -07001308 depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1309 (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
Jason Samsd19f10d2009-05-22 14:03:28 -07001310}
1311
Jason Sams0011bcf2009-12-15 12:58:36 -08001312// ---------------------------------------------------------------------------
1313
1314static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001315nProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001316{
Tim Murraye926ddd2014-01-07 15:36:19 -08001317 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001318 rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
Jason Sams0011bcf2009-12-15 12:58:36 -08001319}
Jason Sams54c0ec12009-11-30 14:49:55 -08001320
Jason Sams68afd012009-12-17 16:55:08 -08001321static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001322nProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
Jason Sams68afd012009-12-17 16:55:08 -08001323{
Tim Murraye926ddd2014-01-07 15:36:19 -08001324 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001325 rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
Jason Sams68afd012009-12-17 16:55:08 -08001326}
1327
1328static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001329nProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
Jason Sams68afd012009-12-17 16:55:08 -08001330{
Tim Murraye926ddd2014-01-07 15:36:19 -08001331 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001332 rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
Jason Sams68afd012009-12-17 16:55:08 -08001333}
1334
Jason Samsd19f10d2009-05-22 14:03:28 -07001335// ---------------------------------------------------------------------------
1336
Tim Murray7a629fa2013-11-19 12:45:54 -08001337static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001338nProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
Ashok Bhat98071552014-02-12 09:54:43 +00001339 jobjectArray texNames, jlongArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001340{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001341 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Ashok Bhat98071552014-02-12 09:54:43 +00001342 jlong *jParamPtr = _env->GetLongArrayElements(params, NULL);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001343 jint paramLen = _env->GetArrayLength(params);
1344
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001345 int texCount = _env->GetArrayLength(texNames);
1346 AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
1347 const char ** nameArray = names.c_str();
1348 size_t* sizeArray = names.c_str_len();
1349
Tim Murraye926ddd2014-01-07 15:36:19 -08001350 LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001351
Ashok Bhat98071552014-02-12 09:54:43 +00001352 uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
1353 for(int i = 0; i < paramLen; ++i) {
1354 paramPtr[i] = (uintptr_t)jParamPtr[i];
1355 }
Tim Murray7a629fa2013-11-19 12:45:54 -08001356 jlong ret = (jlong)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001357 nameArray, texCount, sizeArray,
Ashok Bhat98071552014-02-12 09:54:43 +00001358 paramPtr, paramLen);
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001359
Ashok Bhat98071552014-02-12 09:54:43 +00001360 free(paramPtr);
1361 _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001362 return ret;
1363}
1364
1365
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001366// ---------------------------------------------------------------------------
1367
Tim Murray7a629fa2013-11-19 12:45:54 -08001368static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001369nProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
Ashok Bhat98071552014-02-12 09:54:43 +00001370 jobjectArray texNames, jlongArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001371{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001372 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Ashok Bhat98071552014-02-12 09:54:43 +00001373 jlong *jParamPtr = _env->GetLongArrayElements(params, NULL);
Jason Sams0011bcf2009-12-15 12:58:36 -08001374 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001375
Tim Murraye926ddd2014-01-07 15:36:19 -08001376 LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001377
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001378 int texCount = _env->GetArrayLength(texNames);
1379 AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
1380 const char ** nameArray = names.c_str();
1381 size_t* sizeArray = names.c_str_len();
1382
Ashok Bhat98071552014-02-12 09:54:43 +00001383 uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
1384 for(int i = 0; i < paramLen; ++i) {
1385 paramPtr[i] = (uintptr_t)jParamPtr[i];
1386 }
1387
Tim Murray7a629fa2013-11-19 12:45:54 -08001388 jlong ret = (jlong)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001389 nameArray, texCount, sizeArray,
Ashok Bhat98071552014-02-12 09:54:43 +00001390 paramPtr, paramLen);
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001391
Ashok Bhat98071552014-02-12 09:54:43 +00001392 free(paramPtr);
1393 _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
Jason Sams0011bcf2009-12-15 12:58:36 -08001394 return ret;
1395}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001396
Jason Samsebfb4362009-09-23 13:57:02 -07001397// ---------------------------------------------------------------------------
1398
Tim Murray7a629fa2013-11-19 12:45:54 -08001399static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001400nProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
Jason Samsebfb4362009-09-23 13:57:02 -07001401{
Tim Murraye926ddd2014-01-07 15:36:19 -08001402 LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, pointSprite, cull);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001403 return (jlong)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
Jason Samsebfb4362009-09-23 13:57:02 -07001404}
1405
Jason Samsd19f10d2009-05-22 14:03:28 -07001406
1407// ---------------------------------------------------------------------------
1408
1409static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001410nContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001411{
Tim Murraye926ddd2014-01-07 15:36:19 -08001412 LOG_API("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001413 rsContextBindRootScript((RsContext)con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001414}
1415
1416static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001417nContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001418{
Tim Murraye926ddd2014-01-07 15:36:19 -08001419 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001420 rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001421}
1422
1423static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001424nContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001425{
Tim Murraye926ddd2014-01-07 15:36:19 -08001426 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, (RsProgramFragment)pf);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001427 rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001428}
1429
Jason Sams0826a6f2009-06-15 19:04:56 -07001430static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001431nContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001432{
Tim Murraye926ddd2014-01-07 15:36:19 -08001433 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001434 rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001435}
1436
Joe Onoratod7b37742009-08-09 22:57:44 -07001437static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001438nContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001439{
Tim Murraye926ddd2014-01-07 15:36:19 -08001440 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001441 rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
Jason Samsebfb4362009-09-23 13:57:02 -07001442}
1443
Joe Onoratod7b37742009-08-09 22:57:44 -07001444
Jason Sams02fb2cb2009-05-28 15:37:57 -07001445// ---------------------------------------------------------------------------
1446
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001447static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001448nSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001449 jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001450{
Tim Murraye926ddd2014-01-07 15:36:19 -08001451 LOG_API("nSamplerCreate, con(%p)", (RsContext)con);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001452 return (jlong)rsSamplerCreate((RsContext)con,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001453 (RsSamplerValue)magFilter,
1454 (RsSamplerValue)minFilter,
1455 (RsSamplerValue)wrapS,
1456 (RsSamplerValue)wrapT,
1457 (RsSamplerValue)wrapR,
1458 aniso);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001459}
1460
Jason Samsbba134c2009-06-22 15:49:21 -07001461// ---------------------------------------------------------------------------
1462
Tim Murray7a629fa2013-11-19 12:45:54 -08001463static jlong
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001464nPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jlong _loop, jfloat q) {
Tim Murraye926ddd2014-01-07 15:36:19 -08001465 LOG_API("nPathCreate, con(%p)", (RsContext)con);
Jason Samsf15ed012011-10-31 13:23:43 -07001466
Tim Murray7a629fa2013-11-19 12:45:54 -08001467 jlong id = (jlong)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic,
1468 (RsAllocation)_vtx,
1469 (RsAllocation)_loop, q);
Jason Samsf15ed012011-10-31 13:23:43 -07001470 return id;
1471}
1472
Tim Murray7a629fa2013-11-19 12:45:54 -08001473static jlong
Ashok Bhat98071552014-02-12 09:54:43 +00001474nMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim)
Jason Samsbba134c2009-06-22 15:49:21 -07001475{
Tim Murraye926ddd2014-01-07 15:36:19 -08001476 LOG_API("nMeshCreate, con(%p)", (RsContext)con);
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001477
1478 jint vtxLen = _env->GetArrayLength(_vtx);
Ashok Bhat98071552014-02-12 09:54:43 +00001479 jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, NULL);
1480 RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen);
1481 for(int i = 0; i < vtxLen; ++i) {
1482 vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i];
1483 }
1484
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001485 jint idxLen = _env->GetArrayLength(_idx);
Ashok Bhat98071552014-02-12 09:54:43 +00001486 jlong *jIdxPtr = _env->GetLongArrayElements(_idx, NULL);
1487 RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen);
1488 for(int i = 0; i < idxLen; ++i) {
1489 idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i];
1490 }
1491
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001492 jint primLen = _env->GetArrayLength(_prim);
1493 jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1494
Ashok Bhat98071552014-02-12 09:54:43 +00001495 jlong id = (jlong)rsMeshCreate((RsContext)con,
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001496 (RsAllocation *)vtxPtr, vtxLen,
1497 (RsAllocation *)idxPtr, idxLen,
1498 (uint32_t *)primPtr, primLen);
1499
Ashok Bhat98071552014-02-12 09:54:43 +00001500 free(vtxPtr);
1501 free(idxPtr);
1502 _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0);
1503 _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0);
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001504 _env->ReleaseIntArrayElements(_prim, primPtr, 0);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001505 return id;
1506}
1507
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001508static jint
Tim Murray7a629fa2013-11-19 12:45:54 -08001509nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001510{
Tim Murraye926ddd2014-01-07 15:36:19 -08001511 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001512 jint vtxCount = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001513 rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001514 return vtxCount;
1515}
1516
1517static jint
Tim Murray7a629fa2013-11-19 12:45:54 -08001518nMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001519{
Tim Murraye926ddd2014-01-07 15:36:19 -08001520 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001521 jint idxCount = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001522 rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001523 return idxCount;
1524}
1525
1526static void
Ashok Bhat98071552014-02-12 09:54:43 +00001527nMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001528{
Tim Murraye926ddd2014-01-07 15:36:19 -08001529 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001530
1531 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Tim Murraya78e9ad2013-11-15 13:08:30 -08001532 rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001533
1534 for(jint i = 0; i < numVtxIDs; i ++) {
Ashok Bhat98071552014-02-12 09:54:43 +00001535 const jlong alloc = (jlong)allocs[i];
1536 _env->SetLongArrayRegion(_ids, i, 1, &alloc);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001537 }
1538
1539 free(allocs);
1540}
1541
1542static void
Ashok Bhat98071552014-02-12 09:54:43 +00001543nMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001544{
Tim Murraye926ddd2014-01-07 15:36:19 -08001545 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001546
1547 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1548 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1549
Tim Murraya78e9ad2013-11-15 13:08:30 -08001550 rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001551
1552 for(jint i = 0; i < numIndices; i ++) {
Ashok Bhat98071552014-02-12 09:54:43 +00001553 const jlong alloc = (jlong)allocs[i];
1554 const jint prim = (jint)prims[i];
1555 _env->SetLongArrayRegion(_idxIds, i, 1, &alloc);
1556 _env->SetIntArrayRegion(_primitives, i, 1, &prim);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001557 }
1558
1559 free(allocs);
1560 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001561}
1562
1563// ---------------------------------------------------------------------------
1564
Jason Samsd19f10d2009-05-22 14:03:28 -07001565
Jason Sams94d8e90a2009-06-10 16:09:05 -07001566static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001567
1568static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001569{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001570
Tim Murraya78e9ad2013-11-15 13:08:30 -08001571{"nDeviceCreate", "()J", (void*)nDeviceCreate },
1572{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy },
1573{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig },
1574{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage },
1575{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1576{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage },
Jason Sams1c415172010-11-08 17:06:46 -08001577
Tim Murraya78e9ad2013-11-15 13:08:30 -08001578{"nContextInitToClient", "(J)V", (void*)nContextInitToClient },
1579{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001580
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001581
Jason Sams2e1872f2010-08-17 16:25:41 -07001582// All methods below are thread protected in java.
Tim Murraya78e9ad2013-11-15 13:08:30 -08001583{"rsnContextCreate", "(JIII)J", (void*)nContextCreate },
1584{"rsnContextCreateGL", "(JIIIIIIIIIIIIFI)J", (void*)nContextCreateGL },
1585{"rsnContextFinish", "(J)V", (void*)nContextFinish },
1586{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority },
1587{"rsnContextSetSurface", "(JIILandroid/view/Surface;)V", (void*)nContextSetSurface },
1588{"rsnContextDestroy", "(J)V", (void*)nContextDestroy },
1589{"rsnContextDump", "(JI)V", (void*)nContextDump },
1590{"rsnContextPause", "(J)V", (void*)nContextPause },
1591{"rsnContextResume", "(J)V", (void*)nContextResume },
1592{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage },
Tim Murray7a629fa2013-11-19 12:45:54 -08001593{"rsnAssignName", "(JJ[B)V", (void*)nAssignName },
1594{"rsnGetName", "(JJ)Ljava/lang/String;", (void*)nGetName },
1595{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001596
Tim Murray7a629fa2013-11-19 12:45:54 -08001597{"rsnFileA3DCreateFromFile", "(JLjava/lang/String;)J", (void*)nFileA3DCreateFromFile },
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001598{"rsnFileA3DCreateFromAssetStream", "(JJ)J", (void*)nFileA3DCreateFromAssetStream },
Tim Murray7a629fa2013-11-19 12:45:54 -08001599{"rsnFileA3DCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J", (void*)nFileA3DCreateFromAsset },
1600{"rsnFileA3DGetNumIndexEntries", "(JJ)I", (void*)nFileA3DGetNumIndexEntries },
1601{"rsnFileA3DGetIndexEntries", "(JJI[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001602{"rsnFileA3DGetEntryByIndex", "(JJI)J", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001603
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001604{"rsnFontCreateFromFile", "(JLjava/lang/String;FI)J", (void*)nFontCreateFromFile },
1605{"rsnFontCreateFromAssetStream", "(JLjava/lang/String;FIJ)J", (void*)nFontCreateFromAssetStream },
1606{"rsnFontCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J", (void*)nFontCreateFromAsset },
Jason Samsd19f10d2009-05-22 14:03:28 -07001607
Tim Murray7a629fa2013-11-19 12:45:54 -08001608{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate },
Ashok Bhat98071552014-02-12 09:54:43 +00001609{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 },
Tim Murray7a629fa2013-11-19 12:45:54 -08001610{"rsnElementGetNativeData", "(JJ[I)V", (void*)nElementGetNativeData },
Ashok Bhat98071552014-02-12 09:54:43 +00001611{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001612
Tim Murray7a629fa2013-11-19 12:45:54 -08001613{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate },
Ashok Bhat98071552014-02-12 09:54:43 +00001614{"rsnTypeGetNativeData", "(JJ[J)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001615
Ashok Bhat98071552014-02-12 09:54:43 +00001616{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped },
Tim Murray7a629fa2013-11-19 12:45:54 -08001617{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap },
1618{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation },
1619{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08001620
Tim Murray7a629fa2013-11-19 12:45:54 -08001621{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
1622{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
Jason Sams4ef66502010-12-10 16:03:15 -08001623
Tim Murray7a629fa2013-11-19 12:45:54 -08001624{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll },
1625{"rsnAllocationGetSurface", "(JJ)Landroid/view/Surface;", (void*)nAllocationGetSurface },
1626{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface },
1627{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend },
1628{"rsnAllocationIoReceive", "(JJ)V", (void*)nAllocationIoReceive },
1629{"rsnAllocationData1D", "(JJIIILjava/lang/Object;II)V", (void*)nAllocationData1D },
1630{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D },
1631{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;II)V", (void*)nAllocationData2D },
1632{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc },
1633{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;II)V", (void*)nAllocationData3D },
1634{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc },
1635{"rsnAllocationRead", "(JJLjava/lang/Object;I)V", (void*)nAllocationRead },
1636{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;II)V", (void*)nAllocationRead1D },
1637{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;II)V", (void*)nAllocationRead2D },
1638{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType},
1639{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D },
1640{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001641
Tim Murray7a629fa2013-11-19 12:45:54 -08001642{"rsnScriptBindAllocation", "(JJJI)V", (void*)nScriptBindAllocation },
1643{"rsnScriptSetTimeZone", "(JJ[B)V", (void*)nScriptSetTimeZone },
1644{"rsnScriptInvoke", "(JJI)V", (void*)nScriptInvoke },
1645{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV },
1646{"rsnScriptForEach", "(JJIJJ)V", (void*)nScriptForEach },
1647{"rsnScriptForEach", "(JJIJJ[B)V", (void*)nScriptForEachV },
1648{"rsnScriptForEachClipped", "(JJIJJIIIIII)V", (void*)nScriptForEachClipped },
1649{"rsnScriptForEachClipped", "(JJIJJ[BIIIIII)V", (void*)nScriptForEachClippedV },
1650{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI },
1651{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI },
1652{"rsnScriptSetVarJ", "(JJIJ)V", (void*)nScriptSetVarJ },
1653{"rsnScriptGetVarJ", "(JJI)J", (void*)nScriptGetVarJ },
1654{"rsnScriptSetVarF", "(JJIF)V", (void*)nScriptSetVarF },
1655{"rsnScriptGetVarF", "(JJI)F", (void*)nScriptGetVarF },
1656{"rsnScriptSetVarD", "(JJID)V", (void*)nScriptSetVarD },
1657{"rsnScriptGetVarD", "(JJI)D", (void*)nScriptGetVarD },
1658{"rsnScriptSetVarV", "(JJI[B)V", (void*)nScriptSetVarV },
1659{"rsnScriptGetVarV", "(JJI[B)V", (void*)nScriptGetVarV },
1660{"rsnScriptSetVarVE", "(JJI[BJ[I)V", (void*)nScriptSetVarVE },
1661{"rsnScriptSetVarObj", "(JJIJ)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001662
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001663{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate },
Tim Murray7a629fa2013-11-19 12:45:54 -08001664{"rsnScriptIntrinsicCreate", "(JIJ)J", (void*)nScriptIntrinsicCreate },
1665{"rsnScriptKernelIDCreate", "(JJII)J", (void*)nScriptKernelIDCreate },
1666{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate },
Ashok Bhat98071552014-02-12 09:54:43 +00001667{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate },
Tim Murray7a629fa2013-11-19 12:45:54 -08001668{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput },
1669{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput },
1670{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute },
Jason Sams0011bcf2009-12-15 12:58:36 -08001671
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001672{"rsnProgramStoreCreate", "(JZZZZZZIII)J", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001673
Tim Murray7a629fa2013-11-19 12:45:54 -08001674{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants },
1675{"rsnProgramBindTexture", "(JJIJ)V", (void*)nProgramBindTexture },
1676{"rsnProgramBindSampler", "(JJIJ)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001677
Ashok Bhat98071552014-02-12 09:54:43 +00001678{"rsnProgramFragmentCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramFragmentCreate },
Tim Murray7a629fa2013-11-19 12:45:54 -08001679{"rsnProgramRasterCreate", "(JZI)J", (void*)nProgramRasterCreate },
Ashok Bhat98071552014-02-12 09:54:43 +00001680{"rsnProgramVertexCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001681
Tim Murraya78e9ad2013-11-15 13:08:30 -08001682{"rsnContextBindRootScript", "(JI)V", (void*)nContextBindRootScript },
1683{"rsnContextBindProgramStore", "(JI)V", (void*)nContextBindProgramStore },
1684{"rsnContextBindProgramFragment", "(JI)V", (void*)nContextBindProgramFragment },
1685{"rsnContextBindProgramVertex", "(JI)V", (void*)nContextBindProgramVertex },
1686{"rsnContextBindProgramRaster", "(JI)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001687
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001688{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001689
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001690{"rsnPathCreate", "(JIZJJF)J", (void*)nPathCreate },
Ashok Bhat98071552014-02-12 09:54:43 +00001691{"rsnMeshCreate", "(J[J[J[I)J", (void*)nMeshCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001692
Tim Murray7a629fa2013-11-19 12:45:54 -08001693{"rsnMeshGetVertexBufferCount", "(JJ)I", (void*)nMeshGetVertexBufferCount },
1694{"rsnMeshGetIndexCount", "(JJ)I", (void*)nMeshGetIndexCount },
Ashok Bhat98071552014-02-12 09:54:43 +00001695{"rsnMeshGetVertices", "(JJ[JI)V", (void*)nMeshGetVertices },
1696{"rsnMeshGetIndices", "(JJ[J[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001697
Jason Samsd19f10d2009-05-22 14:03:28 -07001698};
1699
1700static int registerFuncs(JNIEnv *_env)
1701{
1702 return android::AndroidRuntime::registerNativeMethods(
1703 _env, classPathName, methods, NELEM(methods));
1704}
1705
1706// ---------------------------------------------------------------------------
1707
1708jint JNI_OnLoad(JavaVM* vm, void* reserved)
1709{
1710 JNIEnv* env = NULL;
1711 jint result = -1;
1712
Jason Samsd19f10d2009-05-22 14:03:28 -07001713 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
Steve Block3762c312012-01-06 19:20:56 +00001714 ALOGE("ERROR: GetEnv failed\n");
Jason Samsd19f10d2009-05-22 14:03:28 -07001715 goto bail;
1716 }
1717 assert(env != NULL);
1718
1719 if (registerFuncs(env) < 0) {
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001720 ALOGE("ERROR: Renderscript native registration failed\n");
Jason Samsd19f10d2009-05-22 14:03:28 -07001721 goto bail;
1722 }
1723
1724 /* success -- return valid version number */
1725 result = JNI_VERSION_1_4;
1726
1727bail:
1728 return result;
1729}