blob: 94f19b34661db8a90233ede3be3b70d65d723ecf [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
Mathias Agopian000479f2010-02-09 17:46:37 -080026#include <surfaceflinger/Surface.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070027
Jason Samsffe9f482009-06-01 17:45:53 -070028#include <core/SkBitmap.h>
Romain Guy650a3eb2009-08-31 14:06:43 -070029#include <core/SkPixelRef.h>
30#include <core/SkStream.h>
31#include <core/SkTemplates.h>
32#include <images/SkImageDecoder.h>
Jason Samsffe9f482009-06-01 17:45:53 -070033
Romain Guy650a3eb2009-08-31 14:06:43 -070034#include <utils/Asset.h>
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080035#include <utils/AssetManager.h>
Romain Guy650a3eb2009-08-31 14:06:43 -070036#include <utils/ResourceTypes.h>
Jason Samsf29ca502009-06-23 12:22:47 -070037
Jason Samsd19f10d2009-05-22 14:03:28 -070038#include "jni.h"
39#include "JNIHelp.h"
40#include "android_runtime/AndroidRuntime.h"
Jim Milleree956052010-08-19 18:56:00 -070041#include "android_runtime/android_view_Surface.h"
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080042#include "android_runtime/android_util_AssetManager.h"
Jason Samsd19f10d2009-05-22 14:03:28 -070043
Jason Samse29d4712009-07-23 15:19:03 -070044#include <RenderScript.h>
45#include <RenderScriptEnv.h>
Jason Samsfaa32b32011-06-20 16:58:04 -070046#include <gui/SurfaceTexture.h>
47#include <gui/SurfaceTextureClient.h>
48#include <android_runtime/android_graphics_SurfaceTexture.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070049
Steve Block3762c312012-01-06 19:20:56 +000050//#define LOG_API ALOGE
Jason Samsd19f10d2009-05-22 14:03:28 -070051#define LOG_API(...)
52
53using namespace android;
54
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080055class AutoJavaStringToUTF8 {
56public:
57 AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str)
58 {
59 fCStr = env->GetStringUTFChars(str, NULL);
60 fLength = env->GetStringUTFLength(str);
61 }
62 ~AutoJavaStringToUTF8()
63 {
64 fEnv->ReleaseStringUTFChars(fJStr, fCStr);
65 }
66 const char* c_str() const { return fCStr; }
67 jsize length() const { return fLength; }
68
69private:
70 JNIEnv* fEnv;
71 jstring fJStr;
72 const char* fCStr;
73 jsize fLength;
74};
75
Jason Samsd19f10d2009-05-22 14:03:28 -070076// ---------------------------------------------------------------------------
77
Jason Samsffe9f482009-06-01 17:45:53 -070078static jfieldID gContextId = 0;
79static jfieldID gNativeBitmapID = 0;
Jason Sams43ee06852009-08-12 17:54:11 -070080static jfieldID gTypeNativeCache = 0;
Jason Samsd19f10d2009-05-22 14:03:28 -070081
82static void _nInit(JNIEnv *_env, jclass _this)
83{
Jason Samsd19f10d2009-05-22 14:03:28 -070084 gContextId = _env->GetFieldID(_this, "mContext", "I");
Jason Samsffe9f482009-06-01 17:45:53 -070085
86 jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
87 gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
Jason Samsd19f10d2009-05-22 14:03:28 -070088}
89
Jason Samsd19f10d2009-05-22 14:03:28 -070090// ---------------------------------------------------------------------------
91
Jason Sams3eaa338e2009-06-10 15:04:38 -070092static void
Jason Sams2e1872f2010-08-17 16:25:41 -070093nContextFinish(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams96ed4cf2010-06-15 12:15:57 -070094{
Jason Sams96ed4cf2010-06-15 12:15:57 -070095 LOG_API("nContextFinish, con(%p)", con);
96 rsContextFinish(con);
97}
98
99static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700100nAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
Jason Sams3eaa338e2009-06-10 15:04:38 -0700101{
Jason Sams07ae4062009-08-27 20:23:34 -0700102 LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
Jason Sams3eaa338e2009-06-10 15:04:38 -0700103 jint len = _env->GetArrayLength(str);
104 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -0700105 rsAssignName(con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -0700106 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
107}
108
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700109static jstring
Jason Sams2e1872f2010-08-17 16:25:41 -0700110nGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700111{
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700112 LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700113 const char *name = NULL;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700114 rsaGetName(con, (void *)obj, &name);
115 if(name == NULL || strlen(name) == 0) {
116 return NULL;
117 }
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700118 return _env->NewStringUTF(name);
119}
120
Jason Sams7ce033d2009-08-18 14:14:24 -0700121static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700122nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Jason Sams7ce033d2009-08-18 14:14:24 -0700123{
Jason Sams7ce033d2009-08-18 14:14:24 -0700124 LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
Jason Sams9c25aee2010-10-14 17:57:30 -0700125 rsObjDestroy(con, (void *)obj);
Jason Sams7ce033d2009-08-18 14:14:24 -0700126}
127
Jason Sams3eaa338e2009-06-10 15:04:38 -0700128// ---------------------------------------------------------------------------
129
Jason Samsd19f10d2009-05-22 14:03:28 -0700130static jint
131nDeviceCreate(JNIEnv *_env, jobject _this)
132{
133 LOG_API("nDeviceCreate");
134 return (jint)rsDeviceCreate();
135}
136
137static void
138nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
139{
140 LOG_API("nDeviceDestroy");
141 return rsDeviceDestroy((RsDevice)dev);
142}
143
Jason Samsebfb4362009-09-23 13:57:02 -0700144static void
145nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
146{
147 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
148 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
149}
150
Jason Samsd19f10d2009-05-22 14:03:28 -0700151static jint
Stephen Hines4382467a2011-08-01 15:02:34 -0700152nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer)
Jason Samsd19f10d2009-05-22 14:03:28 -0700153{
154 LOG_API("nContextCreate");
Stephen Hines4382467a2011-08-01 15:02:34 -0700155 return (jint)rsContextCreate((RsDevice)dev, ver, sdkVer);
Jason Sams704ff642010-02-09 16:05:07 -0800156}
157
158static jint
Stephen Hines4382467a2011-08-01 15:02:34 -0700159nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700160 int colorMin, int colorPref,
161 int alphaMin, int alphaPref,
162 int depthMin, int depthPref,
163 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700164 int samplesMin, int samplesPref, float samplesQ,
165 int dpi)
Jason Sams704ff642010-02-09 16:05:07 -0800166{
Jason Sams11c8af92010-10-13 15:31:10 -0700167 RsSurfaceConfig sc;
168 sc.alphaMin = alphaMin;
169 sc.alphaPref = alphaPref;
170 sc.colorMin = colorMin;
171 sc.colorPref = colorPref;
172 sc.depthMin = depthMin;
173 sc.depthPref = depthPref;
174 sc.samplesMin = samplesMin;
175 sc.samplesPref = samplesPref;
176 sc.samplesQ = samplesQ;
177
Jason Sams704ff642010-02-09 16:05:07 -0800178 LOG_API("nContextCreateGL");
Stephen Hines4382467a2011-08-01 15:02:34 -0700179 return (jint)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
Jason Samsd19f10d2009-05-22 14:03:28 -0700180}
181
182static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700183nContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800184{
Jason Sams7d787b42009-11-15 12:14:26 -0800185 LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
186 rsContextSetPriority(con, p);
187}
188
189
190
191static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700192nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800193{
Jason Sams3bc47d42009-11-12 15:10:25 -0800194 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800195
Alex Sakhartchouk6c72eec2011-05-17 12:32:47 -0700196 ANativeWindow * window = NULL;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800197 if (wnd == NULL) {
198
199 } else {
Alex Sakhartchouk6c72eec2011-05-17 12:32:47 -0700200 window = android_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800201 }
202
Alex Sakhartchouk6c72eec2011-05-17 12:32:47 -0700203 rsContextSetSurface(con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800204}
205
206static void
Jason Samsfaa32b32011-06-20 16:58:04 -0700207nContextSetSurfaceTexture(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject sur)
208{
209 LOG_API("nContextSetSurfaceTexture, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)sur);
210
211 sp<ANativeWindow> window;
212 sp<SurfaceTexture> st;
213 if (sur == 0) {
214
215 } else {
216 st = SurfaceTexture_getSurfaceTexture(_env, sur);
217 window = new SurfaceTextureClient(st);
218 }
219
220 rsContextSetSurface(con, width, height, window.get());
221}
222
223static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700224nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700225{
Jason Sams2e1872f2010-08-17 16:25:41 -0700226 LOG_API("nContextDestroy, con(%p)", con);
227 rsContextDestroy(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700228}
229
Jason Sams715333b2009-11-17 17:26:46 -0800230static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700231nContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800232{
Jason Sams715333b2009-11-17 17:26:46 -0800233 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
234 rsContextDump((RsContext)con, bits);
235}
Jason Samsd19f10d2009-05-22 14:03:28 -0700236
237static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700238nContextPause(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700239{
Jason Sams65e7aa52009-09-24 17:38:20 -0700240 LOG_API("nContextPause, con(%p)", con);
241 rsContextPause(con);
242}
243
244static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700245nContextResume(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700246{
Jason Sams65e7aa52009-09-24 17:38:20 -0700247 LOG_API("nContextResume, con(%p)", con);
248 rsContextResume(con);
249}
250
Jason Sams1c415172010-11-08 17:06:46 -0800251
252static jstring
253nContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
254{
255 LOG_API("nContextGetErrorMessage, con(%p)", con);
256 char buf[1024];
257
258 size_t receiveLen;
259 uint32_t subID;
Jason Sams65bdaf12011-04-26 14:50:00 -0700260 int id = rsContextGetMessage(con,
261 buf, sizeof(buf),
262 &receiveLen, sizeof(receiveLen),
Jason Samsedbfabd2011-05-17 15:01:29 -0700263 &subID, sizeof(subID));
Jason Sams1c415172010-11-08 17:06:46 -0800264 if (!id && receiveLen) {
Steve Block71f2cf12011-10-20 11:56:00 +0100265 ALOGV("message receive buffer too small. %i", receiveLen);
Jason Sams1c415172010-11-08 17:06:46 -0800266 }
267 return _env->NewStringUTF(buf);
268}
269
Jason Samsedbfabd2011-05-17 15:01:29 -0700270static jint
Jason Sams1c415172010-11-08 17:06:46 -0800271nContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
Jason Sams516c3192009-10-06 13:58:47 -0700272{
Jason Sams516c3192009-10-06 13:58:47 -0700273 jint len = _env->GetArrayLength(data);
274 LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
275 jint *ptr = _env->GetIntArrayElements(data, NULL);
276 size_t receiveLen;
Jason Sams1c415172010-11-08 17:06:46 -0800277 uint32_t subID;
Jason Sams65bdaf12011-04-26 14:50:00 -0700278 int id = rsContextGetMessage(con,
279 ptr, len * 4,
280 &receiveLen, sizeof(receiveLen),
Jason Samsedbfabd2011-05-17 15:01:29 -0700281 &subID, sizeof(subID));
Jason Sams516c3192009-10-06 13:58:47 -0700282 if (!id && receiveLen) {
Steve Block71f2cf12011-10-20 11:56:00 +0100283 ALOGV("message receive buffer too small. %i", receiveLen);
Jason Sams516c3192009-10-06 13:58:47 -0700284 }
285 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Samsedbfabd2011-05-17 15:01:29 -0700286 return id;
Jason Sams1c415172010-11-08 17:06:46 -0800287}
288
289static jint
Jason Samsedbfabd2011-05-17 15:01:29 -0700290nContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData)
Jason Sams1c415172010-11-08 17:06:46 -0800291{
292 LOG_API("nContextPeekMessage, con(%p)", con);
293 jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
294 size_t receiveLen;
295 uint32_t subID;
Jason Sams65bdaf12011-04-26 14:50:00 -0700296 int id = rsContextPeekMessage(con, &receiveLen, sizeof(receiveLen),
Jason Samsedbfabd2011-05-17 15:01:29 -0700297 &subID, sizeof(subID));
Jason Sams1c415172010-11-08 17:06:46 -0800298 auxDataPtr[0] = (jint)subID;
299 auxDataPtr[1] = (jint)receiveLen;
300 _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
Jason Sams516c3192009-10-06 13:58:47 -0700301 return id;
302}
303
Jason Sams2e1872f2010-08-17 16:25:41 -0700304static void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700305{
Jason Sams516c3192009-10-06 13:58:47 -0700306 LOG_API("nContextInitToClient, con(%p)", con);
307 rsContextInitToClient(con);
308}
309
Jason Sams2e1872f2010-08-17 16:25:41 -0700310static void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700311{
Jason Sams516c3192009-10-06 13:58:47 -0700312 LOG_API("nContextDeinitToClient, con(%p)", con);
313 rsContextDeinitToClient(con);
314}
315
316
Jason Sams718cd1f2009-12-23 14:35:29 -0800317static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700318nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700319{
Jason Sams718cd1f2009-12-23 14:35:29 -0800320 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
321 return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700322}
323
324static jint
Jason Sams70d4e502010-09-02 17:35:23 -0700325nElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700326{
Jason Sams718cd1f2009-12-23 14:35:29 -0800327 int fieldCount = _env->GetArrayLength(_ids);
Jason Sams704ff642010-02-09 16:05:07 -0800328 LOG_API("nElementCreate2, con(%p)", con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800329
330 jint *ids = _env->GetIntArrayElements(_ids, NULL);
Jason Sams70d4e502010-09-02 17:35:23 -0700331 jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
Jason Sams718cd1f2009-12-23 14:35:29 -0800332 const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
333 size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
334
335 for (int ct=0; ct < fieldCount; ct++) {
336 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
337 nameArray[ct] = _env->GetStringUTFChars(s, NULL);
338 sizeArray[ct] = _env->GetStringUTFLength(s);
339 }
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700340 jint id = (jint)rsElementCreate2(con,
341 (RsElement *)ids, fieldCount,
Jason Sams7a22e102011-05-06 14:14:30 -0700342 nameArray, fieldCount * sizeof(size_t), sizeArray,
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700343 (const uint32_t *)arraySizes, fieldCount);
Jason Sams718cd1f2009-12-23 14:35:29 -0800344 for (int ct=0; ct < fieldCount; ct++) {
345 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
346 _env->ReleaseStringUTFChars(s, nameArray[ct]);
347 }
348 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
Jason Sams70d4e502010-09-02 17:35:23 -0700349 _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
Jason Sams718cd1f2009-12-23 14:35:29 -0800350 free(nameArray);
351 free(sizeArray);
352 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700353}
354
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700355static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700356nElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700357{
358 int dataSize = _env->GetArrayLength(_elementData);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700359 LOG_API("nElementGetNativeData, con(%p)", con);
360
361 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
362 assert(dataSize == 5);
363
364 uint32_t elementData[5];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700365 rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700366
367 for(jint i = 0; i < dataSize; i ++) {
368 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
369 }
370}
371
372
373static void
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700374nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id,
375 jintArray _IDs,
376 jobjectArray _names,
377 jintArray _arraySizes)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700378{
379 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700380 LOG_API("nElementGetSubElements, con(%p)", con);
381
382 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
383 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700384 uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700385
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700386 rsaElementGetSubElements(con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700387
Jason Sams11c8af92010-10-13 15:31:10 -0700388 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700389 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
390 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700391 _env->SetIntArrayRegion(_arraySizes, i, 1, (const jint*)&arraySizes[i]);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700392 }
393
394 free(ids);
395 free(names);
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700396 free(arraySizes);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700397}
398
Jason Samsd19f10d2009-05-22 14:03:28 -0700399// -----------------------------------
400
Jason Sams3b9c52a2010-10-14 17:48:46 -0700401static int
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800402nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
403 jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
Jason Samsd19f10d2009-05-22 14:03:28 -0700404{
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800405 LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
406 con, eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700407
Jason Samsc5765372011-04-28 18:26:48 -0700408 jint id = (jint)rsTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700409 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700410}
411
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700412static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700413nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700414{
415 // We are packing 6 items: mDimX; mDimY; mDimZ;
416 // mDimLOD; mDimFaces; mElement; into typeData
417 int elementCount = _env->GetArrayLength(_typeData);
418
419 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700420 LOG_API("nTypeCreate, con(%p)", con);
421
422 uint32_t typeData[6];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700423 rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700424
425 for(jint i = 0; i < elementCount; i ++) {
426 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
427 }
428}
429
Jason Samsd19f10d2009-05-22 14:03:28 -0700430// -----------------------------------
431
432static jint
Jason Sams857d0c72011-11-23 15:02:15 -0800433nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage, jint pointer)
Jason Samsd19f10d2009-05-22 14:03:28 -0700434{
Jason Sams857d0c72011-11-23 15:02:15 -0800435 LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", con, (RsElement)type, mips, usage, (void *)pointer);
436 return (jint) rsAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uint32_t)pointer);
Jason Samsd19f10d2009-05-22 14:03:28 -0700437}
438
Jason Samsd19f10d2009-05-22 14:03:28 -0700439static void
Jason Sams5476b452010-12-08 16:14:36 -0800440nAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
441{
442 LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
443 rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
444}
445
Jason Sams615e7ce2012-01-13 14:01:20 -0800446static jint
447nAllocationGetSurfaceTextureID(JNIEnv *_env, jobject _this, RsContext con, jint a)
448{
449 LOG_API("nAllocationGetSurfaceTextureID, con(%p), a(%p)", con, (RsAllocation)a);
450 return rsAllocationGetSurfaceTextureID(con, (RsAllocation)a);
451}
452
Jason Samsf7086092011-01-12 13:28:37 -0800453static void
454nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
455{
456 LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
457 rsAllocationGenerateMipmaps(con, (RsAllocation)alloc);
458}
459
Jason Samsffe9f482009-06-01 17:45:53 -0700460static int
Jason Sams5476b452010-12-08 16:14:36 -0800461nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Jason Samsffe9f482009-06-01 17:45:53 -0700462{
Jason Samsffe9f482009-06-01 17:45:53 -0700463 SkBitmap const * nativeBitmap =
464 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
465 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsffe9f482009-06-01 17:45:53 -0700466
Jason Sams5476b452010-12-08 16:14:36 -0800467 bitmap.lockPixels();
468 const void* ptr = bitmap.getPixels();
Jason Samsc5765372011-04-28 18:26:48 -0700469 jint id = (jint)rsAllocationCreateFromBitmap(con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700470 (RsType)type, (RsAllocationMipmapControl)mip,
471 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800472 bitmap.unlockPixels();
473 return id;
Jason Samsffe9f482009-06-01 17:45:53 -0700474}
Jason Samsfe08d992009-05-27 14:45:32 -0700475
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800476static int
Jason Sams5476b452010-12-08 16:14:36 -0800477nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800478{
479 SkBitmap const * nativeBitmap =
480 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
481 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800482
Jason Sams5476b452010-12-08 16:14:36 -0800483 bitmap.lockPixels();
484 const void* ptr = bitmap.getPixels();
Jason Samsc5765372011-04-28 18:26:48 -0700485 jint id = (jint)rsAllocationCubeCreateFromBitmap(con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700486 (RsType)type, (RsAllocationMipmapControl)mip,
487 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800488 bitmap.unlockPixels();
489 return id;
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800490}
491
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700492static void
Jason Sams4ef66502010-12-10 16:03:15 -0800493nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700494{
495 SkBitmap const * nativeBitmap =
496 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
497 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsf7086092011-01-12 13:28:37 -0800498 int w = bitmap.width();
499 int h = bitmap.height();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700500
Jason Sams4ef66502010-12-10 16:03:15 -0800501 bitmap.lockPixels();
502 const void* ptr = bitmap.getPixels();
Jason Samsf7086092011-01-12 13:28:37 -0800503 rsAllocation2DData(con, (RsAllocation)alloc, 0, 0,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700504 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
Jason Samsf7086092011-01-12 13:28:37 -0800505 w, h, ptr, bitmap.getSize());
Jason Sams4ef66502010-12-10 16:03:15 -0800506 bitmap.unlockPixels();
507}
508
509static void
510nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
511{
512 SkBitmap const * nativeBitmap =
513 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
514 const SkBitmap& bitmap(*nativeBitmap);
515
516 bitmap.lockPixels();
517 void* ptr = bitmap.getPixels();
518 rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
519 bitmap.unlockPixels();
Alex Sakhartchouk835b8542011-07-20 14:33:10 -0700520 bitmap.notifyPixelsChanged();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700521}
522
Jason Sams8a647432010-03-01 15:31:04 -0800523static void ReleaseBitmapCallback(void *bmp)
524{
525 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
526 nativeBitmap->unlockPixels();
527}
528
Romain Guy650a3eb2009-08-31 14:06:43 -0700529
Jason Samsd19f10d2009-05-22 14:03:28 -0700530static void
Jason Sams49a05d72010-12-29 14:31:29 -0800531nAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700532{
Jason Samsd19f10d2009-05-22 14:03:28 -0700533 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800534 LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700535 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800536 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700537 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
538}
539
540static void
Jason Sams49a05d72010-12-29 14:31:29 -0800541nAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700542{
Jason Sams768bc022009-09-21 19:41:04 -0700543 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800544 LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700545 jshort *ptr = _env->GetShortArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800546 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700547 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
548}
549
550static void
Jason Sams49a05d72010-12-29 14:31:29 -0800551nAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700552{
Jason Sams768bc022009-09-21 19:41:04 -0700553 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800554 LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700555 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800556 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700557 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
558}
559
560static void
Jason Sams49a05d72010-12-29 14:31:29 -0800561nAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700562{
Jason Samsd19f10d2009-05-22 14:03:28 -0700563 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800564 LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700565 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800566 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700567 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
568}
569
570static void
Jason Sams49a05d72010-12-29 14:31:29 -0800571// native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
572nAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
Jason Sams49bdaf02010-08-31 13:50:42 -0700573{
574 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800575 LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
Jason Sams49bdaf02010-08-31 13:50:42 -0700576 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Stephen Hines4cbe25a2012-01-18 18:46:27 -0800577 rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
Jason Sams49bdaf02010-08-31 13:50:42 -0700578 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
579}
580
581static void
Jason Samsfb9f82c2011-01-12 14:53:25 -0800582nAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
583 jint w, jint h, jshortArray data, int sizeBytes)
584{
585 jint len = _env->GetArrayLength(data);
586 LOG_API("nAllocation2DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
587 jshort *ptr = _env->GetShortArrayElements(data, NULL);
588 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
589 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
590}
591
592static void
593nAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
594 jint w, jint h, jbyteArray data, int sizeBytes)
595{
596 jint len = _env->GetArrayLength(data);
597 LOG_API("nAllocation2DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
598 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
599 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
600 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
601}
602
603static void
Jason Sams49a05d72010-12-29 14:31:29 -0800604nAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
605 jint w, jint h, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700606{
Jason Samsd19f10d2009-05-22 14:03:28 -0700607 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800608 LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
Jason Samsd19f10d2009-05-22 14:03:28 -0700609 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800610 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700611 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
612}
613
614static void
Jason Sams49a05d72010-12-29 14:31:29 -0800615nAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
616 jint w, jint h, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700617{
Jason Samsd19f10d2009-05-22 14:03:28 -0700618 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800619 LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
Jason Samsd19f10d2009-05-22 14:03:28 -0700620 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800621 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700622 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
623}
624
Jason Sams40a29e82009-08-10 14:55:26 -0700625static void
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700626nAllocationData2D_alloc(JNIEnv *_env, jobject _this, RsContext con,
627 jint dstAlloc, jint dstXoff, jint dstYoff,
628 jint dstMip, jint dstFace,
629 jint width, jint height,
630 jint srcAlloc, jint srcXoff, jint srcYoff,
631 jint srcMip, jint srcFace)
632{
Jason Sams4c2e4c82012-02-07 15:32:08 -0800633 LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700634 " dstMip(%i), dstFace(%i), width(%i), height(%i),"
635 " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
636 con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
637 width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
638
639 rsAllocationCopy2DRange(con,
640 (RsAllocation)dstAlloc,
641 dstXoff, dstYoff,
642 dstMip, dstFace,
643 width, height,
644 (RsAllocation)srcAlloc,
645 srcXoff, srcYoff,
646 srcMip, srcFace);
647}
648
649static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700650nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700651{
Jason Sams40a29e82009-08-10 14:55:26 -0700652 jint len = _env->GetArrayLength(data);
653 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
654 jint *ptr = _env->GetIntArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700655 jsize length = _env->GetArrayLength(data);
656 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700657 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700658}
659
660static void
Jason Samsfb9f82c2011-01-12 14:53:25 -0800661nAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
662{
663 jint len = _env->GetArrayLength(data);
664 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
665 jshort *ptr = _env->GetShortArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700666 jsize length = _env->GetArrayLength(data);
667 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Jason Samsfb9f82c2011-01-12 14:53:25 -0800668 _env->ReleaseShortArrayElements(data, ptr, 0);
669}
670
671static void
672nAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
673{
674 jint len = _env->GetArrayLength(data);
675 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
676 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700677 jsize length = _env->GetArrayLength(data);
678 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Jason Samsfb9f82c2011-01-12 14:53:25 -0800679 _env->ReleaseByteArrayElements(data, ptr, 0);
680}
681
682static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700683nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700684{
Jason Sams40a29e82009-08-10 14:55:26 -0700685 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700686 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700687 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700688 jsize length = _env->GetArrayLength(data);
689 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700690 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700691}
Jason Samsd19f10d2009-05-22 14:03:28 -0700692
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700693static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700694nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700695{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700696 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700697 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700698}
699
Jason Sams5edc6082010-10-05 13:32:49 -0700700static void
701nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
702{
703 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
704 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
705}
706
707static void
708nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
709{
710 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
711 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
712}
713
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700714// -----------------------------------
715
716static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700717nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700718{
Steve Block71f2cf12011-10-20 11:56:00 +0100719 ALOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700720
721 Asset* asset = reinterpret_cast<Asset*>(native_asset);
722
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800723 jint id = (jint)rsaFileA3DCreateFromMemory(con, asset->getBuffer(false), asset->getLength());
724 return id;
725}
726
727static int
728nFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path)
729{
730 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
731 if (mgr == NULL) {
732 return 0;
733 }
734
735 AutoJavaStringToUTF8 str(_env, _path);
736 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
737 if (asset == NULL) {
738 return 0;
739 }
740
741 jint id = (jint)rsaFileA3DCreateFromAsset(con, asset);
742 return id;
743}
744
745static int
746nFileA3DCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName)
747{
748 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
749 jint id = (jint)rsaFileA3DCreateFromFile(con, fileNameUTF.c_str());
750
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700751 return id;
752}
753
754static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700755nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700756{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700757 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700758 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700759 return numEntries;
760}
761
762static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700763nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700764{
Steve Block71f2cf12011-10-20 11:56:00 +0100765 ALOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700766 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
767
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700768 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700769
770 for(jint i = 0; i < numEntries; i ++) {
771 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
772 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
773 }
774
775 free(fileEntries);
776}
777
778static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700779nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700780{
Steve Block71f2cf12011-10-20 11:56:00 +0100781 ALOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700782 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700783 return id;
784}
Jason Samsd19f10d2009-05-22 14:03:28 -0700785
786// -----------------------------------
787
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700788static int
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800789nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con,
790 jstring fileName, jfloat fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700791{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800792 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700793 jint id = (jint)rsFontCreateFromFile(con,
794 fileNameUTF.c_str(), fileNameUTF.length(),
795 fontSize, dpi);
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700796
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800797 return id;
798}
799
800static int
801nFontCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con,
802 jstring name, jfloat fontSize, jint dpi, jint native_asset)
803{
804 Asset* asset = reinterpret_cast<Asset*>(native_asset);
805 AutoJavaStringToUTF8 nameUTF(_env, name);
806
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700807 jint id = (jint)rsFontCreateFromMemory(con,
808 nameUTF.c_str(), nameUTF.length(),
809 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800810 asset->getBuffer(false), asset->getLength());
811 return id;
812}
813
814static int
815nFontCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path,
816 jfloat fontSize, jint dpi)
817{
818 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
819 if (mgr == NULL) {
820 return 0;
821 }
822
823 AutoJavaStringToUTF8 str(_env, _path);
824 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
825 if (asset == NULL) {
826 return 0;
827 }
828
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700829 jint id = (jint)rsFontCreateFromMemory(con,
830 str.c_str(), str.length(),
831 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800832 asset->getBuffer(false), asset->getLength());
833 delete asset;
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700834 return id;
835}
836
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700837// -----------------------------------
838
839static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700840nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700841{
Jason Samsd19f10d2009-05-22 14:03:28 -0700842 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700843 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700844}
845
846static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700847nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700848{
Jason Samscfc04362010-09-14 14:59:03 -0700849 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700850 rsScriptSetVarI(con, (RsScript)script, slot, val);
851}
852
853static void
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800854nScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
855{
856 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
857 rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
858}
859
860static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700861nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
862{
863 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
864 rsScriptSetVarJ(con, (RsScript)script, slot, val);
865}
866
867static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700868nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700869{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700870 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700871 rsScriptSetVarF(con, (RsScript)script, slot, val);
872}
873
874static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700875nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
876{
877 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
878 rsScriptSetVarD(con, (RsScript)script, slot, val);
879}
880
881static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700882nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700883{
Jason Sams4d339932010-05-11 14:03:58 -0700884 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
885 jint len = _env->GetArrayLength(data);
886 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
887 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
888 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
889}
890
Jason Samsd19f10d2009-05-22 14:03:28 -0700891
892static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700893nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700894{
Jason Sams07ae4062009-08-27 20:23:34 -0700895 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700896
897 jint length = _env->GetArrayLength(timeZone);
898 jbyte* timeZone_ptr;
899 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
900
Jason Samsbc948de2009-08-17 18:35:48 -0700901 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700902
903 if (timeZone_ptr) {
904 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
905 }
906}
907
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700908static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700909nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700910{
Jason Samsbe2e8412009-09-16 15:04:38 -0700911 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
912 rsScriptInvoke(con, (RsScript)obj, slot);
913}
914
915static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700916nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700917{
Jason Sams4d339932010-05-11 14:03:58 -0700918 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
919 jint len = _env->GetArrayLength(data);
920 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
921 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
922 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
923}
924
Jason Sams6e494d32011-04-27 16:33:11 -0700925static void
926nScriptForEach(JNIEnv *_env, jobject _this, RsContext con,
927 jint script, jint slot, jint ain, jint aout)
928{
929 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
930 rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0);
931}
932static void
933nScriptForEachV(JNIEnv *_env, jobject _this, RsContext con,
934 jint script, jint slot, jint ain, jint aout, jbyteArray params)
935{
936 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
937 jint len = _env->GetArrayLength(params);
938 jbyte *ptr = _env->GetByteArrayElements(params, NULL);
939 rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len);
940 _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
941}
942
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700943
Jason Sams22534172009-08-04 16:58:20 -0700944// -----------------------------------
945
Jason Samse4a06c52011-03-16 16:29:28 -0700946static jint
947nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con,
948 jstring resName, jstring cacheDir,
949 jbyteArray scriptRef, jint length)
Jason Sams22534172009-08-04 16:58:20 -0700950{
Jason Samse4a06c52011-03-16 16:29:28 -0700951 LOG_API("nScriptCCreate, con(%p)", con);
Jason Sams22534172009-08-04 16:58:20 -0700952
Jason Samse4a06c52011-03-16 16:29:28 -0700953 AutoJavaStringToUTF8 resNameUTF(_env, resName);
954 AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
955 jint ret = 0;
Elliott Hughes8451b252011-04-07 19:17:57 -0700956 jbyte* script_ptr = NULL;
Jack Palevich43702d82009-05-28 13:38:16 -0700957 jint _exception = 0;
958 jint remaining;
Jack Palevich43702d82009-05-28 13:38:16 -0700959 if (!scriptRef) {
960 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -0700961 //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
Jack Palevich43702d82009-05-28 13:38:16 -0700962 goto exit;
963 }
Jack Palevich43702d82009-05-28 13:38:16 -0700964 if (length < 0) {
965 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -0700966 //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
Jack Palevich43702d82009-05-28 13:38:16 -0700967 goto exit;
968 }
Jason Samse4a06c52011-03-16 16:29:28 -0700969 remaining = _env->GetArrayLength(scriptRef);
Jack Palevich43702d82009-05-28 13:38:16 -0700970 if (remaining < length) {
971 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -0700972 //jniThrowException(_env, "java/lang/IllegalArgumentException",
973 // "length > script.length - offset");
Jack Palevich43702d82009-05-28 13:38:16 -0700974 goto exit;
975 }
Jason Samse4a06c52011-03-16 16:29:28 -0700976 script_ptr = (jbyte *)
Jack Palevich43702d82009-05-28 13:38:16 -0700977 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
Jack Palevich43702d82009-05-28 13:38:16 -0700978
Jason Samse4a06c52011-03-16 16:29:28 -0700979 //rsScriptCSetText(con, (const char *)script_ptr, length);
980
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700981 ret = (jint)rsScriptCCreate(con,
982 resNameUTF.c_str(), resNameUTF.length(),
983 cacheDirUTF.c_str(), cacheDirUTF.length(),
Jason Samse4a06c52011-03-16 16:29:28 -0700984 (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700985
Jack Palevich43702d82009-05-28 13:38:16 -0700986exit:
Jason Samse4a06c52011-03-16 16:29:28 -0700987 if (script_ptr) {
988 _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
Jack Palevich43702d82009-05-28 13:38:16 -0700989 _exception ? JNI_ABORT: 0);
990 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700991
Jason Samse4a06c52011-03-16 16:29:28 -0700992 return ret;
Jason Samsd19f10d2009-05-22 14:03:28 -0700993}
994
995// ---------------------------------------------------------------------------
996
Jason Samsd19f10d2009-05-22 14:03:28 -0700997static jint
Jason Sams331bf9b2011-04-06 11:23:54 -0700998nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con,
999 jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1000 jboolean depthMask, jboolean ditherEnable,
1001 jint srcFunc, jint destFunc,
1002 jint depthFunc)
Jason Samsd19f10d2009-05-22 14:03:28 -07001003{
Jason Sams54db59c2010-05-13 18:30:11 -07001004 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams331bf9b2011-04-06 11:23:54 -07001005 return (jint)rsProgramStoreCreate(con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
1006 depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1007 (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
Jason Samsd19f10d2009-05-22 14:03:28 -07001008}
1009
Jason Sams0011bcf2009-12-15 12:58:36 -08001010// ---------------------------------------------------------------------------
1011
1012static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001013nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001014{
Jason Sams0011bcf2009-12-15 12:58:36 -08001015 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1016 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
1017}
Jason Sams54c0ec12009-11-30 14:49:55 -08001018
Jason Sams68afd012009-12-17 16:55:08 -08001019static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001020nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001021{
Jason Sams68afd012009-12-17 16:55:08 -08001022 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1023 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1024}
1025
1026static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001027nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001028{
Jason Sams68afd012009-12-17 16:55:08 -08001029 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1030 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1031}
1032
Jason Samsd19f10d2009-05-22 14:03:28 -07001033// ---------------------------------------------------------------------------
1034
Jason Samsd19f10d2009-05-22 14:03:28 -07001035static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001036nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001037{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001038 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001039 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1040 jint paramLen = _env->GetArrayLength(params);
1041
Jason Sams991040c2011-01-17 15:59:39 -08001042 LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001043
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001044 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001045 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1046 return ret;
1047}
1048
1049
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001050// ---------------------------------------------------------------------------
1051
Jason Sams0011bcf2009-12-15 12:58:36 -08001052static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001053nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001054{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001055 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams0011bcf2009-12-15 12:58:36 -08001056 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1057 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001058
Jason Sams991040c2011-01-17 15:59:39 -08001059 LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", con, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001060
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001061 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001062 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1063 return ret;
1064}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001065
Jason Samsebfb4362009-09-23 13:57:02 -07001066// ---------------------------------------------------------------------------
1067
1068static jint
Jason Sams94aaed32011-09-23 14:18:53 -07001069nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSprite, jint cull)
Jason Samsebfb4362009-09-23 13:57:02 -07001070{
Jason Sams94aaed32011-09-23 14:18:53 -07001071 LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", con, pointSprite, cull);
1072 return (jint)rsProgramRasterCreate(con, pointSprite, (RsCullMode)cull);
Jason Samsebfb4362009-09-23 13:57:02 -07001073}
1074
Jason Samsd19f10d2009-05-22 14:03:28 -07001075
1076// ---------------------------------------------------------------------------
1077
1078static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001079nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001080{
Jason Samsd19f10d2009-05-22 14:03:28 -07001081 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001082 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001083}
1084
1085static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001086nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001087{
Jason Sams54db59c2010-05-13 18:30:11 -07001088 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1089 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001090}
1091
1092static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001093nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001094{
Jason Samsd19f10d2009-05-22 14:03:28 -07001095 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001096 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001097}
1098
Jason Sams0826a6f2009-06-15 19:04:56 -07001099static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001100nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001101{
Jason Sams0826a6f2009-06-15 19:04:56 -07001102 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001103 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001104}
1105
Joe Onoratod7b37742009-08-09 22:57:44 -07001106static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001107nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001108{
Jason Samsebfb4362009-09-23 13:57:02 -07001109 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1110 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1111}
1112
Joe Onoratod7b37742009-08-09 22:57:44 -07001113
Jason Sams02fb2cb2009-05-28 15:37:57 -07001114// ---------------------------------------------------------------------------
1115
Jason Sams02fb2cb2009-05-28 15:37:57 -07001116static jint
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001117nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con, jint magFilter, jint minFilter,
1118 jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001119{
Jason Samsbba134c2009-06-22 15:49:21 -07001120 LOG_API("nSamplerCreate, con(%p)", con);
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001121 return (jint)rsSamplerCreate(con,
1122 (RsSamplerValue)magFilter,
1123 (RsSamplerValue)minFilter,
1124 (RsSamplerValue)wrapS,
1125 (RsSamplerValue)wrapT,
1126 (RsSamplerValue)wrapR,
1127 aniso);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001128}
1129
Jason Samsbba134c2009-06-22 15:49:21 -07001130// ---------------------------------------------------------------------------
1131
Jason Samsf15ed012011-10-31 13:23:43 -07001132//native int rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
1133static jint
1134nPathCreate(JNIEnv *_env, jobject _this, RsContext con, jint prim, jboolean isStatic, jint _vtx, jint _loop, jfloat q) {
1135 LOG_API("nPathCreate, con(%p)", con);
1136
1137 int id = (int)rsPathCreate(con, (RsPathPrimitive)prim, isStatic,
1138 (RsAllocation)_vtx,
1139 (RsAllocation)_loop, q);
1140 return id;
1141}
1142
Jason Samsbba134c2009-06-22 15:49:21 -07001143static jint
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001144nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jintArray _vtx, jintArray _idx, jintArray _prim)
Jason Samsbba134c2009-06-22 15:49:21 -07001145{
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001146 LOG_API("nMeshCreate, con(%p)", con);
1147
1148 jint vtxLen = _env->GetArrayLength(_vtx);
1149 jint *vtxPtr = _env->GetIntArrayElements(_vtx, NULL);
1150 jint idxLen = _env->GetArrayLength(_idx);
1151 jint *idxPtr = _env->GetIntArrayElements(_idx, NULL);
1152 jint primLen = _env->GetArrayLength(_prim);
1153 jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1154
1155 int id = (int)rsMeshCreate(con,
1156 (RsAllocation *)vtxPtr, vtxLen,
1157 (RsAllocation *)idxPtr, idxLen,
1158 (uint32_t *)primPtr, primLen);
1159
1160 _env->ReleaseIntArrayElements(_vtx, vtxPtr, 0);
1161 _env->ReleaseIntArrayElements(_idx, idxPtr, 0);
1162 _env->ReleaseIntArrayElements(_prim, primPtr, 0);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001163 return id;
1164}
1165
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001166static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001167nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001168{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001169 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1170 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001171 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001172 return vtxCount;
1173}
1174
1175static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001176nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001177{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001178 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1179 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001180 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001181 return idxCount;
1182}
1183
1184static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001185nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001186{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001187 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1188
1189 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001190 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001191
1192 for(jint i = 0; i < numVtxIDs; i ++) {
1193 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1194 }
1195
1196 free(allocs);
1197}
1198
1199static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001200nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001201{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001202 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1203
1204 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1205 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1206
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001207 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001208
1209 for(jint i = 0; i < numIndices; i ++) {
1210 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1211 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1212 }
1213
1214 free(allocs);
1215 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001216}
1217
1218// ---------------------------------------------------------------------------
1219
Jason Samsd19f10d2009-05-22 14:03:28 -07001220
Jason Sams94d8e90a2009-06-10 16:09:05 -07001221static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001222
1223static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001224{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001225
Jason Sams1c415172010-11-08 17:06:46 -08001226{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1227{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
1228{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
Jason Samsedbfabd2011-05-17 15:01:29 -07001229{"nContextGetUserMessage", "(I[I)I", (void*)nContextGetUserMessage },
Jason Sams1c415172010-11-08 17:06:46 -08001230{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
Jason Samsedbfabd2011-05-17 15:01:29 -07001231{"nContextPeekMessage", "(I[I)I", (void*)nContextPeekMessage },
Jason Sams1c415172010-11-08 17:06:46 -08001232
1233{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1234{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001235
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001236
Jason Sams2e1872f2010-08-17 16:25:41 -07001237// All methods below are thread protected in java.
Stephen Hines4382467a2011-08-01 15:02:34 -07001238{"rsnContextCreate", "(III)I", (void*)nContextCreate },
1239{"rsnContextCreateGL", "(IIIIIIIIIIIIIFI)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001240{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1241{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1242{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Jason Samsfaa32b32011-06-20 16:58:04 -07001243{"rsnContextSetSurfaceTexture", "(IIILandroid/graphics/SurfaceTexture;)V", (void*)nContextSetSurfaceTexture },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001244{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001245{"rsnContextDump", "(II)V", (void*)nContextDump },
1246{"rsnContextPause", "(I)V", (void*)nContextPause },
1247{"rsnContextResume", "(I)V", (void*)nContextResume },
1248{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001249{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001250{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001251
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001252{"rsnFileA3DCreateFromFile", "(ILjava/lang/String;)I", (void*)nFileA3DCreateFromFile },
Jason Sams2e1872f2010-08-17 16:25:41 -07001253{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001254{"rsnFileA3DCreateFromAsset", "(ILandroid/content/res/AssetManager;Ljava/lang/String;)I", (void*)nFileA3DCreateFromAsset },
Jason Sams2e1872f2010-08-17 16:25:41 -07001255{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001256{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001257{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001258
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -08001259{"rsnFontCreateFromFile", "(ILjava/lang/String;FI)I", (void*)nFontCreateFromFile },
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001260{"rsnFontCreateFromAssetStream", "(ILjava/lang/String;FII)I", (void*)nFontCreateFromAssetStream },
1261{"rsnFontCreateFromAsset", "(ILandroid/content/res/AssetManager;Ljava/lang/String;FI)I", (void*)nFontCreateFromAsset },
Jason Samsd19f10d2009-05-22 14:03:28 -07001262
Jason Sams2e1872f2010-08-17 16:25:41 -07001263{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001264{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001265{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -07001266{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;[I)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001267
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001268{"rsnTypeCreate", "(IIIIIZZ)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001269{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001270
Jason Sams857d0c72011-11-23 15:02:15 -08001271{"rsnAllocationCreateTyped", "(IIIII)I", (void*)nAllocationCreateTyped },
Jason Sams5476b452010-12-08 16:14:36 -08001272{"rsnAllocationCreateFromBitmap", "(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCreateFromBitmap },
1273{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08001274
Jason Sams4ef66502010-12-10 16:03:15 -08001275{"rsnAllocationCopyFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
1276{"rsnAllocationCopyToBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
1277
Jason Sams5476b452010-12-08 16:14:36 -08001278{"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll },
Jason Sams615e7ce2012-01-13 14:01:20 -08001279{"rsnAllocationGetSurfaceTextureID", "(II)I", (void*)nAllocationGetSurfaceTextureID },
Jason Sams49a05d72010-12-29 14:31:29 -08001280{"rsnAllocationData1D", "(IIIII[II)V", (void*)nAllocationData1D_i },
1281{"rsnAllocationData1D", "(IIIII[SI)V", (void*)nAllocationData1D_s },
1282{"rsnAllocationData1D", "(IIIII[BI)V", (void*)nAllocationData1D_b },
1283{"rsnAllocationData1D", "(IIIII[FI)V", (void*)nAllocationData1D_f },
1284{"rsnAllocationElementData1D", "(IIIII[BI)V", (void*)nAllocationElementData1D },
1285{"rsnAllocationData2D", "(IIIIIIII[II)V", (void*)nAllocationData2D_i },
Jason Samsfb9f82c2011-01-12 14:53:25 -08001286{"rsnAllocationData2D", "(IIIIIIII[SI)V", (void*)nAllocationData2D_s },
1287{"rsnAllocationData2D", "(IIIIIIII[BI)V", (void*)nAllocationData2D_b },
Jason Sams49a05d72010-12-29 14:31:29 -08001288{"rsnAllocationData2D", "(IIIIIIII[FI)V", (void*)nAllocationData2D_f },
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -07001289{"rsnAllocationData2D", "(IIIIIIIIIIIII)V", (void*)nAllocationData2D_alloc },
Jason Sams2e1872f2010-08-17 16:25:41 -07001290{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
Jason Samsfb9f82c2011-01-12 14:53:25 -08001291{"rsnAllocationRead", "(II[S)V", (void*)nAllocationRead_s },
1292{"rsnAllocationRead", "(II[B)V", (void*)nAllocationRead_b },
Jason Sams2e1872f2010-08-17 16:25:41 -07001293{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001294{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001295{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1296{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsf7086092011-01-12 13:28:37 -08001297{"rsnAllocationGenerateMipmaps", "(II)V", (void*)nAllocationGenerateMipmaps },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001298
Jason Sams2e1872f2010-08-17 16:25:41 -07001299{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1300{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1301{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1302{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
Jason Sams6e494d32011-04-27 16:33:11 -07001303{"rsnScriptForEach", "(IIIII)V", (void*)nScriptForEach },
1304{"rsnScriptForEach", "(IIIII[B)V", (void*)nScriptForEachV },
Jason Sams2e1872f2010-08-17 16:25:41 -07001305{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001306{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001307{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001308{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001309{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001310{"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001311
Jason Samse4a06c52011-03-16 16:29:28 -07001312{"rsnScriptCCreate", "(ILjava/lang/String;Ljava/lang/String;[BI)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001313
Jason Sams331bf9b2011-04-06 11:23:54 -07001314{"rsnProgramStoreCreate", "(IZZZZZZIII)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001315
Jason Sams2e1872f2010-08-17 16:25:41 -07001316{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1317{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1318{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001319
Jason Sams49a05d72010-12-29 14:31:29 -08001320{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams94aaed32011-09-23 14:18:53 -07001321{"rsnProgramRasterCreate", "(IZI)I", (void*)nProgramRasterCreate },
Jason Sams49a05d72010-12-29 14:31:29 -08001322{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001323
Jason Sams2e1872f2010-08-17 16:25:41 -07001324{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001325{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001326{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1327{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1328{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001329
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001330{"rsnSamplerCreate", "(IIIIIIF)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001331
Jason Samsf15ed012011-10-31 13:23:43 -07001332{"rsnPathCreate", "(IIZIIF)I", (void*)nPathCreate },
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001333{"rsnMeshCreate", "(I[I[I[I)I", (void*)nMeshCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001334
1335{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1336{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001337{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001338{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001339
Jason Samsd19f10d2009-05-22 14:03:28 -07001340};
1341
1342static int registerFuncs(JNIEnv *_env)
1343{
1344 return android::AndroidRuntime::registerNativeMethods(
1345 _env, classPathName, methods, NELEM(methods));
1346}
1347
1348// ---------------------------------------------------------------------------
1349
1350jint JNI_OnLoad(JavaVM* vm, void* reserved)
1351{
1352 JNIEnv* env = NULL;
1353 jint result = -1;
1354
Jason Samsd19f10d2009-05-22 14:03:28 -07001355 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
Steve Block3762c312012-01-06 19:20:56 +00001356 ALOGE("ERROR: GetEnv failed\n");
Jason Samsd19f10d2009-05-22 14:03:28 -07001357 goto bail;
1358 }
1359 assert(env != NULL);
1360
1361 if (registerFuncs(env) < 0) {
Steve Block3762c312012-01-06 19:20:56 +00001362 ALOGE("ERROR: MediaPlayer native registration failed\n");
Jason Samsd19f10d2009-05-22 14:03:28 -07001363 goto bail;
1364 }
1365
1366 /* success -- return valid version number */
1367 result = JNI_VERSION_1_4;
1368
1369bail:
1370 return result;
1371}