blob: 80a5da22093bf70334f2af9aa7fc9562a1ca2df3 [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 Sams29868df2013-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 Sams29868df2013-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 Sams29868df2013-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 Sams29868df2013-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 Sams29868df2013-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 Sams29868df2013-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 Sams29868df2013-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 Sams3eaa3382009-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 Sams3eaa3382009-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 Sams3eaa3382009-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 Sams3eaa3382009-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 Sams3eaa3382009-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,
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800415 jintArray _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
420 jint *ids = _env->GetIntArrayElements(_ids, NULL);
Jason Sams70d4e502010-09-02 17:35:23 -0700421 jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
Jason Sams718cd1f2009-12-23 14:35:29 -0800422
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800423 AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
424
425 const char **nameArray = names.c_str();
426 size_t *sizeArray = names.c_str_len();
427
Tim Murray7a629fa2013-11-19 12:45:54 -0800428 jlong id = (jlong)rsElementCreate2((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700429 (RsElement *)ids, fieldCount,
Jason Sams7a22e102011-05-06 14:14:30 -0700430 nameArray, fieldCount * sizeof(size_t), sizeArray,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700431 (const uint32_t *)arraySizes, fieldCount);
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800432
Jason Sams718cd1f2009-12-23 14:35:29 -0800433 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
Jason Sams70d4e502010-09-02 17:35:23 -0700434 _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000435 return (jlong)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700436}
437
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700438static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800439nElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700440{
441 int dataSize = _env->GetArrayLength(_elementData);
Tim Murraye926ddd2014-01-07 15:36:19 -0800442 LOG_API("nElementGetNativeData, con(%p)", (RsContext)con);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700443
444 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
445 assert(dataSize == 5);
446
447 uint32_t elementData[5];
Tim Murraya78e9ad2013-11-15 13:08:30 -0800448 rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700449
450 for(jint i = 0; i < dataSize; i ++) {
451 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
452 }
453}
454
455
456static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800457nElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700458 jintArray _IDs,
459 jobjectArray _names,
460 jintArray _arraySizes)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700461{
462 int dataSize = _env->GetArrayLength(_IDs);
Tim Murraye926ddd2014-01-07 15:36:19 -0800463 LOG_API("nElementGetSubElements, con(%p)", (RsContext)con);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700464
465 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
466 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700467 uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700468
Tim Murraya78e9ad2013-11-15 13:08:30 -0800469 rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700470
Jason Sams11c8af92010-10-13 15:31:10 -0700471 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700472 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
473 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700474 _env->SetIntArrayRegion(_arraySizes, i, 1, (const jint*)&arraySizes[i]);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700475 }
476
477 free(ids);
478 free(names);
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700479 free(arraySizes);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700480}
481
Jason Samsd19f10d2009-05-22 14:03:28 -0700482// -----------------------------------
483
Tim Murray7a629fa2013-11-19 12:45:54 -0800484static jlong
485nTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
Jason Samsb109cc72013-01-07 18:20:12 -0800486 jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
Jason Samsd19f10d2009-05-22 14:03:28 -0700487{
Jason Samsb109cc72013-01-07 18:20:12 -0800488 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 -0800489 (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700490
Tim Murray7a629fa2013-11-19 12:45:54 -0800491 return (jlong)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, faces, yuv);
Jason Samsd19f10d2009-05-22 14:03:28 -0700492}
493
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700494static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800495nTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700496{
497 // We are packing 6 items: mDimX; mDimY; mDimZ;
498 // mDimLOD; mDimFaces; mElement; into typeData
499 int elementCount = _env->GetArrayLength(_typeData);
500
501 assert(elementCount == 6);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000502 LOG_API("nTypeGetNativeData, con(%p)", (RsContext)con);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700503
504 uint32_t typeData[6];
Tim Murraya78e9ad2013-11-15 13:08:30 -0800505 rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700506
507 for(jint i = 0; i < elementCount; i ++) {
508 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
509 }
510}
511
Jason Samsd19f10d2009-05-22 14:03:28 -0700512// -----------------------------------
513
Tim Murray7a629fa2013-11-19 12:45:54 -0800514static jlong
515nAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, jint pointer)
Jason Samsd19f10d2009-05-22 14:03:28 -0700516{
Tim Murraye926ddd2014-01-07 15:36:19 -0800517 LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000518 return (jlong) rsAllocationCreateTyped((RsContext)con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uint32_t)pointer);
Jason Samsd19f10d2009-05-22 14:03:28 -0700519}
520
Jason Samsd19f10d2009-05-22 14:03:28 -0700521static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800522nAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
Jason Sams5476b452010-12-08 16:14:36 -0800523{
Tim Murraye926ddd2014-01-07 15:36:19 -0800524 LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800525 rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
Jason Sams5476b452010-12-08 16:14:36 -0800526}
527
Jason Sams72226e02013-02-22 12:45:54 -0800528static jobject
Tim Murray7a629fa2013-11-19 12:45:54 -0800529nAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a)
Jason Sams615e7ce2012-01-13 14:01:20 -0800530{
Tim Murraye926ddd2014-01-07 15:36:19 -0800531 LOG_API("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
Jason Sams615e7ce2012-01-13 14:01:20 -0800532
Tim Murraya78e9ad2013-11-15 13:08:30 -0800533 IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, (RsAllocation)a);
Jason Sams72226e02013-02-22 12:45:54 -0800534 sp<IGraphicBufferProducer> bp = v;
535 v->decStrong(NULL);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700536
Jason Sams72226e02013-02-22 12:45:54 -0800537 jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp);
538 return o;
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700539}
540
541static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800542nAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
Jason Sams163766c2012-02-15 12:04:24 -0800543{
Stephen Hines06883b72012-05-16 18:01:34 -0700544 LOG_API("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)",
Tim Murraye926ddd2014-01-07 15:36:19 -0800545 (RsContext)con, (RsAllocation)alloc, (Surface *)sur);
Jason Sams163766c2012-02-15 12:04:24 -0800546
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700547 sp<Surface> s;
Jason Sams163766c2012-02-15 12:04:24 -0800548 if (sur != 0) {
Jeff Brown64a55af2012-08-26 02:47:39 -0700549 s = android_view_Surface_getSurface(_env, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800550 }
551
Tim Murray7a629fa2013-11-19 12:45:54 -0800552 rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, static_cast<ANativeWindow *>(s.get()));
Jason Sams163766c2012-02-15 12:04:24 -0800553}
554
555static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800556nAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
Jason Sams163766c2012-02-15 12:04:24 -0800557{
Tim Murraye926ddd2014-01-07 15:36:19 -0800558 LOG_API("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, alloc);
Tim Murray7a629fa2013-11-19 12:45:54 -0800559 rsAllocationIoSend((RsContext)con, (RsAllocation)alloc);
Jason Sams163766c2012-02-15 12:04:24 -0800560}
561
562static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800563nAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
Jason Sams163766c2012-02-15 12:04:24 -0800564{
Tim Murraye926ddd2014-01-07 15:36:19 -0800565 LOG_API("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, alloc);
Tim Murray7a629fa2013-11-19 12:45:54 -0800566 rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc);
Jason Sams163766c2012-02-15 12:04:24 -0800567}
568
569
570static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800571nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
Jason Samsf7086092011-01-12 13:28:37 -0800572{
Tim Murraye926ddd2014-01-07 15:36:19 -0800573 LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800574 rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
Jason Samsf7086092011-01-12 13:28:37 -0800575}
576
Tim Murray7a629fa2013-11-19 12:45:54 -0800577static jlong
578nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
Jason Samsffe9f482009-06-01 17:45:53 -0700579{
Jason Samsffe9f482009-06-01 17:45:53 -0700580 SkBitmap const * nativeBitmap =
Ashok Bhata0398432014-01-20 20:08:01 +0000581 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Jason Samsffe9f482009-06-01 17:45:53 -0700582 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsffe9f482009-06-01 17:45:53 -0700583
Jason Sams5476b452010-12-08 16:14:36 -0800584 bitmap.lockPixels();
585 const void* ptr = bitmap.getPixels();
Tim Murray7a629fa2013-11-19 12:45:54 -0800586 jlong id = (jlong)rsAllocationCreateFromBitmap((RsContext)con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700587 (RsType)type, (RsAllocationMipmapControl)mip,
588 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800589 bitmap.unlockPixels();
590 return id;
Jason Samsffe9f482009-06-01 17:45:53 -0700591}
Jason Samsfe08d992009-05-27 14:45:32 -0700592
Tim Murray7a629fa2013-11-19 12:45:54 -0800593static jlong
594nAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
Tim Murraya3145512012-12-04 17:59:29 -0800595{
596 SkBitmap const * nativeBitmap =
Ashok Bhata0398432014-01-20 20:08:01 +0000597 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Tim Murraya3145512012-12-04 17:59:29 -0800598 const SkBitmap& bitmap(*nativeBitmap);
599
600 bitmap.lockPixels();
601 const void* ptr = bitmap.getPixels();
Tim Murray7a629fa2013-11-19 12:45:54 -0800602 jlong id = (jlong)rsAllocationCreateTyped((RsContext)con,
Tim Murraya3145512012-12-04 17:59:29 -0800603 (RsType)type, (RsAllocationMipmapControl)mip,
604 (uint32_t)usage, (size_t)ptr);
605 bitmap.unlockPixels();
606 return id;
607}
608
Tim Murray7a629fa2013-11-19 12:45:54 -0800609static jlong
610nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800611{
612 SkBitmap const * nativeBitmap =
Ashok Bhata0398432014-01-20 20:08:01 +0000613 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800614 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800615
Jason Sams5476b452010-12-08 16:14:36 -0800616 bitmap.lockPixels();
617 const void* ptr = bitmap.getPixels();
Tim Murray7a629fa2013-11-19 12:45:54 -0800618 jlong id = (jlong)rsAllocationCubeCreateFromBitmap((RsContext)con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700619 (RsType)type, (RsAllocationMipmapControl)mip,
620 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800621 bitmap.unlockPixels();
622 return id;
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800623}
624
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700625static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800626nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700627{
628 SkBitmap const * nativeBitmap =
Ashok Bhata0398432014-01-20 20:08:01 +0000629 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700630 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsf7086092011-01-12 13:28:37 -0800631 int w = bitmap.width();
632 int h = bitmap.height();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700633
Jason Sams4ef66502010-12-10 16:03:15 -0800634 bitmap.lockPixels();
635 const void* ptr = bitmap.getPixels();
Tim Murraya78e9ad2013-11-15 13:08:30 -0800636 rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700637 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
Tim Murray38faea32012-11-27 14:55:08 -0800638 w, h, ptr, bitmap.getSize(), 0);
Jason Sams4ef66502010-12-10 16:03:15 -0800639 bitmap.unlockPixels();
640}
641
642static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800643nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
Jason Sams4ef66502010-12-10 16:03:15 -0800644{
645 SkBitmap const * nativeBitmap =
Ashok Bhata0398432014-01-20 20:08:01 +0000646 (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
Jason Sams4ef66502010-12-10 16:03:15 -0800647 const SkBitmap& bitmap(*nativeBitmap);
648
649 bitmap.lockPixels();
650 void* ptr = bitmap.getPixels();
Tim Murraya78e9ad2013-11-15 13:08:30 -0800651 rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize());
Jason Sams4ef66502010-12-10 16:03:15 -0800652 bitmap.unlockPixels();
Alex Sakhartchouk835b8542011-07-20 14:33:10 -0700653 bitmap.notifyPixelsChanged();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700654}
655
Jason Sams8a647432010-03-01 15:31:04 -0800656static void ReleaseBitmapCallback(void *bmp)
657{
658 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
659 nativeBitmap->unlockPixels();
660}
661
Romain Guy650a3eb2009-08-31 14:06:43 -0700662
Jason Samsd19f10d2009-05-22 14:03:28 -0700663static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800664nAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000665 jint count, jobject data, jint sizeBytes, jint dataType)
Jason Samsd19f10d2009-05-22 14:03:28 -0700666{
Jason Sams6fcf2e12013-11-06 11:22:02 -0800667 RsAllocation *alloc = (RsAllocation *)_alloc;
Tim Murraye926ddd2014-01-07 15:36:19 -0800668 LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
669 (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, dataType);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800670 PER_ARRAY_TYPE(NULL, rsAllocation1DData, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700671}
672
673static void
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000674// native void rsnAllocationElementData1D(long con, long id, int xoff, int compIdx, byte[] d, int sizeBytes);
675nAllocationElementData1D(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 -0700676{
677 jint len = _env->GetArrayLength(data);
Tim Murraye926ddd2014-01-07 15:36:19 -0800678 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 -0700679 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800680 rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
Jason Sams49bdaf02010-08-31 13:50:42 -0700681 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
682}
683
684static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800685nAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000686 jint w, jint h, jobject data, jint sizeBytes, jint dataType)
Jason Samsfb9f82c2011-01-12 14:53:25 -0800687{
Jason Sams6fcf2e12013-11-06 11:22:02 -0800688 RsAllocation *alloc = (RsAllocation *)_alloc;
689 RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
690 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 -0800691 (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800692 PER_ARRAY_TYPE(NULL, rsAllocation2DData, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
Jason Samsd19f10d2009-05-22 14:03:28 -0700693}
694
Jason Sams40a29e82009-08-10 14:55:26 -0700695static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800696nAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -0800697 jlong dstAlloc, jint dstXoff, jint dstYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700698 jint dstMip, jint dstFace,
699 jint width, jint height,
Tim Murray7a629fa2013-11-19 12:45:54 -0800700 jlong srcAlloc, jint srcXoff, jint srcYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700701 jint srcMip, jint srcFace)
702{
Jason Sams4c2e4c82012-02-07 15:32:08 -0800703 LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700704 " dstMip(%i), dstFace(%i), width(%i), height(%i),"
705 " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
Tim Murraye926ddd2014-01-07 15:36:19 -0800706 (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700707 width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
708
Tim Murraya78e9ad2013-11-15 13:08:30 -0800709 rsAllocationCopy2DRange((RsContext)con,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700710 (RsAllocation)dstAlloc,
711 dstXoff, dstYoff,
712 dstMip, dstFace,
713 width, height,
714 (RsAllocation)srcAlloc,
715 srcXoff, srcYoff,
716 srcMip, srcFace);
717}
718
719static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800720nAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
Jason Sams6fcf2e12013-11-06 11:22:02 -0800721 jint w, jint h, jint d, jobject data, int sizeBytes, int dataType)
Jason Samsb05d6892013-04-09 15:59:24 -0700722{
Jason Sams6fcf2e12013-11-06 11:22:02 -0800723 RsAllocation *alloc = (RsAllocation *)_alloc;
724 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 -0800725 (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, sizeBytes);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800726 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 -0700727}
728
729static void
Tim Murraya78e9ad2013-11-15 13:08:30 -0800730nAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -0800731 jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700732 jint dstMip,
733 jint width, jint height, jint depth,
Tim Murray7a629fa2013-11-19 12:45:54 -0800734 jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700735 jint srcMip)
736{
737 LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
738 " dstMip(%i), width(%i), height(%i),"
739 " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
Tim Murraye926ddd2014-01-07 15:36:19 -0800740 (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip,
741 width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip);
Jason Samsb05d6892013-04-09 15:59:24 -0700742
Tim Murraya78e9ad2013-11-15 13:08:30 -0800743 rsAllocationCopy3DRange((RsContext)con,
Jason Samsb05d6892013-04-09 15:59:24 -0700744 (RsAllocation)dstAlloc,
745 dstXoff, dstYoff, dstZoff, dstMip,
746 width, height, depth,
747 (RsAllocation)srcAlloc,
748 srcXoff, srcYoff, srcZoff, srcMip);
749}
750
Jason Sams29868df2013-11-06 15:08:07 -0800751
Jason Samsb05d6892013-04-09 15:59:24 -0700752static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800753nAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType)
Jason Sams40a29e82009-08-10 14:55:26 -0700754{
Jason Sams29868df2013-11-06 15:08:07 -0800755 RsAllocation *alloc = (RsAllocation *)_alloc;
Tim Murraye926ddd2014-01-07 15:36:19 -0800756 LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800757 PER_ARRAY_TYPE(0, rsAllocationRead, (RsContext)con, alloc, ptr, len * typeBytes);
Jason Sams40a29e82009-08-10 14:55:26 -0700758}
759
760static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800761nAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
Jason Sams29868df2013-11-06 15:08:07 -0800762 jint count, jobject data, int sizeBytes, int dataType)
Jason Samsfb9f82c2011-01-12 14:53:25 -0800763{
Jason Sams29868df2013-11-06 15:08:07 -0800764 RsAllocation *alloc = (RsAllocation *)_alloc;
Tim Murraye926ddd2014-01-07 15:36:19 -0800765 LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
766 (RsContext)con, alloc, offset, count, sizeBytes, dataType);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800767 PER_ARRAY_TYPE(0, rsAllocation1DRead, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsfb9f82c2011-01-12 14:53:25 -0800768}
769
770static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800771nAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
Jason Sams29868df2013-11-06 15:08:07 -0800772 jint w, jint h, jobject data, int sizeBytes, int dataType)
Jason Samsfb9f82c2011-01-12 14:53:25 -0800773{
Jason Sams29868df2013-11-06 15:08:07 -0800774 RsAllocation *alloc = (RsAllocation *)_alloc;
775 RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
776 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 -0800777 (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800778 PER_ARRAY_TYPE(0, rsAllocation2DRead, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700779}
Jason Samsd19f10d2009-05-22 14:03:28 -0700780
Tim Murray7a629fa2013-11-19 12:45:54 -0800781static jlong
782nAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700783{
Tim Murraye926ddd2014-01-07 15:36:19 -0800784 LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
Tim Murray7a629fa2013-11-19 12:45:54 -0800785 return (jlong) rsaAllocationGetType((RsContext)con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700786}
787
Jason Sams5edc6082010-10-05 13:32:49 -0700788static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800789nAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
Jason Sams5edc6082010-10-05 13:32:49 -0700790{
Tim Murraye926ddd2014-01-07 15:36:19 -0800791 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, (RsAllocation)alloc, dimX);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800792 rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
Jason Sams5edc6082010-10-05 13:32:49 -0700793}
794
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700795// -----------------------------------
796
Tim Murray7a629fa2013-11-19 12:45:54 -0800797static jlong
798nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700799{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700800 Asset* asset = reinterpret_cast<Asset*>(native_asset);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000801 ALOGV("______nFileA3D %p", asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700802
Tim Murray7a629fa2013-11-19 12:45:54 -0800803 jlong id = (jlong)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800804 return id;
805}
806
Tim Murray7a629fa2013-11-19 12:45:54 -0800807static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800808nFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800809{
810 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
811 if (mgr == NULL) {
812 return 0;
813 }
814
815 AutoJavaStringToUTF8 str(_env, _path);
816 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
817 if (asset == NULL) {
818 return 0;
819 }
820
Tim Murray7a629fa2013-11-19 12:45:54 -0800821 jlong id = (jlong)rsaFileA3DCreateFromAsset((RsContext)con, asset);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800822 return id;
823}
824
Tim Murray7a629fa2013-11-19 12:45:54 -0800825static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800826nFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800827{
828 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Tim Murray7a629fa2013-11-19 12:45:54 -0800829 jlong id = (jlong)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800830
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700831 return id;
832}
833
Tim Murray7a629fa2013-11-19 12:45:54 -0800834static jint
835nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700836{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700837 int32_t numEntries = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800838 rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000839 return (jint)numEntries;
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700840}
841
842static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800843nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700844{
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000845 ALOGV("______nFileA3D %p", (RsFile) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700846 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
847
Tim Murraya78e9ad2013-11-15 13:08:30 -0800848 rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700849
850 for(jint i = 0; i < numEntries; i ++) {
851 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
852 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
853 }
854
855 free(fileEntries);
856}
857
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000858static jlong
Tim Murray7a629fa2013-11-19 12:45:54 -0800859nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700860{
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000861 ALOGV("______nFileA3D %p", (RsFile) fileA3D);
862 jlong id = (jlong)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700863 return id;
864}
Jason Samsd19f10d2009-05-22 14:03:28 -0700865
866// -----------------------------------
867
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000868static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800869nFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800870 jstring fileName, jfloat fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700871{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800872 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000873 jlong id = (jlong)rsFontCreateFromFile((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700874 fileNameUTF.c_str(), fileNameUTF.length(),
875 fontSize, dpi);
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700876
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800877 return id;
878}
879
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000880static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800881nFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000882 jstring name, jfloat fontSize, jint dpi, jlong native_asset)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800883{
884 Asset* asset = reinterpret_cast<Asset*>(native_asset);
885 AutoJavaStringToUTF8 nameUTF(_env, name);
886
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000887 jlong id = (jlong)rsFontCreateFromMemory((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700888 nameUTF.c_str(), nameUTF.length(),
889 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800890 asset->getBuffer(false), asset->getLength());
891 return id;
892}
893
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000894static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800895nFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800896 jfloat fontSize, jint dpi)
897{
898 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
899 if (mgr == NULL) {
900 return 0;
901 }
902
903 AutoJavaStringToUTF8 str(_env, _path);
904 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
905 if (asset == NULL) {
906 return 0;
907 }
908
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000909 jlong id = (jlong)rsFontCreateFromMemory((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700910 str.c_str(), str.length(),
911 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800912 asset->getBuffer(false), asset->getLength());
913 delete asset;
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700914 return id;
915}
916
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700917// -----------------------------------
918
919static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800920nScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700921{
Tim Murraye926ddd2014-01-07 15:36:19 -0800922 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 -0800923 rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700924}
925
926static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800927nScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700928{
Tim Murraye926ddd2014-01-07 15:36:19 -0800929 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800930 rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700931}
932
Tim Murray7c4caad2013-04-10 16:21:40 -0700933static jint
Tim Murray7a629fa2013-11-19 12:45:54 -0800934nScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700935{
Tim Murraye926ddd2014-01-07 15:36:19 -0800936 LOG_API("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700937 int value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800938 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700939 return value;
940}
941
Jason Sams4d339932010-05-11 14:03:58 -0700942static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800943nScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800944{
Tim Murraye926ddd2014-01-07 15:36:19 -0800945 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800946 rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800947}
948
949static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800950nScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
Stephen Hines031ec58c2010-10-11 10:54:21 -0700951{
Tim Murraye926ddd2014-01-07 15:36:19 -0800952 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800953 rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
Stephen Hines031ec58c2010-10-11 10:54:21 -0700954}
955
Tim Murray7c4caad2013-04-10 16:21:40 -0700956static jlong
Tim Murray7a629fa2013-11-19 12:45:54 -0800957nScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700958{
Tim Murraye926ddd2014-01-07 15:36:19 -0800959 LOG_API("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700960 jlong value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800961 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700962 return value;
963}
964
Stephen Hines031ec58c2010-10-11 10:54:21 -0700965static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800966nScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700967{
Tim Murraye926ddd2014-01-07 15:36:19 -0800968 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800969 rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700970}
971
Tim Murray7c4caad2013-04-10 16:21:40 -0700972static jfloat
Tim Murray7a629fa2013-11-19 12:45:54 -0800973nScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700974{
Tim Murraye926ddd2014-01-07 15:36:19 -0800975 LOG_API("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700976 jfloat value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800977 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700978 return value;
979}
980
Jason Sams4d339932010-05-11 14:03:58 -0700981static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800982nScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
Stephen Hinesca54ec32010-09-20 17:20:30 -0700983{
Tim Murraye926ddd2014-01-07 15:36:19 -0800984 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800985 rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
Stephen Hinesca54ec32010-09-20 17:20:30 -0700986}
987
Tim Murray7c4caad2013-04-10 16:21:40 -0700988static jdouble
Tim Murray7a629fa2013-11-19 12:45:54 -0800989nScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700990{
Tim Murraye926ddd2014-01-07 15:36:19 -0800991 LOG_API("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700992 jdouble value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800993 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700994 return value;
995}
996
Stephen Hinesca54ec32010-09-20 17:20:30 -0700997static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800998nScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700999{
Tim Murraye926ddd2014-01-07 15:36:19 -08001000 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Jason Sams4d339932010-05-11 14:03:58 -07001001 jint len = _env->GetArrayLength(data);
1002 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001003 rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
Jason Sams4d339932010-05-11 14:03:58 -07001004 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1005}
1006
Stephen Hinesadeb8092012-04-20 14:26:06 -07001007static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001008nScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Tim Murray7c4caad2013-04-10 16:21:40 -07001009{
Tim Murraye926ddd2014-01-07 15:36:19 -08001010 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -07001011 jint len = _env->GetArrayLength(data);
1012 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001013 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
Tim Murray7c4caad2013-04-10 16:21:40 -07001014 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1015}
1016
1017static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001018nScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jlong elem, jintArray dims)
Stephen Hinesadeb8092012-04-20 14:26:06 -07001019{
Tim Murraye926ddd2014-01-07 15:36:19 -08001020 LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Stephen Hinesadeb8092012-04-20 14:26:06 -07001021 jint len = _env->GetArrayLength(data);
1022 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1023 jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1024 jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001025 rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
Stephen Hinesadeb8092012-04-20 14:26:06 -07001026 (const size_t*) dimsPtr, dimsLen);
1027 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1028 _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1029}
1030
Jason Samsd19f10d2009-05-22 14:03:28 -07001031
1032static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001033nScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -07001034{
Tim Murraye926ddd2014-01-07 15:36:19 -08001035 LOG_API("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
Romain Guy584a3752009-07-30 18:45:01 -07001036
1037 jint length = _env->GetArrayLength(timeZone);
1038 jbyte* timeZone_ptr;
1039 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1040
Tim Murraya78e9ad2013-11-15 13:08:30 -08001041 rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -07001042
1043 if (timeZone_ptr) {
1044 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1045 }
1046}
1047
Jason Samsfbf0b9e2009-08-13 12:59:04 -07001048static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001049nScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -07001050{
Tim Murraye926ddd2014-01-07 15:36:19 -08001051 LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001052 rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
Jason Samsbe2e8412009-09-16 15:04:38 -07001053}
1054
1055static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001056nScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -07001057{
Tim Murraye926ddd2014-01-07 15:36:19 -08001058 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Jason Sams4d339932010-05-11 14:03:58 -07001059 jint len = _env->GetArrayLength(data);
1060 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001061 rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
Jason Sams4d339932010-05-11 14:03:58 -07001062 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1063}
1064
Jason Sams6e494d32011-04-27 16:33:11 -07001065static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001066nScriptForEach(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001067 jlong script, jint slot, jlong ain, jlong aout)
Jason Sams6e494d32011-04-27 16:33:11 -07001068{
Tim Murraye926ddd2014-01-07 15:36:19 -08001069 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001070 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, NULL, 0);
Jason Sams6e494d32011-04-27 16:33:11 -07001071}
1072static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001073nScriptForEachV(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001074 jlong script, jint slot, jlong ain, jlong aout, jbyteArray params)
Jason Sams6e494d32011-04-27 16:33:11 -07001075{
Tim Murraye926ddd2014-01-07 15:36:19 -08001076 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Jason Sams6e494d32011-04-27 16:33:11 -07001077 jint len = _env->GetArrayLength(params);
1078 jbyte *ptr = _env->GetByteArrayElements(params, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001079 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, NULL, 0);
Jason Sams6e494d32011-04-27 16:33:11 -07001080 _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1081}
1082
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001083static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001084nScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001085 jlong script, jint slot, jlong ain, jlong aout,
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001086 jint xstart, jint xend,
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001087 jint ystart, jint yend, jint zstart, jint zend)
1088{
Tim Murraye926ddd2014-01-07 15:36:19 -08001089 LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001090 RsScriptCall sc;
1091 sc.xStart = xstart;
1092 sc.xEnd = xend;
1093 sc.yStart = ystart;
1094 sc.yEnd = yend;
1095 sc.zStart = zstart;
1096 sc.zEnd = zend;
1097 sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1098 sc.arrayStart = 0;
1099 sc.arrayEnd = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001100 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, &sc, sizeof(sc));
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001101}
1102
1103static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001104nScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001105 jlong script, jint slot, jlong ain, jlong aout,
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001106 jbyteArray params, jint xstart, jint xend,
1107 jint ystart, jint yend, jint zstart, jint zend)
1108{
Tim Murraye926ddd2014-01-07 15:36:19 -08001109 LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001110 jint len = _env->GetArrayLength(params);
1111 jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1112 RsScriptCall sc;
1113 sc.xStart = xstart;
1114 sc.xEnd = xend;
1115 sc.yStart = ystart;
1116 sc.yEnd = yend;
1117 sc.zStart = zstart;
1118 sc.zEnd = zend;
1119 sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1120 sc.arrayStart = 0;
1121 sc.arrayEnd = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001122 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, &sc, sizeof(sc));
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001123 _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1124}
Jason Samsfbf0b9e2009-08-13 12:59:04 -07001125
Jason Sams22534172009-08-04 16:58:20 -07001126// -----------------------------------
1127
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001128static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001129nScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
Jason Samse4a06c52011-03-16 16:29:28 -07001130 jstring resName, jstring cacheDir,
1131 jbyteArray scriptRef, jint length)
Jason Sams22534172009-08-04 16:58:20 -07001132{
Tim Murraye926ddd2014-01-07 15:36:19 -08001133 LOG_API("nScriptCCreate, con(%p)", (RsContext)con);
Jason Sams22534172009-08-04 16:58:20 -07001134
Jason Samse4a06c52011-03-16 16:29:28 -07001135 AutoJavaStringToUTF8 resNameUTF(_env, resName);
1136 AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001137 jlong ret = 0;
Elliott Hughes8451b252011-04-07 19:17:57 -07001138 jbyte* script_ptr = NULL;
Jack Palevich43702d82009-05-28 13:38:16 -07001139 jint _exception = 0;
1140 jint remaining;
Jack Palevich43702d82009-05-28 13:38:16 -07001141 if (!scriptRef) {
1142 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001143 //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
Jack Palevich43702d82009-05-28 13:38:16 -07001144 goto exit;
1145 }
Jack Palevich43702d82009-05-28 13:38:16 -07001146 if (length < 0) {
1147 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001148 //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
Jack Palevich43702d82009-05-28 13:38:16 -07001149 goto exit;
1150 }
Jason Samse4a06c52011-03-16 16:29:28 -07001151 remaining = _env->GetArrayLength(scriptRef);
Jack Palevich43702d82009-05-28 13:38:16 -07001152 if (remaining < length) {
1153 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001154 //jniThrowException(_env, "java/lang/IllegalArgumentException",
1155 // "length > script.length - offset");
Jack Palevich43702d82009-05-28 13:38:16 -07001156 goto exit;
1157 }
Jason Samse4a06c52011-03-16 16:29:28 -07001158 script_ptr = (jbyte *)
Jack Palevich43702d82009-05-28 13:38:16 -07001159 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
Jack Palevich43702d82009-05-28 13:38:16 -07001160
Tim Murraya78e9ad2013-11-15 13:08:30 -08001161 //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
Jason Samse4a06c52011-03-16 16:29:28 -07001162
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001163 ret = (jlong)rsScriptCCreate((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -07001164 resNameUTF.c_str(), resNameUTF.length(),
1165 cacheDirUTF.c_str(), cacheDirUTF.length(),
Jason Samse4a06c52011-03-16 16:29:28 -07001166 (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -07001167
Jack Palevich43702d82009-05-28 13:38:16 -07001168exit:
Jason Samse4a06c52011-03-16 16:29:28 -07001169 if (script_ptr) {
1170 _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
Jack Palevich43702d82009-05-28 13:38:16 -07001171 _exception ? JNI_ABORT: 0);
1172 }
Jason Samsd19f10d2009-05-22 14:03:28 -07001173
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001174 return (jlong)ret;
Jason Samsd19f10d2009-05-22 14:03:28 -07001175}
1176
Tim Murray7a629fa2013-11-19 12:45:54 -08001177static jlong
1178nScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
Jason Sams6ab97682012-08-10 12:09:43 -07001179{
Tim Murraye926ddd2014-01-07 15:36:19 -08001180 LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid);
Tim Murray7a629fa2013-11-19 12:45:54 -08001181 return (jlong)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
Jason Sams6ab97682012-08-10 12:09:43 -07001182}
1183
Tim Murray7a629fa2013-11-19 12:45:54 -08001184static jlong
1185nScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
Jason Sams08a81582012-09-18 12:32:10 -07001186{
Tim Murraye926ddd2014-01-07 15:36:19 -08001187 LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, (void *)sid, slot, sig);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001188 return (jlong)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
Jason Sams08a81582012-09-18 12:32:10 -07001189}
1190
Tim Murray7a629fa2013-11-19 12:45:54 -08001191static jlong
1192nScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
Jason Sams08a81582012-09-18 12:32:10 -07001193{
Tim Murraye926ddd2014-01-07 15:36:19 -08001194 LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001195 return (jlong)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
Jason Sams08a81582012-09-18 12:32:10 -07001196}
1197
Tim Murray7a629fa2013-11-19 12:45:54 -08001198static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001199nScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jintArray _kernels, jintArray _src,
Jason Sams08a81582012-09-18 12:32:10 -07001200 jintArray _dstk, jintArray _dstf, jintArray _types)
1201{
Tim Murraye926ddd2014-01-07 15:36:19 -08001202 LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con);
Jason Sams08a81582012-09-18 12:32:10 -07001203
1204 jint kernelsLen = _env->GetArrayLength(_kernels) * sizeof(int);
1205 jint *kernelsPtr = _env->GetIntArrayElements(_kernels, NULL);
1206 jint srcLen = _env->GetArrayLength(_src) * sizeof(int);
1207 jint *srcPtr = _env->GetIntArrayElements(_src, NULL);
1208 jint dstkLen = _env->GetArrayLength(_dstk) * sizeof(int);
1209 jint *dstkPtr = _env->GetIntArrayElements(_dstk, NULL);
1210 jint dstfLen = _env->GetArrayLength(_dstf) * sizeof(int);
1211 jint *dstfPtr = _env->GetIntArrayElements(_dstf, NULL);
1212 jint typesLen = _env->GetArrayLength(_types) * sizeof(int);
1213 jint *typesPtr = _env->GetIntArrayElements(_types, NULL);
1214
Tim Murraya78e9ad2013-11-15 13:08:30 -08001215 int id = (int)rsScriptGroupCreate((RsContext)con,
Jason Sams08a81582012-09-18 12:32:10 -07001216 (RsScriptKernelID *)kernelsPtr, kernelsLen,
1217 (RsScriptKernelID *)srcPtr, srcLen,
1218 (RsScriptKernelID *)dstkPtr, dstkLen,
1219 (RsScriptFieldID *)dstfPtr, dstfLen,
1220 (RsType *)typesPtr, typesLen);
1221
1222 _env->ReleaseIntArrayElements(_kernels, kernelsPtr, 0);
1223 _env->ReleaseIntArrayElements(_src, srcPtr, 0);
1224 _env->ReleaseIntArrayElements(_dstk, dstkPtr, 0);
1225 _env->ReleaseIntArrayElements(_dstf, dstfPtr, 0);
1226 _env->ReleaseIntArrayElements(_types, typesPtr, 0);
1227 return id;
1228}
1229
1230static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001231nScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
Jason Sams08a81582012-09-18 12:32:10 -07001232{
Tim Murraye926ddd2014-01-07 15:36:19 -08001233 LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
Jason Sams08a81582012-09-18 12:32:10 -07001234 (void *)gid, (void *)kid, (void *)alloc);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001235 rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
Jason Sams08a81582012-09-18 12:32:10 -07001236}
1237
1238static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001239nScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
Jason Sams08a81582012-09-18 12:32:10 -07001240{
Tim Murraye926ddd2014-01-07 15:36:19 -08001241 LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
Jason Sams08a81582012-09-18 12:32:10 -07001242 (void *)gid, (void *)kid, (void *)alloc);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001243 rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
Jason Sams08a81582012-09-18 12:32:10 -07001244}
1245
1246static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001247nScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
Jason Sams08a81582012-09-18 12:32:10 -07001248{
Tim Murraye926ddd2014-01-07 15:36:19 -08001249 LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001250 rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
Jason Sams08a81582012-09-18 12:32:10 -07001251}
1252
Jason Samsd19f10d2009-05-22 14:03:28 -07001253// ---------------------------------------------------------------------------
1254
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001255static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001256nProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
Jason Sams331bf9b2011-04-06 11:23:54 -07001257 jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1258 jboolean depthMask, jboolean ditherEnable,
1259 jint srcFunc, jint destFunc,
1260 jint depthFunc)
Jason Samsd19f10d2009-05-22 14:03:28 -07001261{
Tim Murraye926ddd2014-01-07 15:36:19 -08001262 LOG_API("nProgramStoreCreate, con(%p)", (RsContext)con);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001263 return (jlong)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
Jason Sams331bf9b2011-04-06 11:23:54 -07001264 depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1265 (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
Jason Samsd19f10d2009-05-22 14:03:28 -07001266}
1267
Jason Sams0011bcf2009-12-15 12:58:36 -08001268// ---------------------------------------------------------------------------
1269
1270static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001271nProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001272{
Tim Murraye926ddd2014-01-07 15:36:19 -08001273 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 -08001274 rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
Jason Sams0011bcf2009-12-15 12:58:36 -08001275}
Jason Sams54c0ec12009-11-30 14:49:55 -08001276
Jason Sams68afd012009-12-17 16:55:08 -08001277static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001278nProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
Jason Sams68afd012009-12-17 16:55:08 -08001279{
Tim Murraye926ddd2014-01-07 15:36:19 -08001280 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 -08001281 rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
Jason Sams68afd012009-12-17 16:55:08 -08001282}
1283
1284static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001285nProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
Jason Sams68afd012009-12-17 16:55:08 -08001286{
Tim Murraye926ddd2014-01-07 15:36:19 -08001287 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 -08001288 rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
Jason Sams68afd012009-12-17 16:55:08 -08001289}
1290
Jason Samsd19f10d2009-05-22 14:03:28 -07001291// ---------------------------------------------------------------------------
1292
Tim Murray7a629fa2013-11-19 12:45:54 -08001293static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001294nProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001295 jobjectArray texNames, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001296{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001297 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001298 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1299 jint paramLen = _env->GetArrayLength(params);
1300
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001301 int texCount = _env->GetArrayLength(texNames);
1302 AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
1303 const char ** nameArray = names.c_str();
1304 size_t* sizeArray = names.c_str_len();
1305
Tim Murraye926ddd2014-01-07 15:36:19 -08001306 LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001307
Tim Murray7a629fa2013-11-19 12:45:54 -08001308 jlong ret = (jlong)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001309 nameArray, texCount, sizeArray,
1310 (uint32_t *)paramPtr, paramLen);
1311
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001312 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1313 return ret;
1314}
1315
1316
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001317// ---------------------------------------------------------------------------
1318
Tim Murray7a629fa2013-11-19 12:45:54 -08001319static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001320nProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001321 jobjectArray texNames, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001322{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001323 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams0011bcf2009-12-15 12:58:36 -08001324 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1325 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001326
Tim Murraye926ddd2014-01-07 15:36:19 -08001327 LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001328
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001329 int texCount = _env->GetArrayLength(texNames);
1330 AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
1331 const char ** nameArray = names.c_str();
1332 size_t* sizeArray = names.c_str_len();
1333
Tim Murray7a629fa2013-11-19 12:45:54 -08001334 jlong ret = (jlong)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001335 nameArray, texCount, sizeArray,
1336 (uint32_t *)paramPtr, paramLen);
1337
Jason Sams0011bcf2009-12-15 12:58:36 -08001338 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1339 return ret;
1340}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001341
Jason Samsebfb4362009-09-23 13:57:02 -07001342// ---------------------------------------------------------------------------
1343
Tim Murray7a629fa2013-11-19 12:45:54 -08001344static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001345nProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
Jason Samsebfb4362009-09-23 13:57:02 -07001346{
Tim Murraye926ddd2014-01-07 15:36:19 -08001347 LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, pointSprite, cull);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001348 return (jlong)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
Jason Samsebfb4362009-09-23 13:57:02 -07001349}
1350
Jason Samsd19f10d2009-05-22 14:03:28 -07001351
1352// ---------------------------------------------------------------------------
1353
1354static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001355nContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001356{
Tim Murraye926ddd2014-01-07 15:36:19 -08001357 LOG_API("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001358 rsContextBindRootScript((RsContext)con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001359}
1360
1361static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001362nContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001363{
Tim Murraye926ddd2014-01-07 15:36:19 -08001364 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001365 rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001366}
1367
1368static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001369nContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001370{
Tim Murraye926ddd2014-01-07 15:36:19 -08001371 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, (RsProgramFragment)pf);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001372 rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001373}
1374
Jason Sams0826a6f2009-06-15 19:04:56 -07001375static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001376nContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001377{
Tim Murraye926ddd2014-01-07 15:36:19 -08001378 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001379 rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001380}
1381
Joe Onoratod7b37742009-08-09 22:57:44 -07001382static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001383nContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001384{
Tim Murraye926ddd2014-01-07 15:36:19 -08001385 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001386 rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
Jason Samsebfb4362009-09-23 13:57:02 -07001387}
1388
Joe Onoratod7b37742009-08-09 22:57:44 -07001389
Jason Sams02fb2cb2009-05-28 15:37:57 -07001390// ---------------------------------------------------------------------------
1391
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001392static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001393nSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001394 jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001395{
Tim Murraye926ddd2014-01-07 15:36:19 -08001396 LOG_API("nSamplerCreate, con(%p)", (RsContext)con);
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001397 return (jlong)rsSamplerCreate((RsContext)con,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001398 (RsSamplerValue)magFilter,
1399 (RsSamplerValue)minFilter,
1400 (RsSamplerValue)wrapS,
1401 (RsSamplerValue)wrapT,
1402 (RsSamplerValue)wrapR,
1403 aniso);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001404}
1405
Jason Samsbba134c2009-06-22 15:49:21 -07001406// ---------------------------------------------------------------------------
1407
Tim Murray7a629fa2013-11-19 12:45:54 -08001408static jlong
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001409nPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jlong _loop, jfloat q) {
Tim Murraye926ddd2014-01-07 15:36:19 -08001410 LOG_API("nPathCreate, con(%p)", (RsContext)con);
Jason Samsf15ed012011-10-31 13:23:43 -07001411
Tim Murray7a629fa2013-11-19 12:45:54 -08001412 jlong id = (jlong)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic,
1413 (RsAllocation)_vtx,
1414 (RsAllocation)_loop, q);
Jason Samsf15ed012011-10-31 13:23:43 -07001415 return id;
1416}
1417
Tim Murray7a629fa2013-11-19 12:45:54 -08001418static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001419nMeshCreate(JNIEnv *_env, jobject _this, jlong con, jintArray _vtx, jintArray _idx, jintArray _prim)
Jason Samsbba134c2009-06-22 15:49:21 -07001420{
Tim Murraye926ddd2014-01-07 15:36:19 -08001421 LOG_API("nMeshCreate, con(%p)", (RsContext)con);
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001422
1423 jint vtxLen = _env->GetArrayLength(_vtx);
1424 jint *vtxPtr = _env->GetIntArrayElements(_vtx, NULL);
1425 jint idxLen = _env->GetArrayLength(_idx);
1426 jint *idxPtr = _env->GetIntArrayElements(_idx, NULL);
1427 jint primLen = _env->GetArrayLength(_prim);
1428 jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1429
Tim Murraya78e9ad2013-11-15 13:08:30 -08001430 int id = (int)rsMeshCreate((RsContext)con,
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001431 (RsAllocation *)vtxPtr, vtxLen,
1432 (RsAllocation *)idxPtr, idxLen,
1433 (uint32_t *)primPtr, primLen);
1434
1435 _env->ReleaseIntArrayElements(_vtx, vtxPtr, 0);
1436 _env->ReleaseIntArrayElements(_idx, idxPtr, 0);
1437 _env->ReleaseIntArrayElements(_prim, primPtr, 0);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001438 return id;
1439}
1440
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001441static jint
Tim Murray7a629fa2013-11-19 12:45:54 -08001442nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001443{
Tim Murraye926ddd2014-01-07 15:36:19 -08001444 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001445 jint vtxCount = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001446 rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001447 return vtxCount;
1448}
1449
1450static jint
Tim Murray7a629fa2013-11-19 12:45:54 -08001451nMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001452{
Tim Murraye926ddd2014-01-07 15:36:19 -08001453 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001454 jint idxCount = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001455 rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001456 return idxCount;
1457}
1458
1459static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001460nMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001461{
Tim Murraye926ddd2014-01-07 15:36:19 -08001462 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001463
1464 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Tim Murraya78e9ad2013-11-15 13:08:30 -08001465 rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001466
1467 for(jint i = 0; i < numVtxIDs; i ++) {
1468 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1469 }
1470
1471 free(allocs);
1472}
1473
1474static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001475nMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001476{
Tim Murraye926ddd2014-01-07 15:36:19 -08001477 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001478
1479 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1480 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1481
Tim Murraya78e9ad2013-11-15 13:08:30 -08001482 rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001483
1484 for(jint i = 0; i < numIndices; i ++) {
1485 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1486 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1487 }
1488
1489 free(allocs);
1490 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001491}
1492
1493// ---------------------------------------------------------------------------
1494
Jason Samsd19f10d2009-05-22 14:03:28 -07001495
Jason Sams94d8e90a2009-06-10 16:09:05 -07001496static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001497
1498static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001499{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001500
Tim Murraya78e9ad2013-11-15 13:08:30 -08001501{"nDeviceCreate", "()J", (void*)nDeviceCreate },
1502{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy },
1503{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig },
1504{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage },
1505{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1506{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage },
Jason Sams1c415172010-11-08 17:06:46 -08001507
Tim Murraya78e9ad2013-11-15 13:08:30 -08001508{"nContextInitToClient", "(J)V", (void*)nContextInitToClient },
1509{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001510
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001511
Jason Sams2e1872f2010-08-17 16:25:41 -07001512// All methods below are thread protected in java.
Tim Murraya78e9ad2013-11-15 13:08:30 -08001513{"rsnContextCreate", "(JIII)J", (void*)nContextCreate },
1514{"rsnContextCreateGL", "(JIIIIIIIIIIIIFI)J", (void*)nContextCreateGL },
1515{"rsnContextFinish", "(J)V", (void*)nContextFinish },
1516{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority },
1517{"rsnContextSetSurface", "(JIILandroid/view/Surface;)V", (void*)nContextSetSurface },
1518{"rsnContextDestroy", "(J)V", (void*)nContextDestroy },
1519{"rsnContextDump", "(JI)V", (void*)nContextDump },
1520{"rsnContextPause", "(J)V", (void*)nContextPause },
1521{"rsnContextResume", "(J)V", (void*)nContextResume },
1522{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage },
Tim Murray7a629fa2013-11-19 12:45:54 -08001523{"rsnAssignName", "(JJ[B)V", (void*)nAssignName },
1524{"rsnGetName", "(JJ)Ljava/lang/String;", (void*)nGetName },
1525{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001526
Tim Murray7a629fa2013-11-19 12:45:54 -08001527{"rsnFileA3DCreateFromFile", "(JLjava/lang/String;)J", (void*)nFileA3DCreateFromFile },
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001528{"rsnFileA3DCreateFromAssetStream", "(JJ)J", (void*)nFileA3DCreateFromAssetStream },
Tim Murray7a629fa2013-11-19 12:45:54 -08001529{"rsnFileA3DCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J", (void*)nFileA3DCreateFromAsset },
1530{"rsnFileA3DGetNumIndexEntries", "(JJ)I", (void*)nFileA3DGetNumIndexEntries },
1531{"rsnFileA3DGetIndexEntries", "(JJI[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001532{"rsnFileA3DGetEntryByIndex", "(JJI)J", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001533
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001534{"rsnFontCreateFromFile", "(JLjava/lang/String;FI)J", (void*)nFontCreateFromFile },
1535{"rsnFontCreateFromAssetStream", "(JLjava/lang/String;FIJ)J", (void*)nFontCreateFromAssetStream },
1536{"rsnFontCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J", (void*)nFontCreateFromAsset },
Jason Samsd19f10d2009-05-22 14:03:28 -07001537
Tim Murray7a629fa2013-11-19 12:45:54 -08001538{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate },
1539{"rsnElementCreate2", "(J[I[Ljava/lang/String;[I)J", (void*)nElementCreate2 },
1540{"rsnElementGetNativeData", "(JJ[I)V", (void*)nElementGetNativeData },
1541{"rsnElementGetSubElements", "(JJ[I[Ljava/lang/String;[I)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001542
Tim Murray7a629fa2013-11-19 12:45:54 -08001543{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate },
1544{"rsnTypeGetNativeData", "(JJ[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001545
Tim Murray7a629fa2013-11-19 12:45:54 -08001546{"rsnAllocationCreateTyped", "(JJIII)J", (void*)nAllocationCreateTyped },
1547{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap },
1548{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation },
1549{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08001550
Tim Murray7a629fa2013-11-19 12:45:54 -08001551{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
1552{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
Jason Sams4ef66502010-12-10 16:03:15 -08001553
Tim Murray7a629fa2013-11-19 12:45:54 -08001554{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll },
1555{"rsnAllocationGetSurface", "(JJ)Landroid/view/Surface;", (void*)nAllocationGetSurface },
1556{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface },
1557{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend },
1558{"rsnAllocationIoReceive", "(JJ)V", (void*)nAllocationIoReceive },
1559{"rsnAllocationData1D", "(JJIIILjava/lang/Object;II)V", (void*)nAllocationData1D },
1560{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D },
1561{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;II)V", (void*)nAllocationData2D },
1562{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc },
1563{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;II)V", (void*)nAllocationData3D },
1564{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc },
1565{"rsnAllocationRead", "(JJLjava/lang/Object;I)V", (void*)nAllocationRead },
1566{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;II)V", (void*)nAllocationRead1D },
1567{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;II)V", (void*)nAllocationRead2D },
1568{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType},
1569{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D },
1570{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001571
Tim Murray7a629fa2013-11-19 12:45:54 -08001572{"rsnScriptBindAllocation", "(JJJI)V", (void*)nScriptBindAllocation },
1573{"rsnScriptSetTimeZone", "(JJ[B)V", (void*)nScriptSetTimeZone },
1574{"rsnScriptInvoke", "(JJI)V", (void*)nScriptInvoke },
1575{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV },
1576{"rsnScriptForEach", "(JJIJJ)V", (void*)nScriptForEach },
1577{"rsnScriptForEach", "(JJIJJ[B)V", (void*)nScriptForEachV },
1578{"rsnScriptForEachClipped", "(JJIJJIIIIII)V", (void*)nScriptForEachClipped },
1579{"rsnScriptForEachClipped", "(JJIJJ[BIIIIII)V", (void*)nScriptForEachClippedV },
1580{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI },
1581{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI },
1582{"rsnScriptSetVarJ", "(JJIJ)V", (void*)nScriptSetVarJ },
1583{"rsnScriptGetVarJ", "(JJI)J", (void*)nScriptGetVarJ },
1584{"rsnScriptSetVarF", "(JJIF)V", (void*)nScriptSetVarF },
1585{"rsnScriptGetVarF", "(JJI)F", (void*)nScriptGetVarF },
1586{"rsnScriptSetVarD", "(JJID)V", (void*)nScriptSetVarD },
1587{"rsnScriptGetVarD", "(JJI)D", (void*)nScriptGetVarD },
1588{"rsnScriptSetVarV", "(JJI[B)V", (void*)nScriptSetVarV },
1589{"rsnScriptGetVarV", "(JJI[B)V", (void*)nScriptGetVarV },
1590{"rsnScriptSetVarVE", "(JJI[BJ[I)V", (void*)nScriptSetVarVE },
1591{"rsnScriptSetVarObj", "(JJIJ)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001592
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001593{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate },
Tim Murray7a629fa2013-11-19 12:45:54 -08001594{"rsnScriptIntrinsicCreate", "(JIJ)J", (void*)nScriptIntrinsicCreate },
1595{"rsnScriptKernelIDCreate", "(JJII)J", (void*)nScriptKernelIDCreate },
1596{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate },
1597{"rsnScriptGroupCreate", "(J[I[I[I[I[I)J", (void*)nScriptGroupCreate },
1598{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput },
1599{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput },
1600{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute },
Jason Sams0011bcf2009-12-15 12:58:36 -08001601
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001602{"rsnProgramStoreCreate", "(JZZZZZZIII)J", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001603
Tim Murray7a629fa2013-11-19 12:45:54 -08001604{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants },
1605{"rsnProgramBindTexture", "(JJIJ)V", (void*)nProgramBindTexture },
1606{"rsnProgramBindSampler", "(JJIJ)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001607
Tim Murray7a629fa2013-11-19 12:45:54 -08001608{"rsnProgramFragmentCreate", "(JLjava/lang/String;[Ljava/lang/String;[I)J", (void*)nProgramFragmentCreate },
1609{"rsnProgramRasterCreate", "(JZI)J", (void*)nProgramRasterCreate },
1610{"rsnProgramVertexCreate", "(JLjava/lang/String;[Ljava/lang/String;[I)J", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001611
Tim Murraya78e9ad2013-11-15 13:08:30 -08001612{"rsnContextBindRootScript", "(JI)V", (void*)nContextBindRootScript },
1613{"rsnContextBindProgramStore", "(JI)V", (void*)nContextBindProgramStore },
1614{"rsnContextBindProgramFragment", "(JI)V", (void*)nContextBindProgramFragment },
1615{"rsnContextBindProgramVertex", "(JI)V", (void*)nContextBindProgramVertex },
1616{"rsnContextBindProgramRaster", "(JI)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001617
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001618{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001619
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001620{"rsnPathCreate", "(JIZJJF)J", (void*)nPathCreate },
Tim Murray7a629fa2013-11-19 12:45:54 -08001621{"rsnMeshCreate", "(J[I[I[I)J", (void*)nMeshCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001622
Tim Murray7a629fa2013-11-19 12:45:54 -08001623{"rsnMeshGetVertexBufferCount", "(JJ)I", (void*)nMeshGetVertexBufferCount },
1624{"rsnMeshGetIndexCount", "(JJ)I", (void*)nMeshGetIndexCount },
1625{"rsnMeshGetVertices", "(JJ[II)V", (void*)nMeshGetVertices },
1626{"rsnMeshGetIndices", "(JJ[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001627
Jason Samsd19f10d2009-05-22 14:03:28 -07001628};
1629
1630static int registerFuncs(JNIEnv *_env)
1631{
1632 return android::AndroidRuntime::registerNativeMethods(
1633 _env, classPathName, methods, NELEM(methods));
1634}
1635
1636// ---------------------------------------------------------------------------
1637
1638jint JNI_OnLoad(JavaVM* vm, void* reserved)
1639{
1640 JNIEnv* env = NULL;
1641 jint result = -1;
1642
Jason Samsd19f10d2009-05-22 14:03:28 -07001643 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
Steve Block3762c312012-01-06 19:20:56 +00001644 ALOGE("ERROR: GetEnv failed\n");
Jason Samsd19f10d2009-05-22 14:03:28 -07001645 goto bail;
1646 }
1647 assert(env != NULL);
1648
1649 if (registerFuncs(env) < 0) {
Ashok Bhat0e0c0882014-02-04 14:57:58 +00001650 ALOGE("ERROR: Renderscript native registration failed\n");
Jason Samsd19f10d2009-05-22 14:03:28 -07001651 goto bail;
1652 }
1653
1654 /* success -- return valid version number */
1655 result = JNI_VERSION_1_4;
1656
1657bail:
1658 return result;
1659}