blob: ec1f8dea7c7d19885a6ec8443c69ee106aaf316b [file] [log] [blame]
Jason Samsd19f10d2009-05-22 14:03:28 -07001/*
Jason Samsfaa32b32011-06-20 16:58:04 -07002 * Copyright (C) 2011 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
50//#define LOG_API LOGE
51#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) {
265 LOGV("message receive buffer too small. %i", receiveLen);
266 }
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) {
Jason Sams1d45c472010-08-25 14:31:48 -0700283 LOGV("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
Jason Sams2e1872f2010-08-17 16:25:41 -0700374nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700375{
376 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700377 LOG_API("nElementGetSubElements, con(%p)", con);
378
379 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
380 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
381
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700382 rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700383
Jason Sams11c8af92010-10-13 15:31:10 -0700384 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700385 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
386 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
387 }
388
389 free(ids);
390 free(names);
391}
392
Jason Samsd19f10d2009-05-22 14:03:28 -0700393// -----------------------------------
394
Jason Sams3b9c52a2010-10-14 17:48:46 -0700395static int
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800396nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
397 jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
Jason Samsd19f10d2009-05-22 14:03:28 -0700398{
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800399 LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
400 con, eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700401
Jason Samsc5765372011-04-28 18:26:48 -0700402 jint id = (jint)rsTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700403 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700404}
405
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700406static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700407nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700408{
409 // We are packing 6 items: mDimX; mDimY; mDimZ;
410 // mDimLOD; mDimFaces; mElement; into typeData
411 int elementCount = _env->GetArrayLength(_typeData);
412
413 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700414 LOG_API("nTypeCreate, con(%p)", con);
415
416 uint32_t typeData[6];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700417 rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700418
419 for(jint i = 0; i < elementCount; i ++) {
420 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
421 }
422}
423
Jason Samsd19f10d2009-05-22 14:03:28 -0700424// -----------------------------------
425
426static jint
Jason Sams5476b452010-12-08 16:14:36 -0800427nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage)
Jason Samsd19f10d2009-05-22 14:03:28 -0700428{
Jason Samsd4b23b52010-12-13 15:32:35 -0800429 LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i)", con, (RsElement)type, mips, usage);
Jason Samsc5765372011-04-28 18:26:48 -0700430 return (jint) rsAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage);
Jason Samsd19f10d2009-05-22 14:03:28 -0700431}
432
Jason Samsd19f10d2009-05-22 14:03:28 -0700433static void
Jason Sams5476b452010-12-08 16:14:36 -0800434nAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
435{
436 LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
437 rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
438}
439
Jason Samsf7086092011-01-12 13:28:37 -0800440static void
441nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
442{
443 LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
444 rsAllocationGenerateMipmaps(con, (RsAllocation)alloc);
445}
446
Jason Samsffe9f482009-06-01 17:45:53 -0700447static int
Jason Sams5476b452010-12-08 16:14:36 -0800448nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Jason Samsffe9f482009-06-01 17:45:53 -0700449{
Jason Samsffe9f482009-06-01 17:45:53 -0700450 SkBitmap const * nativeBitmap =
451 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
452 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsffe9f482009-06-01 17:45:53 -0700453
Jason Sams5476b452010-12-08 16:14:36 -0800454 bitmap.lockPixels();
455 const void* ptr = bitmap.getPixels();
Jason Samsc5765372011-04-28 18:26:48 -0700456 jint id = (jint)rsAllocationCreateFromBitmap(con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700457 (RsType)type, (RsAllocationMipmapControl)mip,
458 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800459 bitmap.unlockPixels();
460 return id;
Jason Samsffe9f482009-06-01 17:45:53 -0700461}
Jason Samsfe08d992009-05-27 14:45:32 -0700462
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800463static int
Jason Sams5476b452010-12-08 16:14:36 -0800464nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800465{
466 SkBitmap const * nativeBitmap =
467 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
468 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800469
Jason Sams5476b452010-12-08 16:14:36 -0800470 bitmap.lockPixels();
471 const void* ptr = bitmap.getPixels();
Jason Samsc5765372011-04-28 18:26:48 -0700472 jint id = (jint)rsAllocationCubeCreateFromBitmap(con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700473 (RsType)type, (RsAllocationMipmapControl)mip,
474 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800475 bitmap.unlockPixels();
476 return id;
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800477}
478
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700479static void
Jason Sams4ef66502010-12-10 16:03:15 -0800480nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700481{
482 SkBitmap const * nativeBitmap =
483 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
484 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsf7086092011-01-12 13:28:37 -0800485 int w = bitmap.width();
486 int h = bitmap.height();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700487
Jason Sams4ef66502010-12-10 16:03:15 -0800488 bitmap.lockPixels();
489 const void* ptr = bitmap.getPixels();
Jason Samsf7086092011-01-12 13:28:37 -0800490 rsAllocation2DData(con, (RsAllocation)alloc, 0, 0,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700491 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
Jason Samsf7086092011-01-12 13:28:37 -0800492 w, h, ptr, bitmap.getSize());
Jason Sams4ef66502010-12-10 16:03:15 -0800493 bitmap.unlockPixels();
494}
495
496static void
497nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
498{
499 SkBitmap const * nativeBitmap =
500 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
501 const SkBitmap& bitmap(*nativeBitmap);
502
503 bitmap.lockPixels();
504 void* ptr = bitmap.getPixels();
505 rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
506 bitmap.unlockPixels();
Alex Sakhartchouk835b8542011-07-20 14:33:10 -0700507 bitmap.notifyPixelsChanged();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700508}
509
Jason Sams8a647432010-03-01 15:31:04 -0800510static void ReleaseBitmapCallback(void *bmp)
511{
512 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
513 nativeBitmap->unlockPixels();
514}
515
Romain Guy650a3eb2009-08-31 14:06:43 -0700516
Jason Samsd19f10d2009-05-22 14:03:28 -0700517static void
Jason Sams49a05d72010-12-29 14:31:29 -0800518nAllocationData1D_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 -0700519{
Jason Samsd19f10d2009-05-22 14:03:28 -0700520 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800521 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 -0700522 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800523 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700524 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
525}
526
527static void
Jason Sams49a05d72010-12-29 14:31:29 -0800528nAllocationData1D_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 -0700529{
Jason Sams768bc022009-09-21 19:41:04 -0700530 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800531 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 -0700532 jshort *ptr = _env->GetShortArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800533 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700534 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
535}
536
537static void
Jason Sams49a05d72010-12-29 14:31:29 -0800538nAllocationData1D_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 -0700539{
Jason Sams768bc022009-09-21 19:41:04 -0700540 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800541 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 -0700542 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800543 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700544 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
545}
546
547static void
Jason Sams49a05d72010-12-29 14:31:29 -0800548nAllocationData1D_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 -0700549{
Jason Samsd19f10d2009-05-22 14:03:28 -0700550 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800551 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 -0700552 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800553 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700554 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
555}
556
557static void
Jason Sams49a05d72010-12-29 14:31:29 -0800558// native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
559nAllocationElementData1D(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 -0700560{
561 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800562 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 -0700563 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800564 rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, compIdx, sizeBytes);
Jason Sams49bdaf02010-08-31 13:50:42 -0700565 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
566}
567
568static void
Jason Samsfb9f82c2011-01-12 14:53:25 -0800569nAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
570 jint w, jint h, jshortArray data, int sizeBytes)
571{
572 jint len = _env->GetArrayLength(data);
573 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);
574 jshort *ptr = _env->GetShortArrayElements(data, NULL);
575 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
576 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
577}
578
579static void
580nAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
581 jint w, jint h, jbyteArray data, int sizeBytes)
582{
583 jint len = _env->GetArrayLength(data);
584 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);
585 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
586 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
587 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
588}
589
590static void
Jason Sams49a05d72010-12-29 14:31:29 -0800591nAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
592 jint w, jint h, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700593{
Jason Samsd19f10d2009-05-22 14:03:28 -0700594 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800595 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 -0700596 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800597 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700598 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
599}
600
601static void
Jason Sams49a05d72010-12-29 14:31:29 -0800602nAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
603 jint w, jint h, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700604{
Jason Samsd19f10d2009-05-22 14:03:28 -0700605 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800606 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 -0700607 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800608 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700609 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
610}
611
Jason Sams40a29e82009-08-10 14:55:26 -0700612static void
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700613nAllocationData2D_alloc(JNIEnv *_env, jobject _this, RsContext con,
614 jint dstAlloc, jint dstXoff, jint dstYoff,
615 jint dstMip, jint dstFace,
616 jint width, jint height,
617 jint srcAlloc, jint srcXoff, jint srcYoff,
618 jint srcMip, jint srcFace)
619{
620 LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff, dstYoff,"
621 " dstMip(%i), dstFace(%i), width(%i), height(%i),"
622 " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
623 con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
624 width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
625
626 rsAllocationCopy2DRange(con,
627 (RsAllocation)dstAlloc,
628 dstXoff, dstYoff,
629 dstMip, dstFace,
630 width, height,
631 (RsAllocation)srcAlloc,
632 srcXoff, srcYoff,
633 srcMip, srcFace);
634}
635
636static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700637nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700638{
Jason Sams40a29e82009-08-10 14:55:26 -0700639 jint len = _env->GetArrayLength(data);
640 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
641 jint *ptr = _env->GetIntArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700642 jsize length = _env->GetArrayLength(data);
643 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700644 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700645}
646
647static void
Jason Samsfb9f82c2011-01-12 14:53:25 -0800648nAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
649{
650 jint len = _env->GetArrayLength(data);
651 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
652 jshort *ptr = _env->GetShortArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700653 jsize length = _env->GetArrayLength(data);
654 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Jason Samsfb9f82c2011-01-12 14:53:25 -0800655 _env->ReleaseShortArrayElements(data, ptr, 0);
656}
657
658static void
659nAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
660{
661 jint len = _env->GetArrayLength(data);
662 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
663 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700664 jsize length = _env->GetArrayLength(data);
665 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Jason Samsfb9f82c2011-01-12 14:53:25 -0800666 _env->ReleaseByteArrayElements(data, ptr, 0);
667}
668
669static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700670nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700671{
Jason Sams40a29e82009-08-10 14:55:26 -0700672 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700673 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700674 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700675 jsize length = _env->GetArrayLength(data);
676 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700677 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700678}
Jason Samsd19f10d2009-05-22 14:03:28 -0700679
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700680static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700681nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700682{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700683 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700684 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700685}
686
Jason Sams5edc6082010-10-05 13:32:49 -0700687static void
688nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
689{
690 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
691 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
692}
693
694static void
695nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
696{
697 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
698 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
699}
700
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700701// -----------------------------------
702
703static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700704nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700705{
706 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700707
708 Asset* asset = reinterpret_cast<Asset*>(native_asset);
709
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800710 jint id = (jint)rsaFileA3DCreateFromMemory(con, asset->getBuffer(false), asset->getLength());
711 return id;
712}
713
714static int
715nFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path)
716{
717 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
718 if (mgr == NULL) {
719 return 0;
720 }
721
722 AutoJavaStringToUTF8 str(_env, _path);
723 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
724 if (asset == NULL) {
725 return 0;
726 }
727
728 jint id = (jint)rsaFileA3DCreateFromAsset(con, asset);
729 return id;
730}
731
732static int
733nFileA3DCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName)
734{
735 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
736 jint id = (jint)rsaFileA3DCreateFromFile(con, fileNameUTF.c_str());
737
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700738 return id;
739}
740
741static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700742nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700743{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700744 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700745 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700746 return numEntries;
747}
748
749static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700750nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700751{
752 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700753 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
754
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700755 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700756
757 for(jint i = 0; i < numEntries; i ++) {
758 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
759 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
760 }
761
762 free(fileEntries);
763}
764
765static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700766nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700767{
768 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700769 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700770 return id;
771}
Jason Samsd19f10d2009-05-22 14:03:28 -0700772
773// -----------------------------------
774
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700775static int
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800776nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con,
777 jstring fileName, jfloat fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700778{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800779 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700780 jint id = (jint)rsFontCreateFromFile(con,
781 fileNameUTF.c_str(), fileNameUTF.length(),
782 fontSize, dpi);
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700783
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800784 return id;
785}
786
787static int
788nFontCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con,
789 jstring name, jfloat fontSize, jint dpi, jint native_asset)
790{
791 Asset* asset = reinterpret_cast<Asset*>(native_asset);
792 AutoJavaStringToUTF8 nameUTF(_env, name);
793
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700794 jint id = (jint)rsFontCreateFromMemory(con,
795 nameUTF.c_str(), nameUTF.length(),
796 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800797 asset->getBuffer(false), asset->getLength());
798 return id;
799}
800
801static int
802nFontCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path,
803 jfloat fontSize, jint dpi)
804{
805 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
806 if (mgr == NULL) {
807 return 0;
808 }
809
810 AutoJavaStringToUTF8 str(_env, _path);
811 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
812 if (asset == NULL) {
813 return 0;
814 }
815
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700816 jint id = (jint)rsFontCreateFromMemory(con,
817 str.c_str(), str.length(),
818 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800819 asset->getBuffer(false), asset->getLength());
820 delete asset;
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700821 return id;
822}
823
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700824// -----------------------------------
825
826static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700827nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700828{
Jason Samsd19f10d2009-05-22 14:03:28 -0700829 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700830 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700831}
832
833static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700834nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700835{
Jason Samscfc04362010-09-14 14:59:03 -0700836 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700837 rsScriptSetVarI(con, (RsScript)script, slot, val);
838}
839
840static void
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800841nScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
842{
843 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
844 rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
845}
846
847static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700848nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
849{
850 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
851 rsScriptSetVarJ(con, (RsScript)script, slot, val);
852}
853
854static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700855nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700856{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700857 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700858 rsScriptSetVarF(con, (RsScript)script, slot, val);
859}
860
861static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700862nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
863{
864 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
865 rsScriptSetVarD(con, (RsScript)script, slot, val);
866}
867
868static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700869nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700870{
Jason Sams4d339932010-05-11 14:03:58 -0700871 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
872 jint len = _env->GetArrayLength(data);
873 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
874 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
875 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
876}
877
Jason Samsd19f10d2009-05-22 14:03:28 -0700878
879static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700880nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700881{
Jason Sams07ae4062009-08-27 20:23:34 -0700882 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700883
884 jint length = _env->GetArrayLength(timeZone);
885 jbyte* timeZone_ptr;
886 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
887
Jason Samsbc948de2009-08-17 18:35:48 -0700888 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700889
890 if (timeZone_ptr) {
891 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
892 }
893}
894
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700895static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700896nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700897{
Jason Samsbe2e8412009-09-16 15:04:38 -0700898 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
899 rsScriptInvoke(con, (RsScript)obj, slot);
900}
901
902static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700903nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700904{
Jason Sams4d339932010-05-11 14:03:58 -0700905 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
906 jint len = _env->GetArrayLength(data);
907 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
908 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
909 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
910}
911
Jason Sams6e494d32011-04-27 16:33:11 -0700912static void
913nScriptForEach(JNIEnv *_env, jobject _this, RsContext con,
914 jint script, jint slot, jint ain, jint aout)
915{
916 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
917 rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0);
918}
919static void
920nScriptForEachV(JNIEnv *_env, jobject _this, RsContext con,
921 jint script, jint slot, jint ain, jint aout, jbyteArray params)
922{
923 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
924 jint len = _env->GetArrayLength(params);
925 jbyte *ptr = _env->GetByteArrayElements(params, NULL);
926 rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len);
927 _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
928}
929
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700930
Jason Sams22534172009-08-04 16:58:20 -0700931// -----------------------------------
932
Jason Samse4a06c52011-03-16 16:29:28 -0700933static jint
934nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con,
935 jstring resName, jstring cacheDir,
936 jbyteArray scriptRef, jint length)
Jason Sams22534172009-08-04 16:58:20 -0700937{
Jason Samse4a06c52011-03-16 16:29:28 -0700938 LOG_API("nScriptCCreate, con(%p)", con);
Jason Sams22534172009-08-04 16:58:20 -0700939
Jason Samse4a06c52011-03-16 16:29:28 -0700940 AutoJavaStringToUTF8 resNameUTF(_env, resName);
941 AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
942 jint ret = 0;
Elliott Hughes8451b252011-04-07 19:17:57 -0700943 jbyte* script_ptr = NULL;
Jack Palevich43702d82009-05-28 13:38:16 -0700944 jint _exception = 0;
945 jint remaining;
Jack Palevich43702d82009-05-28 13:38:16 -0700946 if (!scriptRef) {
947 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -0700948 //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
Jack Palevich43702d82009-05-28 13:38:16 -0700949 goto exit;
950 }
Jack Palevich43702d82009-05-28 13:38:16 -0700951 if (length < 0) {
952 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -0700953 //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
Jack Palevich43702d82009-05-28 13:38:16 -0700954 goto exit;
955 }
Jason Samse4a06c52011-03-16 16:29:28 -0700956 remaining = _env->GetArrayLength(scriptRef);
Jack Palevich43702d82009-05-28 13:38:16 -0700957 if (remaining < length) {
958 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -0700959 //jniThrowException(_env, "java/lang/IllegalArgumentException",
960 // "length > script.length - offset");
Jack Palevich43702d82009-05-28 13:38:16 -0700961 goto exit;
962 }
Jason Samse4a06c52011-03-16 16:29:28 -0700963 script_ptr = (jbyte *)
Jack Palevich43702d82009-05-28 13:38:16 -0700964 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
Jack Palevich43702d82009-05-28 13:38:16 -0700965
Jason Samse4a06c52011-03-16 16:29:28 -0700966 //rsScriptCSetText(con, (const char *)script_ptr, length);
967
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700968 ret = (jint)rsScriptCCreate(con,
969 resNameUTF.c_str(), resNameUTF.length(),
970 cacheDirUTF.c_str(), cacheDirUTF.length(),
Jason Samse4a06c52011-03-16 16:29:28 -0700971 (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700972
Jack Palevich43702d82009-05-28 13:38:16 -0700973exit:
Jason Samse4a06c52011-03-16 16:29:28 -0700974 if (script_ptr) {
975 _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
Jack Palevich43702d82009-05-28 13:38:16 -0700976 _exception ? JNI_ABORT: 0);
977 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700978
Jason Samse4a06c52011-03-16 16:29:28 -0700979 return ret;
Jason Samsd19f10d2009-05-22 14:03:28 -0700980}
981
982// ---------------------------------------------------------------------------
983
Jason Samsd19f10d2009-05-22 14:03:28 -0700984static jint
Jason Sams331bf9b2011-04-06 11:23:54 -0700985nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con,
986 jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
987 jboolean depthMask, jboolean ditherEnable,
988 jint srcFunc, jint destFunc,
989 jint depthFunc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700990{
Jason Sams54db59c2010-05-13 18:30:11 -0700991 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams331bf9b2011-04-06 11:23:54 -0700992 return (jint)rsProgramStoreCreate(con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
993 depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
994 (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700995}
996
Jason Sams0011bcf2009-12-15 12:58:36 -0800997// ---------------------------------------------------------------------------
998
999static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001000nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001001{
Jason Sams0011bcf2009-12-15 12:58:36 -08001002 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1003 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
1004}
Jason Sams54c0ec12009-11-30 14:49:55 -08001005
Jason Sams68afd012009-12-17 16:55:08 -08001006static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001007nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001008{
Jason Sams68afd012009-12-17 16:55:08 -08001009 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1010 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1011}
1012
1013static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001014nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001015{
Jason Sams68afd012009-12-17 16:55:08 -08001016 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1017 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1018}
1019
Jason Samsd19f10d2009-05-22 14:03:28 -07001020// ---------------------------------------------------------------------------
1021
Jason Samsd19f10d2009-05-22 14:03:28 -07001022static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001023nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001024{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001025 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001026 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1027 jint paramLen = _env->GetArrayLength(params);
1028
Jason Sams991040c2011-01-17 15:59:39 -08001029 LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001030
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001031 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001032 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1033 return ret;
1034}
1035
1036
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001037// ---------------------------------------------------------------------------
1038
Jason Sams0011bcf2009-12-15 12:58:36 -08001039static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001040nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001041{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001042 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams0011bcf2009-12-15 12:58:36 -08001043 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1044 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001045
Jason Sams991040c2011-01-17 15:59:39 -08001046 LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", con, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001047
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001048 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001049 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1050 return ret;
1051}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001052
Jason Samsebfb4362009-09-23 13:57:02 -07001053// ---------------------------------------------------------------------------
1054
1055static jint
Jason Sams94aaed32011-09-23 14:18:53 -07001056nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSprite, jint cull)
Jason Samsebfb4362009-09-23 13:57:02 -07001057{
Jason Sams94aaed32011-09-23 14:18:53 -07001058 LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", con, pointSprite, cull);
1059 return (jint)rsProgramRasterCreate(con, pointSprite, (RsCullMode)cull);
Jason Samsebfb4362009-09-23 13:57:02 -07001060}
1061
Jason Samsd19f10d2009-05-22 14:03:28 -07001062
1063// ---------------------------------------------------------------------------
1064
1065static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001066nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001067{
Jason Samsd19f10d2009-05-22 14:03:28 -07001068 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001069 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001070}
1071
1072static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001073nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001074{
Jason Sams54db59c2010-05-13 18:30:11 -07001075 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1076 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001077}
1078
1079static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001080nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001081{
Jason Samsd19f10d2009-05-22 14:03:28 -07001082 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001083 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001084}
1085
Jason Sams0826a6f2009-06-15 19:04:56 -07001086static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001087nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001088{
Jason Sams0826a6f2009-06-15 19:04:56 -07001089 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001090 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001091}
1092
Joe Onoratod7b37742009-08-09 22:57:44 -07001093static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001094nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001095{
Jason Samsebfb4362009-09-23 13:57:02 -07001096 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1097 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1098}
1099
Joe Onoratod7b37742009-08-09 22:57:44 -07001100
Jason Sams02fb2cb2009-05-28 15:37:57 -07001101// ---------------------------------------------------------------------------
1102
Jason Sams02fb2cb2009-05-28 15:37:57 -07001103static jint
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001104nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con, jint magFilter, jint minFilter,
1105 jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001106{
Jason Samsbba134c2009-06-22 15:49:21 -07001107 LOG_API("nSamplerCreate, con(%p)", con);
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001108 return (jint)rsSamplerCreate(con,
1109 (RsSamplerValue)magFilter,
1110 (RsSamplerValue)minFilter,
1111 (RsSamplerValue)wrapS,
1112 (RsSamplerValue)wrapT,
1113 (RsSamplerValue)wrapR,
1114 aniso);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001115}
1116
Jason Samsbba134c2009-06-22 15:49:21 -07001117// ---------------------------------------------------------------------------
1118
Jason Samsbba134c2009-06-22 15:49:21 -07001119static jint
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001120nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jintArray _vtx, jintArray _idx, jintArray _prim)
Jason Samsbba134c2009-06-22 15:49:21 -07001121{
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001122 LOG_API("nMeshCreate, con(%p)", con);
1123
1124 jint vtxLen = _env->GetArrayLength(_vtx);
1125 jint *vtxPtr = _env->GetIntArrayElements(_vtx, NULL);
1126 jint idxLen = _env->GetArrayLength(_idx);
1127 jint *idxPtr = _env->GetIntArrayElements(_idx, NULL);
1128 jint primLen = _env->GetArrayLength(_prim);
1129 jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1130
1131 int id = (int)rsMeshCreate(con,
1132 (RsAllocation *)vtxPtr, vtxLen,
1133 (RsAllocation *)idxPtr, idxLen,
1134 (uint32_t *)primPtr, primLen);
1135
1136 _env->ReleaseIntArrayElements(_vtx, vtxPtr, 0);
1137 _env->ReleaseIntArrayElements(_idx, idxPtr, 0);
1138 _env->ReleaseIntArrayElements(_prim, primPtr, 0);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001139 return id;
1140}
1141
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001142static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001143nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001144{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001145 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1146 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001147 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001148 return vtxCount;
1149}
1150
1151static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001152nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001153{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001154 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1155 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001156 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001157 return idxCount;
1158}
1159
1160static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001161nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001162{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001163 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1164
1165 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001166 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001167
1168 for(jint i = 0; i < numVtxIDs; i ++) {
1169 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1170 }
1171
1172 free(allocs);
1173}
1174
1175static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001176nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001177{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001178 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1179
1180 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1181 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1182
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001183 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001184
1185 for(jint i = 0; i < numIndices; i ++) {
1186 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1187 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1188 }
1189
1190 free(allocs);
1191 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001192}
1193
1194// ---------------------------------------------------------------------------
1195
Jason Samsd19f10d2009-05-22 14:03:28 -07001196
Jason Sams94d8e90a2009-06-10 16:09:05 -07001197static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001198
1199static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001200{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001201
Jason Sams1c415172010-11-08 17:06:46 -08001202{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1203{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
1204{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
Jason Samsedbfabd2011-05-17 15:01:29 -07001205{"nContextGetUserMessage", "(I[I)I", (void*)nContextGetUserMessage },
Jason Sams1c415172010-11-08 17:06:46 -08001206{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
Jason Samsedbfabd2011-05-17 15:01:29 -07001207{"nContextPeekMessage", "(I[I)I", (void*)nContextPeekMessage },
Jason Sams1c415172010-11-08 17:06:46 -08001208
1209{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1210{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001211
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001212
Jason Sams2e1872f2010-08-17 16:25:41 -07001213// All methods below are thread protected in java.
Stephen Hines4382467a2011-08-01 15:02:34 -07001214{"rsnContextCreate", "(III)I", (void*)nContextCreate },
1215{"rsnContextCreateGL", "(IIIIIIIIIIIIIFI)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001216{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1217{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1218{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Jason Samsfaa32b32011-06-20 16:58:04 -07001219{"rsnContextSetSurfaceTexture", "(IIILandroid/graphics/SurfaceTexture;)V", (void*)nContextSetSurfaceTexture },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001220{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001221{"rsnContextDump", "(II)V", (void*)nContextDump },
1222{"rsnContextPause", "(I)V", (void*)nContextPause },
1223{"rsnContextResume", "(I)V", (void*)nContextResume },
1224{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001225{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001226{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001227
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001228{"rsnFileA3DCreateFromFile", "(ILjava/lang/String;)I", (void*)nFileA3DCreateFromFile },
Jason Sams2e1872f2010-08-17 16:25:41 -07001229{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001230{"rsnFileA3DCreateFromAsset", "(ILandroid/content/res/AssetManager;Ljava/lang/String;)I", (void*)nFileA3DCreateFromAsset },
Jason Sams2e1872f2010-08-17 16:25:41 -07001231{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001232{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001233{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001234
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -08001235{"rsnFontCreateFromFile", "(ILjava/lang/String;FI)I", (void*)nFontCreateFromFile },
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001236{"rsnFontCreateFromAssetStream", "(ILjava/lang/String;FII)I", (void*)nFontCreateFromAssetStream },
1237{"rsnFontCreateFromAsset", "(ILandroid/content/res/AssetManager;Ljava/lang/String;FI)I", (void*)nFontCreateFromAsset },
Jason Samsd19f10d2009-05-22 14:03:28 -07001238
Jason Sams2e1872f2010-08-17 16:25:41 -07001239{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001240{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001241{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001242{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001243
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001244{"rsnTypeCreate", "(IIIIIZZ)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001245{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001246
Jason Samsd4b23b52010-12-13 15:32:35 -08001247{"rsnAllocationCreateTyped", "(IIII)I", (void*)nAllocationCreateTyped },
Jason Sams5476b452010-12-08 16:14:36 -08001248{"rsnAllocationCreateFromBitmap", "(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCreateFromBitmap },
1249{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08001250
Jason Sams4ef66502010-12-10 16:03:15 -08001251{"rsnAllocationCopyFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
1252{"rsnAllocationCopyToBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
1253
Jason Sams5476b452010-12-08 16:14:36 -08001254{"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll },
Jason Sams49a05d72010-12-29 14:31:29 -08001255{"rsnAllocationData1D", "(IIIII[II)V", (void*)nAllocationData1D_i },
1256{"rsnAllocationData1D", "(IIIII[SI)V", (void*)nAllocationData1D_s },
1257{"rsnAllocationData1D", "(IIIII[BI)V", (void*)nAllocationData1D_b },
1258{"rsnAllocationData1D", "(IIIII[FI)V", (void*)nAllocationData1D_f },
1259{"rsnAllocationElementData1D", "(IIIII[BI)V", (void*)nAllocationElementData1D },
1260{"rsnAllocationData2D", "(IIIIIIII[II)V", (void*)nAllocationData2D_i },
Jason Samsfb9f82c2011-01-12 14:53:25 -08001261{"rsnAllocationData2D", "(IIIIIIII[SI)V", (void*)nAllocationData2D_s },
1262{"rsnAllocationData2D", "(IIIIIIII[BI)V", (void*)nAllocationData2D_b },
Jason Sams49a05d72010-12-29 14:31:29 -08001263{"rsnAllocationData2D", "(IIIIIIII[FI)V", (void*)nAllocationData2D_f },
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -07001264{"rsnAllocationData2D", "(IIIIIIIIIIIII)V", (void*)nAllocationData2D_alloc },
Jason Sams2e1872f2010-08-17 16:25:41 -07001265{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
Jason Samsfb9f82c2011-01-12 14:53:25 -08001266{"rsnAllocationRead", "(II[S)V", (void*)nAllocationRead_s },
1267{"rsnAllocationRead", "(II[B)V", (void*)nAllocationRead_b },
Jason Sams2e1872f2010-08-17 16:25:41 -07001268{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001269{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001270{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1271{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsf7086092011-01-12 13:28:37 -08001272{"rsnAllocationGenerateMipmaps", "(II)V", (void*)nAllocationGenerateMipmaps },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001273
Jason Sams2e1872f2010-08-17 16:25:41 -07001274{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1275{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1276{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1277{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
Jason Sams6e494d32011-04-27 16:33:11 -07001278{"rsnScriptForEach", "(IIIII)V", (void*)nScriptForEach },
1279{"rsnScriptForEach", "(IIIII[B)V", (void*)nScriptForEachV },
Jason Sams2e1872f2010-08-17 16:25:41 -07001280{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001281{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001282{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001283{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001284{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001285{"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001286
Jason Samse4a06c52011-03-16 16:29:28 -07001287{"rsnScriptCCreate", "(ILjava/lang/String;Ljava/lang/String;[BI)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001288
Jason Sams331bf9b2011-04-06 11:23:54 -07001289{"rsnProgramStoreCreate", "(IZZZZZZIII)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001290
Jason Sams2e1872f2010-08-17 16:25:41 -07001291{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1292{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1293{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001294
Jason Sams49a05d72010-12-29 14:31:29 -08001295{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams94aaed32011-09-23 14:18:53 -07001296{"rsnProgramRasterCreate", "(IZI)I", (void*)nProgramRasterCreate },
Jason Sams49a05d72010-12-29 14:31:29 -08001297{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001298
Jason Sams2e1872f2010-08-17 16:25:41 -07001299{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001300{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001301{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1302{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1303{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001304
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001305{"rsnSamplerCreate", "(IIIIIIF)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001306
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001307{"rsnMeshCreate", "(I[I[I[I)I", (void*)nMeshCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001308
1309{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1310{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001311{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001312{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001313
Jason Samsd19f10d2009-05-22 14:03:28 -07001314};
1315
1316static int registerFuncs(JNIEnv *_env)
1317{
1318 return android::AndroidRuntime::registerNativeMethods(
1319 _env, classPathName, methods, NELEM(methods));
1320}
1321
1322// ---------------------------------------------------------------------------
1323
1324jint JNI_OnLoad(JavaVM* vm, void* reserved)
1325{
1326 JNIEnv* env = NULL;
1327 jint result = -1;
1328
Jason Samsd19f10d2009-05-22 14:03:28 -07001329 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1330 LOGE("ERROR: GetEnv failed\n");
1331 goto bail;
1332 }
1333 assert(env != NULL);
1334
1335 if (registerFuncs(env) < 0) {
1336 LOGE("ERROR: MediaPlayer native registration failed\n");
1337 goto bail;
1338 }
1339
1340 /* success -- return valid version number */
1341 result = JNI_VERSION_1_4;
1342
1343bail:
1344 return result;
1345}