blob: f9456904a2a264f79052e33c4d0bfb6da12fefb5 [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");
223 return (jint)rsDeviceCreate();
224}
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");
Tim Murray9578e642013-09-09 16:15:56 -0700244 return (jint)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,
Jason Sams11c8af92010-10-13 15:31:10 -0700249 int colorMin, int colorPref,
250 int alphaMin, int alphaPref,
251 int depthMin, int depthPref,
252 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700253 int samplesMin, int samplesPref, float samplesQ,
254 int 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");
Stephen Hines4382467a2011-08-01 15:02:34 -0700268 return (jint)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);
Jason Samsedbfabd2011-05-17 15:01:29 -0700358 return 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);
Jason Sams516c3192009-10-06 13:58:47 -0700373 return id;
374}
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);
395 jint *ptr = _env->GetIntArrayElements(data, NULL);
396 }
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);
Jason Sams718cd1f2009-12-23 14:35:29 -0800435 return (jint)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);
Tim Murraye926ddd2014-01-07 15:36:19 -0800502 LOG_API("nTypeCreate, 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);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800518 return (jint) 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,
Jason Sams6fcf2e12013-11-06 11:22:02 -0800665 jint count, jobject data, int sizeBytes, int 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
Jason Sams49a05d72010-12-29 14:31:29 -0800674// native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
Tim Murray7a629fa2013-11-19 12:45:54 -0800675nAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int 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,
Jason Sams6fcf2e12013-11-06 11:22:02 -0800686 jint w, jint h, jobject data, int sizeBytes, int 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{
Steve Block71f2cf12011-10-20 11:56:00 +0100800 ALOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700801
802 Asset* asset = reinterpret_cast<Asset*>(native_asset);
803
Tim Murray7a629fa2013-11-19 12:45:54 -0800804 jlong id = (jlong)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800805 return id;
806}
807
Tim Murray7a629fa2013-11-19 12:45:54 -0800808static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800809nFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800810{
811 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
812 if (mgr == NULL) {
813 return 0;
814 }
815
816 AutoJavaStringToUTF8 str(_env, _path);
817 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
818 if (asset == NULL) {
819 return 0;
820 }
821
Tim Murray7a629fa2013-11-19 12:45:54 -0800822 jlong id = (jlong)rsaFileA3DCreateFromAsset((RsContext)con, asset);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800823 return id;
824}
825
Tim Murray7a629fa2013-11-19 12:45:54 -0800826static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -0800827nFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800828{
829 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Tim Murray7a629fa2013-11-19 12:45:54 -0800830 jlong id = (jlong)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800831
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700832 return id;
833}
834
Tim Murray7a629fa2013-11-19 12:45:54 -0800835static jint
836nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700837{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700838 int32_t numEntries = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800839 rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700840 return numEntries;
841}
842
843static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800844nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700845{
Steve Block71f2cf12011-10-20 11:56:00 +0100846 ALOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700847 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
848
Tim Murraya78e9ad2013-11-15 13:08:30 -0800849 rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700850
851 for(jint i = 0; i < numEntries; i ++) {
852 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
853 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
854 }
855
856 free(fileEntries);
857}
858
859static int
Tim Murray7a629fa2013-11-19 12:45:54 -0800860nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700861{
Steve Block71f2cf12011-10-20 11:56:00 +0100862 ALOGV("______nFileA3D %u", (uint32_t) fileA3D);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800863 jint id = (jint)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700864 return id;
865}
Jason Samsd19f10d2009-05-22 14:03:28 -0700866
867// -----------------------------------
868
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700869static int
Tim Murraya78e9ad2013-11-15 13:08:30 -0800870nFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800871 jstring fileName, jfloat fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700872{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800873 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800874 jint id = (jint)rsFontCreateFromFile((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700875 fileNameUTF.c_str(), fileNameUTF.length(),
876 fontSize, dpi);
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700877
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800878 return id;
879}
880
881static int
Tim Murraya78e9ad2013-11-15 13:08:30 -0800882nFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800883 jstring name, jfloat fontSize, jint dpi, jint native_asset)
884{
885 Asset* asset = reinterpret_cast<Asset*>(native_asset);
886 AutoJavaStringToUTF8 nameUTF(_env, name);
887
Tim Murraya78e9ad2013-11-15 13:08:30 -0800888 jint id = (jint)rsFontCreateFromMemory((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700889 nameUTF.c_str(), nameUTF.length(),
890 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800891 asset->getBuffer(false), asset->getLength());
892 return id;
893}
894
895static int
Tim Murraya78e9ad2013-11-15 13:08:30 -0800896nFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800897 jfloat fontSize, jint dpi)
898{
899 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
900 if (mgr == NULL) {
901 return 0;
902 }
903
904 AutoJavaStringToUTF8 str(_env, _path);
905 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
906 if (asset == NULL) {
907 return 0;
908 }
909
Tim Murraya78e9ad2013-11-15 13:08:30 -0800910 jint id = (jint)rsFontCreateFromMemory((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700911 str.c_str(), str.length(),
912 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800913 asset->getBuffer(false), asset->getLength());
914 delete asset;
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700915 return id;
916}
917
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700918// -----------------------------------
919
920static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800921nScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700922{
Tim Murraye926ddd2014-01-07 15:36:19 -0800923 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 -0800924 rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700925}
926
927static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800928nScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700929{
Tim Murraye926ddd2014-01-07 15:36:19 -0800930 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800931 rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700932}
933
Tim Murray7c4caad2013-04-10 16:21:40 -0700934static jint
Tim Murray7a629fa2013-11-19 12:45:54 -0800935nScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700936{
Tim Murraye926ddd2014-01-07 15:36:19 -0800937 LOG_API("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700938 int value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800939 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700940 return value;
941}
942
Jason Sams4d339932010-05-11 14:03:58 -0700943static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800944nScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800945{
Tim Murraye926ddd2014-01-07 15:36:19 -0800946 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800947 rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800948}
949
950static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800951nScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
Stephen Hines031ec58c2010-10-11 10:54:21 -0700952{
Tim Murraye926ddd2014-01-07 15:36:19 -0800953 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800954 rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
Stephen Hines031ec58c2010-10-11 10:54:21 -0700955}
956
Tim Murray7c4caad2013-04-10 16:21:40 -0700957static jlong
Tim Murray7a629fa2013-11-19 12:45:54 -0800958nScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700959{
Tim Murraye926ddd2014-01-07 15:36:19 -0800960 LOG_API("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700961 jlong value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800962 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700963 return value;
964}
965
Stephen Hines031ec58c2010-10-11 10:54:21 -0700966static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800967nScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700968{
Tim Murraye926ddd2014-01-07 15:36:19 -0800969 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800970 rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700971}
972
Tim Murray7c4caad2013-04-10 16:21:40 -0700973static jfloat
Tim Murray7a629fa2013-11-19 12:45:54 -0800974nScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700975{
Tim Murraye926ddd2014-01-07 15:36:19 -0800976 LOG_API("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700977 jfloat value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800978 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700979 return value;
980}
981
Jason Sams4d339932010-05-11 14:03:58 -0700982static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800983nScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
Stephen Hinesca54ec32010-09-20 17:20:30 -0700984{
Tim Murraye926ddd2014-01-07 15:36:19 -0800985 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, slot, val);
Tim Murraya78e9ad2013-11-15 13:08:30 -0800986 rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
Stephen Hinesca54ec32010-09-20 17:20:30 -0700987}
988
Tim Murray7c4caad2013-04-10 16:21:40 -0700989static jdouble
Tim Murray7a629fa2013-11-19 12:45:54 -0800990nScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
Tim Murray7c4caad2013-04-10 16:21:40 -0700991{
Tim Murraye926ddd2014-01-07 15:36:19 -0800992 LOG_API("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700993 jdouble value = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -0800994 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
Tim Murray7c4caad2013-04-10 16:21:40 -0700995 return value;
996}
997
Stephen Hinesca54ec32010-09-20 17:20:30 -0700998static void
Tim Murray7a629fa2013-11-19 12:45:54 -0800999nScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -07001000{
Tim Murraye926ddd2014-01-07 15:36:19 -08001001 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Jason Sams4d339932010-05-11 14:03:58 -07001002 jint len = _env->GetArrayLength(data);
1003 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001004 rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
Jason Sams4d339932010-05-11 14:03:58 -07001005 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1006}
1007
Stephen Hinesadeb8092012-04-20 14:26:06 -07001008static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001009nScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Tim Murray7c4caad2013-04-10 16:21:40 -07001010{
Tim Murraye926ddd2014-01-07 15:36:19 -08001011 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murray7c4caad2013-04-10 16:21:40 -07001012 jint len = _env->GetArrayLength(data);
1013 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001014 rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
Tim Murray7c4caad2013-04-10 16:21:40 -07001015 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1016}
1017
1018static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001019nScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jlong elem, jintArray dims)
Stephen Hinesadeb8092012-04-20 14:26:06 -07001020{
Tim Murraye926ddd2014-01-07 15:36:19 -08001021 LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Stephen Hinesadeb8092012-04-20 14:26:06 -07001022 jint len = _env->GetArrayLength(data);
1023 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1024 jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1025 jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001026 rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
Stephen Hinesadeb8092012-04-20 14:26:06 -07001027 (const size_t*) dimsPtr, dimsLen);
1028 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1029 _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1030}
1031
Jason Samsd19f10d2009-05-22 14:03:28 -07001032
1033static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001034nScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -07001035{
Tim Murraye926ddd2014-01-07 15:36:19 -08001036 LOG_API("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
Romain Guy584a3752009-07-30 18:45:01 -07001037
1038 jint length = _env->GetArrayLength(timeZone);
1039 jbyte* timeZone_ptr;
1040 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1041
Tim Murraya78e9ad2013-11-15 13:08:30 -08001042 rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -07001043
1044 if (timeZone_ptr) {
1045 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1046 }
1047}
1048
Jason Samsfbf0b9e2009-08-13 12:59:04 -07001049static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001050nScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -07001051{
Tim Murraye926ddd2014-01-07 15:36:19 -08001052 LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001053 rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
Jason Samsbe2e8412009-09-16 15:04:38 -07001054}
1055
1056static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001057nScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -07001058{
Tim Murraye926ddd2014-01-07 15:36:19 -08001059 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Jason Sams4d339932010-05-11 14:03:58 -07001060 jint len = _env->GetArrayLength(data);
1061 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001062 rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
Jason Sams4d339932010-05-11 14:03:58 -07001063 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1064}
1065
Jason Sams6e494d32011-04-27 16:33:11 -07001066static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001067nScriptForEach(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001068 jlong script, jint slot, jlong ain, jlong aout)
Jason Sams6e494d32011-04-27 16:33:11 -07001069{
Tim Murraye926ddd2014-01-07 15:36:19 -08001070 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001071 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, NULL, 0);
Jason Sams6e494d32011-04-27 16:33:11 -07001072}
1073static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001074nScriptForEachV(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001075 jlong script, jint slot, jlong ain, jlong aout, jbyteArray params)
Jason Sams6e494d32011-04-27 16:33:11 -07001076{
Tim Murraye926ddd2014-01-07 15:36:19 -08001077 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Jason Sams6e494d32011-04-27 16:33:11 -07001078 jint len = _env->GetArrayLength(params);
1079 jbyte *ptr = _env->GetByteArrayElements(params, NULL);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001080 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, NULL, 0);
Jason Sams6e494d32011-04-27 16:33:11 -07001081 _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1082}
1083
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001084static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001085nScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001086 jlong script, jint slot, jlong ain, jlong aout,
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001087 jint xstart, jint xend,
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001088 jint ystart, jint yend, jint zstart, jint zend)
1089{
Tim Murraye926ddd2014-01-07 15:36:19 -08001090 LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001091 RsScriptCall sc;
1092 sc.xStart = xstart;
1093 sc.xEnd = xend;
1094 sc.yStart = ystart;
1095 sc.yEnd = yend;
1096 sc.zStart = zstart;
1097 sc.zEnd = zend;
1098 sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1099 sc.arrayStart = 0;
1100 sc.arrayEnd = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001101 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, &sc, sizeof(sc));
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001102}
1103
1104static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001105nScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con,
Tim Murray7a629fa2013-11-19 12:45:54 -08001106 jlong script, jint slot, jlong ain, jlong aout,
Stephen Hinesdac6ed02013-02-13 00:09:02 -08001107 jbyteArray params, jint xstart, jint xend,
1108 jint ystart, jint yend, jint zstart, jint zend)
1109{
Tim Murraye926ddd2014-01-07 15:36:19 -08001110 LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001111 jint len = _env->GetArrayLength(params);
1112 jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1113 RsScriptCall sc;
1114 sc.xStart = xstart;
1115 sc.xEnd = xend;
1116 sc.yStart = ystart;
1117 sc.yEnd = yend;
1118 sc.zStart = zstart;
1119 sc.zEnd = zend;
1120 sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1121 sc.arrayStart = 0;
1122 sc.arrayEnd = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001123 rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, &sc, sizeof(sc));
Tim Murrayeb8c29c2013-02-07 12:16:41 -08001124 _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1125}
Jason Samsfbf0b9e2009-08-13 12:59:04 -07001126
Jason Sams22534172009-08-04 16:58:20 -07001127// -----------------------------------
1128
Jason Samse4a06c52011-03-16 16:29:28 -07001129static jint
Tim Murraya78e9ad2013-11-15 13:08:30 -08001130nScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
Jason Samse4a06c52011-03-16 16:29:28 -07001131 jstring resName, jstring cacheDir,
1132 jbyteArray scriptRef, jint length)
Jason Sams22534172009-08-04 16:58:20 -07001133{
Tim Murraye926ddd2014-01-07 15:36:19 -08001134 LOG_API("nScriptCCreate, con(%p)", (RsContext)con);
Jason Sams22534172009-08-04 16:58:20 -07001135
Jason Samse4a06c52011-03-16 16:29:28 -07001136 AutoJavaStringToUTF8 resNameUTF(_env, resName);
1137 AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
1138 jint ret = 0;
Elliott Hughes8451b252011-04-07 19:17:57 -07001139 jbyte* script_ptr = NULL;
Jack Palevich43702d82009-05-28 13:38:16 -07001140 jint _exception = 0;
1141 jint remaining;
Jack Palevich43702d82009-05-28 13:38:16 -07001142 if (!scriptRef) {
1143 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001144 //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
Jack Palevich43702d82009-05-28 13:38:16 -07001145 goto exit;
1146 }
Jack Palevich43702d82009-05-28 13:38:16 -07001147 if (length < 0) {
1148 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001149 //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
Jack Palevich43702d82009-05-28 13:38:16 -07001150 goto exit;
1151 }
Jason Samse4a06c52011-03-16 16:29:28 -07001152 remaining = _env->GetArrayLength(scriptRef);
Jack Palevich43702d82009-05-28 13:38:16 -07001153 if (remaining < length) {
1154 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -07001155 //jniThrowException(_env, "java/lang/IllegalArgumentException",
1156 // "length > script.length - offset");
Jack Palevich43702d82009-05-28 13:38:16 -07001157 goto exit;
1158 }
Jason Samse4a06c52011-03-16 16:29:28 -07001159 script_ptr = (jbyte *)
Jack Palevich43702d82009-05-28 13:38:16 -07001160 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
Jack Palevich43702d82009-05-28 13:38:16 -07001161
Tim Murraya78e9ad2013-11-15 13:08:30 -08001162 //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
Jason Samse4a06c52011-03-16 16:29:28 -07001163
Tim Murraya78e9ad2013-11-15 13:08:30 -08001164 ret = (jint)rsScriptCCreate((RsContext)con,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -07001165 resNameUTF.c_str(), resNameUTF.length(),
1166 cacheDirUTF.c_str(), cacheDirUTF.length(),
Jason Samse4a06c52011-03-16 16:29:28 -07001167 (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -07001168
Jack Palevich43702d82009-05-28 13:38:16 -07001169exit:
Jason Samse4a06c52011-03-16 16:29:28 -07001170 if (script_ptr) {
1171 _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
Jack Palevich43702d82009-05-28 13:38:16 -07001172 _exception ? JNI_ABORT: 0);
1173 }
Jason Samsd19f10d2009-05-22 14:03:28 -07001174
Jason Samse4a06c52011-03-16 16:29:28 -07001175 return ret;
Jason Samsd19f10d2009-05-22 14:03:28 -07001176}
1177
Tim Murray7a629fa2013-11-19 12:45:54 -08001178static jlong
1179nScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
Jason Sams6ab97682012-08-10 12:09:43 -07001180{
Tim Murraye926ddd2014-01-07 15:36:19 -08001181 LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid);
Tim Murray7a629fa2013-11-19 12:45:54 -08001182 return (jlong)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
Jason Sams6ab97682012-08-10 12:09:43 -07001183}
1184
Tim Murray7a629fa2013-11-19 12:45:54 -08001185static jlong
1186nScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
Jason Sams08a81582012-09-18 12:32:10 -07001187{
Tim Murraye926ddd2014-01-07 15:36:19 -08001188 LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, (void *)sid, slot, sig);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001189 return (jint)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
Jason Sams08a81582012-09-18 12:32:10 -07001190}
1191
Tim Murray7a629fa2013-11-19 12:45:54 -08001192static jlong
1193nScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
Jason Sams08a81582012-09-18 12:32:10 -07001194{
Tim Murraye926ddd2014-01-07 15:36:19 -08001195 LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001196 return (jint)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
Jason Sams08a81582012-09-18 12:32:10 -07001197}
1198
Tim Murray7a629fa2013-11-19 12:45:54 -08001199static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001200nScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jintArray _kernels, jintArray _src,
Jason Sams08a81582012-09-18 12:32:10 -07001201 jintArray _dstk, jintArray _dstf, jintArray _types)
1202{
Tim Murraye926ddd2014-01-07 15:36:19 -08001203 LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con);
Jason Sams08a81582012-09-18 12:32:10 -07001204
1205 jint kernelsLen = _env->GetArrayLength(_kernels) * sizeof(int);
1206 jint *kernelsPtr = _env->GetIntArrayElements(_kernels, NULL);
1207 jint srcLen = _env->GetArrayLength(_src) * sizeof(int);
1208 jint *srcPtr = _env->GetIntArrayElements(_src, NULL);
1209 jint dstkLen = _env->GetArrayLength(_dstk) * sizeof(int);
1210 jint *dstkPtr = _env->GetIntArrayElements(_dstk, NULL);
1211 jint dstfLen = _env->GetArrayLength(_dstf) * sizeof(int);
1212 jint *dstfPtr = _env->GetIntArrayElements(_dstf, NULL);
1213 jint typesLen = _env->GetArrayLength(_types) * sizeof(int);
1214 jint *typesPtr = _env->GetIntArrayElements(_types, NULL);
1215
Tim Murraya78e9ad2013-11-15 13:08:30 -08001216 int id = (int)rsScriptGroupCreate((RsContext)con,
Jason Sams08a81582012-09-18 12:32:10 -07001217 (RsScriptKernelID *)kernelsPtr, kernelsLen,
1218 (RsScriptKernelID *)srcPtr, srcLen,
1219 (RsScriptKernelID *)dstkPtr, dstkLen,
1220 (RsScriptFieldID *)dstfPtr, dstfLen,
1221 (RsType *)typesPtr, typesLen);
1222
1223 _env->ReleaseIntArrayElements(_kernels, kernelsPtr, 0);
1224 _env->ReleaseIntArrayElements(_src, srcPtr, 0);
1225 _env->ReleaseIntArrayElements(_dstk, dstkPtr, 0);
1226 _env->ReleaseIntArrayElements(_dstf, dstfPtr, 0);
1227 _env->ReleaseIntArrayElements(_types, typesPtr, 0);
1228 return id;
1229}
1230
1231static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001232nScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
Jason Sams08a81582012-09-18 12:32:10 -07001233{
Tim Murraye926ddd2014-01-07 15:36:19 -08001234 LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
Jason Sams08a81582012-09-18 12:32:10 -07001235 (void *)gid, (void *)kid, (void *)alloc);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001236 rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
Jason Sams08a81582012-09-18 12:32:10 -07001237}
1238
1239static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001240nScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
Jason Sams08a81582012-09-18 12:32:10 -07001241{
Tim Murraye926ddd2014-01-07 15:36:19 -08001242 LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
Jason Sams08a81582012-09-18 12:32:10 -07001243 (void *)gid, (void *)kid, (void *)alloc);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001244 rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
Jason Sams08a81582012-09-18 12:32:10 -07001245}
1246
1247static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001248nScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
Jason Sams08a81582012-09-18 12:32:10 -07001249{
Tim Murraye926ddd2014-01-07 15:36:19 -08001250 LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001251 rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
Jason Sams08a81582012-09-18 12:32:10 -07001252}
1253
Jason Samsd19f10d2009-05-22 14:03:28 -07001254// ---------------------------------------------------------------------------
1255
Jason Samsd19f10d2009-05-22 14:03:28 -07001256static jint
Tim Murraya78e9ad2013-11-15 13:08:30 -08001257nProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
Jason Sams331bf9b2011-04-06 11:23:54 -07001258 jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1259 jboolean depthMask, jboolean ditherEnable,
1260 jint srcFunc, jint destFunc,
1261 jint depthFunc)
Jason Samsd19f10d2009-05-22 14:03:28 -07001262{
Tim Murraye926ddd2014-01-07 15:36:19 -08001263 LOG_API("nProgramStoreCreate, con(%p)", (RsContext)con);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001264 return (jint)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
Jason Sams331bf9b2011-04-06 11:23:54 -07001265 depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1266 (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
Jason Samsd19f10d2009-05-22 14:03:28 -07001267}
1268
Jason Sams0011bcf2009-12-15 12:58:36 -08001269// ---------------------------------------------------------------------------
1270
1271static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001272nProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001273{
Tim Murraye926ddd2014-01-07 15:36:19 -08001274 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 -08001275 rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
Jason Sams0011bcf2009-12-15 12:58:36 -08001276}
Jason Sams54c0ec12009-11-30 14:49:55 -08001277
Jason Sams68afd012009-12-17 16:55:08 -08001278static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001279nProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
Jason Sams68afd012009-12-17 16:55:08 -08001280{
Tim Murraye926ddd2014-01-07 15:36:19 -08001281 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 -08001282 rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
Jason Sams68afd012009-12-17 16:55:08 -08001283}
1284
1285static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001286nProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
Jason Sams68afd012009-12-17 16:55:08 -08001287{
Tim Murraye926ddd2014-01-07 15:36:19 -08001288 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 -08001289 rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
Jason Sams68afd012009-12-17 16:55:08 -08001290}
1291
Jason Samsd19f10d2009-05-22 14:03:28 -07001292// ---------------------------------------------------------------------------
1293
Tim Murray7a629fa2013-11-19 12:45:54 -08001294static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001295nProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001296 jobjectArray texNames, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001297{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001298 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001299 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1300 jint paramLen = _env->GetArrayLength(params);
1301
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001302 int texCount = _env->GetArrayLength(texNames);
1303 AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
1304 const char ** nameArray = names.c_str();
1305 size_t* sizeArray = names.c_str_len();
1306
Tim Murraye926ddd2014-01-07 15:36:19 -08001307 LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001308
Tim Murray7a629fa2013-11-19 12:45:54 -08001309 jlong ret = (jlong)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001310 nameArray, texCount, sizeArray,
1311 (uint32_t *)paramPtr, paramLen);
1312
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001313 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1314 return ret;
1315}
1316
1317
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001318// ---------------------------------------------------------------------------
1319
Tim Murray7a629fa2013-11-19 12:45:54 -08001320static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001321nProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001322 jobjectArray texNames, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001323{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001324 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams0011bcf2009-12-15 12:58:36 -08001325 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1326 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001327
Tim Murraye926ddd2014-01-07 15:36:19 -08001328 LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001329
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001330 int texCount = _env->GetArrayLength(texNames);
1331 AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
1332 const char ** nameArray = names.c_str();
1333 size_t* sizeArray = names.c_str_len();
1334
Tim Murray7a629fa2013-11-19 12:45:54 -08001335 jlong ret = (jlong)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
Alex Sakhartchouk2123b462012-02-15 16:21:46 -08001336 nameArray, texCount, sizeArray,
1337 (uint32_t *)paramPtr, paramLen);
1338
Jason Sams0011bcf2009-12-15 12:58:36 -08001339 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1340 return ret;
1341}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001342
Jason Samsebfb4362009-09-23 13:57:02 -07001343// ---------------------------------------------------------------------------
1344
Tim Murray7a629fa2013-11-19 12:45:54 -08001345static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001346nProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
Jason Samsebfb4362009-09-23 13:57:02 -07001347{
Tim Murraye926ddd2014-01-07 15:36:19 -08001348 LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, pointSprite, cull);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001349 return (jint)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
Jason Samsebfb4362009-09-23 13:57:02 -07001350}
1351
Jason Samsd19f10d2009-05-22 14:03:28 -07001352
1353// ---------------------------------------------------------------------------
1354
1355static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001356nContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001357{
Tim Murraye926ddd2014-01-07 15:36:19 -08001358 LOG_API("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001359 rsContextBindRootScript((RsContext)con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001360}
1361
1362static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001363nContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001364{
Tim Murraye926ddd2014-01-07 15:36:19 -08001365 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001366 rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001367}
1368
1369static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001370nContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001371{
Tim Murraye926ddd2014-01-07 15:36:19 -08001372 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, (RsProgramFragment)pf);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001373 rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001374}
1375
Jason Sams0826a6f2009-06-15 19:04:56 -07001376static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001377nContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001378{
Tim Murraye926ddd2014-01-07 15:36:19 -08001379 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001380 rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001381}
1382
Joe Onoratod7b37742009-08-09 22:57:44 -07001383static void
Tim Murraya78e9ad2013-11-15 13:08:30 -08001384nContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001385{
Tim Murraye926ddd2014-01-07 15:36:19 -08001386 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001387 rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
Jason Samsebfb4362009-09-23 13:57:02 -07001388}
1389
Joe Onoratod7b37742009-08-09 22:57:44 -07001390
Jason Sams02fb2cb2009-05-28 15:37:57 -07001391// ---------------------------------------------------------------------------
1392
Jason Sams02fb2cb2009-05-28 15:37:57 -07001393static jint
Tim Murraya78e9ad2013-11-15 13:08:30 -08001394nSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001395 jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001396{
Tim Murraye926ddd2014-01-07 15:36:19 -08001397 LOG_API("nSamplerCreate, con(%p)", (RsContext)con);
Tim Murraya78e9ad2013-11-15 13:08:30 -08001398 return (jint)rsSamplerCreate((RsContext)con,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001399 (RsSamplerValue)magFilter,
1400 (RsSamplerValue)minFilter,
1401 (RsSamplerValue)wrapS,
1402 (RsSamplerValue)wrapT,
1403 (RsSamplerValue)wrapR,
1404 aniso);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001405}
1406
Jason Samsbba134c2009-06-22 15:49:21 -07001407// ---------------------------------------------------------------------------
1408
Tim Murray7a629fa2013-11-19 12:45:54 -08001409static jlong
1410nPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jint _loop, jfloat q) {
Tim Murraye926ddd2014-01-07 15:36:19 -08001411 LOG_API("nPathCreate, con(%p)", (RsContext)con);
Jason Samsf15ed012011-10-31 13:23:43 -07001412
Tim Murray7a629fa2013-11-19 12:45:54 -08001413 jlong id = (jlong)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic,
1414 (RsAllocation)_vtx,
1415 (RsAllocation)_loop, q);
Jason Samsf15ed012011-10-31 13:23:43 -07001416 return id;
1417}
1418
Tim Murray7a629fa2013-11-19 12:45:54 -08001419static jlong
Tim Murraya78e9ad2013-11-15 13:08:30 -08001420nMeshCreate(JNIEnv *_env, jobject _this, jlong con, jintArray _vtx, jintArray _idx, jintArray _prim)
Jason Samsbba134c2009-06-22 15:49:21 -07001421{
Tim Murraye926ddd2014-01-07 15:36:19 -08001422 LOG_API("nMeshCreate, con(%p)", (RsContext)con);
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001423
1424 jint vtxLen = _env->GetArrayLength(_vtx);
1425 jint *vtxPtr = _env->GetIntArrayElements(_vtx, NULL);
1426 jint idxLen = _env->GetArrayLength(_idx);
1427 jint *idxPtr = _env->GetIntArrayElements(_idx, NULL);
1428 jint primLen = _env->GetArrayLength(_prim);
1429 jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1430
Tim Murraya78e9ad2013-11-15 13:08:30 -08001431 int id = (int)rsMeshCreate((RsContext)con,
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001432 (RsAllocation *)vtxPtr, vtxLen,
1433 (RsAllocation *)idxPtr, idxLen,
1434 (uint32_t *)primPtr, primLen);
1435
1436 _env->ReleaseIntArrayElements(_vtx, vtxPtr, 0);
1437 _env->ReleaseIntArrayElements(_idx, idxPtr, 0);
1438 _env->ReleaseIntArrayElements(_prim, primPtr, 0);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001439 return id;
1440}
1441
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001442static jint
Tim Murray7a629fa2013-11-19 12:45:54 -08001443nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001444{
Tim Murraye926ddd2014-01-07 15:36:19 -08001445 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001446 jint vtxCount = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001447 rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001448 return vtxCount;
1449}
1450
1451static jint
Tim Murray7a629fa2013-11-19 12:45:54 -08001452nMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001453{
Tim Murraye926ddd2014-01-07 15:36:19 -08001454 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001455 jint idxCount = 0;
Tim Murraya78e9ad2013-11-15 13:08:30 -08001456 rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001457 return idxCount;
1458}
1459
1460static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001461nMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001462{
Tim Murraye926ddd2014-01-07 15:36:19 -08001463 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001464
1465 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Tim Murraya78e9ad2013-11-15 13:08:30 -08001466 rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001467
1468 for(jint i = 0; i < numVtxIDs; i ++) {
1469 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1470 }
1471
1472 free(allocs);
1473}
1474
1475static void
Tim Murray7a629fa2013-11-19 12:45:54 -08001476nMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001477{
Tim Murraye926ddd2014-01-07 15:36:19 -08001478 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001479
1480 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1481 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1482
Tim Murraya78e9ad2013-11-15 13:08:30 -08001483 rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001484
1485 for(jint i = 0; i < numIndices; i ++) {
1486 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1487 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1488 }
1489
1490 free(allocs);
1491 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001492}
1493
1494// ---------------------------------------------------------------------------
1495
Jason Samsd19f10d2009-05-22 14:03:28 -07001496
Jason Sams94d8e90a2009-06-10 16:09:05 -07001497static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001498
1499static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001500{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001501
Tim Murraya78e9ad2013-11-15 13:08:30 -08001502{"nDeviceCreate", "()J", (void*)nDeviceCreate },
1503{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy },
1504{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig },
1505{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage },
1506{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1507{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage },
Jason Sams1c415172010-11-08 17:06:46 -08001508
Tim Murraya78e9ad2013-11-15 13:08:30 -08001509{"nContextInitToClient", "(J)V", (void*)nContextInitToClient },
1510{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001511
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001512
Jason Sams2e1872f2010-08-17 16:25:41 -07001513// All methods below are thread protected in java.
Tim Murraya78e9ad2013-11-15 13:08:30 -08001514{"rsnContextCreate", "(JIII)J", (void*)nContextCreate },
1515{"rsnContextCreateGL", "(JIIIIIIIIIIIIFI)J", (void*)nContextCreateGL },
1516{"rsnContextFinish", "(J)V", (void*)nContextFinish },
1517{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority },
1518{"rsnContextSetSurface", "(JIILandroid/view/Surface;)V", (void*)nContextSetSurface },
1519{"rsnContextDestroy", "(J)V", (void*)nContextDestroy },
1520{"rsnContextDump", "(JI)V", (void*)nContextDump },
1521{"rsnContextPause", "(J)V", (void*)nContextPause },
1522{"rsnContextResume", "(J)V", (void*)nContextResume },
1523{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage },
Tim Murray7a629fa2013-11-19 12:45:54 -08001524{"rsnAssignName", "(JJ[B)V", (void*)nAssignName },
1525{"rsnGetName", "(JJ)Ljava/lang/String;", (void*)nGetName },
1526{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001527
Tim Murray7a629fa2013-11-19 12:45:54 -08001528{"rsnFileA3DCreateFromFile", "(JLjava/lang/String;)J", (void*)nFileA3DCreateFromFile },
1529{"rsnFileA3DCreateFromAssetStream", "(JI)J", (void*)nFileA3DCreateFromAssetStream },
1530{"rsnFileA3DCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J", (void*)nFileA3DCreateFromAsset },
1531{"rsnFileA3DGetNumIndexEntries", "(JJ)I", (void*)nFileA3DGetNumIndexEntries },
1532{"rsnFileA3DGetIndexEntries", "(JJI[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
1533{"rsnFileA3DGetEntryByIndex", "(JJI)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001534
Tim Murraya78e9ad2013-11-15 13:08:30 -08001535{"rsnFontCreateFromFile", "(JLjava/lang/String;FI)I", (void*)nFontCreateFromFile },
1536{"rsnFontCreateFromAssetStream", "(JLjava/lang/String;FII)I", (void*)nFontCreateFromAssetStream },
1537{"rsnFontCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)I", (void*)nFontCreateFromAsset },
Jason Samsd19f10d2009-05-22 14:03:28 -07001538
Tim Murray7a629fa2013-11-19 12:45:54 -08001539{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate },
1540{"rsnElementCreate2", "(J[I[Ljava/lang/String;[I)J", (void*)nElementCreate2 },
1541{"rsnElementGetNativeData", "(JJ[I)V", (void*)nElementGetNativeData },
1542{"rsnElementGetSubElements", "(JJ[I[Ljava/lang/String;[I)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001543
Tim Murray7a629fa2013-11-19 12:45:54 -08001544{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate },
1545{"rsnTypeGetNativeData", "(JJ[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001546
Tim Murray7a629fa2013-11-19 12:45:54 -08001547{"rsnAllocationCreateTyped", "(JJIII)J", (void*)nAllocationCreateTyped },
1548{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap },
1549{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation },
1550{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08001551
Tim Murray7a629fa2013-11-19 12:45:54 -08001552{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
1553{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
Jason Sams4ef66502010-12-10 16:03:15 -08001554
Tim Murray7a629fa2013-11-19 12:45:54 -08001555{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll },
1556{"rsnAllocationGetSurface", "(JJ)Landroid/view/Surface;", (void*)nAllocationGetSurface },
1557{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface },
1558{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend },
1559{"rsnAllocationIoReceive", "(JJ)V", (void*)nAllocationIoReceive },
1560{"rsnAllocationData1D", "(JJIIILjava/lang/Object;II)V", (void*)nAllocationData1D },
1561{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D },
1562{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;II)V", (void*)nAllocationData2D },
1563{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc },
1564{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;II)V", (void*)nAllocationData3D },
1565{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc },
1566{"rsnAllocationRead", "(JJLjava/lang/Object;I)V", (void*)nAllocationRead },
1567{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;II)V", (void*)nAllocationRead1D },
1568{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;II)V", (void*)nAllocationRead2D },
1569{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType},
1570{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D },
1571{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001572
Tim Murray7a629fa2013-11-19 12:45:54 -08001573{"rsnScriptBindAllocation", "(JJJI)V", (void*)nScriptBindAllocation },
1574{"rsnScriptSetTimeZone", "(JJ[B)V", (void*)nScriptSetTimeZone },
1575{"rsnScriptInvoke", "(JJI)V", (void*)nScriptInvoke },
1576{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV },
1577{"rsnScriptForEach", "(JJIJJ)V", (void*)nScriptForEach },
1578{"rsnScriptForEach", "(JJIJJ[B)V", (void*)nScriptForEachV },
1579{"rsnScriptForEachClipped", "(JJIJJIIIIII)V", (void*)nScriptForEachClipped },
1580{"rsnScriptForEachClipped", "(JJIJJ[BIIIIII)V", (void*)nScriptForEachClippedV },
1581{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI },
1582{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI },
1583{"rsnScriptSetVarJ", "(JJIJ)V", (void*)nScriptSetVarJ },
1584{"rsnScriptGetVarJ", "(JJI)J", (void*)nScriptGetVarJ },
1585{"rsnScriptSetVarF", "(JJIF)V", (void*)nScriptSetVarF },
1586{"rsnScriptGetVarF", "(JJI)F", (void*)nScriptGetVarF },
1587{"rsnScriptSetVarD", "(JJID)V", (void*)nScriptSetVarD },
1588{"rsnScriptGetVarD", "(JJI)D", (void*)nScriptGetVarD },
1589{"rsnScriptSetVarV", "(JJI[B)V", (void*)nScriptSetVarV },
1590{"rsnScriptGetVarV", "(JJI[B)V", (void*)nScriptGetVarV },
1591{"rsnScriptSetVarVE", "(JJI[BJ[I)V", (void*)nScriptSetVarVE },
1592{"rsnScriptSetVarObj", "(JJIJ)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001593
Tim Murraya78e9ad2013-11-15 13:08:30 -08001594{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)I", (void*)nScriptCCreate },
Tim Murray7a629fa2013-11-19 12:45:54 -08001595{"rsnScriptIntrinsicCreate", "(JIJ)J", (void*)nScriptIntrinsicCreate },
1596{"rsnScriptKernelIDCreate", "(JJII)J", (void*)nScriptKernelIDCreate },
1597{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate },
1598{"rsnScriptGroupCreate", "(J[I[I[I[I[I)J", (void*)nScriptGroupCreate },
1599{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput },
1600{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput },
1601{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute },
Jason Sams0011bcf2009-12-15 12:58:36 -08001602
Tim Murraya78e9ad2013-11-15 13:08:30 -08001603{"rsnProgramStoreCreate", "(JZZZZZZIII)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001604
Tim Murray7a629fa2013-11-19 12:45:54 -08001605{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants },
1606{"rsnProgramBindTexture", "(JJIJ)V", (void*)nProgramBindTexture },
1607{"rsnProgramBindSampler", "(JJIJ)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001608
Tim Murray7a629fa2013-11-19 12:45:54 -08001609{"rsnProgramFragmentCreate", "(JLjava/lang/String;[Ljava/lang/String;[I)J", (void*)nProgramFragmentCreate },
1610{"rsnProgramRasterCreate", "(JZI)J", (void*)nProgramRasterCreate },
1611{"rsnProgramVertexCreate", "(JLjava/lang/String;[Ljava/lang/String;[I)J", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001612
Tim Murraya78e9ad2013-11-15 13:08:30 -08001613{"rsnContextBindRootScript", "(JI)V", (void*)nContextBindRootScript },
1614{"rsnContextBindProgramStore", "(JI)V", (void*)nContextBindProgramStore },
1615{"rsnContextBindProgramFragment", "(JI)V", (void*)nContextBindProgramFragment },
1616{"rsnContextBindProgramVertex", "(JI)V", (void*)nContextBindProgramVertex },
1617{"rsnContextBindProgramRaster", "(JI)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001618
Tim Murraya78e9ad2013-11-15 13:08:30 -08001619{"rsnSamplerCreate", "(JIIIIIF)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001620
Tim Murray7a629fa2013-11-19 12:45:54 -08001621{"rsnPathCreate", "(JIZJIF)J", (void*)nPathCreate },
1622{"rsnMeshCreate", "(J[I[I[I)J", (void*)nMeshCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001623
Tim Murray7a629fa2013-11-19 12:45:54 -08001624{"rsnMeshGetVertexBufferCount", "(JJ)I", (void*)nMeshGetVertexBufferCount },
1625{"rsnMeshGetIndexCount", "(JJ)I", (void*)nMeshGetIndexCount },
1626{"rsnMeshGetVertices", "(JJ[II)V", (void*)nMeshGetVertices },
1627{"rsnMeshGetIndices", "(JJ[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001628
Jason Samsd19f10d2009-05-22 14:03:28 -07001629};
1630
1631static int registerFuncs(JNIEnv *_env)
1632{
1633 return android::AndroidRuntime::registerNativeMethods(
1634 _env, classPathName, methods, NELEM(methods));
1635}
1636
1637// ---------------------------------------------------------------------------
1638
1639jint JNI_OnLoad(JavaVM* vm, void* reserved)
1640{
1641 JNIEnv* env = NULL;
1642 jint result = -1;
1643
Jason Samsd19f10d2009-05-22 14:03:28 -07001644 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
Steve Block3762c312012-01-06 19:20:56 +00001645 ALOGE("ERROR: GetEnv failed\n");
Jason Samsd19f10d2009-05-22 14:03:28 -07001646 goto bail;
1647 }
1648 assert(env != NULL);
1649
1650 if (registerFuncs(env) < 0) {
Steve Block3762c312012-01-06 19:20:56 +00001651 ALOGE("ERROR: MediaPlayer native registration failed\n");
Jason Samsd19f10d2009-05-22 14:03:28 -07001652 goto bail;
1653 }
1654
1655 /* success -- return valid version number */
1656 result = JNI_VERSION_1_4;
1657
1658bail:
1659 return result;
1660}