blob: af03ee2aba40e092f1399d64ab166ffa505fa15e [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
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 Sams5476b452010-12-08 16:14:36 -0800433nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage)
Jason Samsd19f10d2009-05-22 14:03:28 -0700434{
Jason Samsd4b23b52010-12-13 15:32:35 -0800435 LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i)", con, (RsElement)type, mips, usage);
Jason Samsc5765372011-04-28 18:26:48 -0700436 return (jint) rsAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage);
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 Samsf7086092011-01-12 13:28:37 -0800446static void
447nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
448{
449 LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
450 rsAllocationGenerateMipmaps(con, (RsAllocation)alloc);
451}
452
Jason Samsffe9f482009-06-01 17:45:53 -0700453static int
Jason Sams5476b452010-12-08 16:14:36 -0800454nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Jason Samsffe9f482009-06-01 17:45:53 -0700455{
Jason Samsffe9f482009-06-01 17:45:53 -0700456 SkBitmap const * nativeBitmap =
457 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
458 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsffe9f482009-06-01 17:45:53 -0700459
Jason Sams5476b452010-12-08 16:14:36 -0800460 bitmap.lockPixels();
461 const void* ptr = bitmap.getPixels();
Jason Samsc5765372011-04-28 18:26:48 -0700462 jint id = (jint)rsAllocationCreateFromBitmap(con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700463 (RsType)type, (RsAllocationMipmapControl)mip,
464 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800465 bitmap.unlockPixels();
466 return id;
Jason Samsffe9f482009-06-01 17:45:53 -0700467}
Jason Samsfe08d992009-05-27 14:45:32 -0700468
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800469static int
Jason Sams5476b452010-12-08 16:14:36 -0800470nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800471{
472 SkBitmap const * nativeBitmap =
473 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
474 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800475
Jason Sams5476b452010-12-08 16:14:36 -0800476 bitmap.lockPixels();
477 const void* ptr = bitmap.getPixels();
Jason Samsc5765372011-04-28 18:26:48 -0700478 jint id = (jint)rsAllocationCubeCreateFromBitmap(con,
Jason Sams65bdaf12011-04-26 14:50:00 -0700479 (RsType)type, (RsAllocationMipmapControl)mip,
480 ptr, bitmap.getSize(), usage);
Jason Sams5476b452010-12-08 16:14:36 -0800481 bitmap.unlockPixels();
482 return id;
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800483}
484
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700485static void
Jason Sams4ef66502010-12-10 16:03:15 -0800486nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700487{
488 SkBitmap const * nativeBitmap =
489 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
490 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsf7086092011-01-12 13:28:37 -0800491 int w = bitmap.width();
492 int h = bitmap.height();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700493
Jason Sams4ef66502010-12-10 16:03:15 -0800494 bitmap.lockPixels();
495 const void* ptr = bitmap.getPixels();
Jason Samsf7086092011-01-12 13:28:37 -0800496 rsAllocation2DData(con, (RsAllocation)alloc, 0, 0,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700497 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
Jason Samsf7086092011-01-12 13:28:37 -0800498 w, h, ptr, bitmap.getSize());
Jason Sams4ef66502010-12-10 16:03:15 -0800499 bitmap.unlockPixels();
500}
501
502static void
503nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
504{
505 SkBitmap const * nativeBitmap =
506 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
507 const SkBitmap& bitmap(*nativeBitmap);
508
509 bitmap.lockPixels();
510 void* ptr = bitmap.getPixels();
511 rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
512 bitmap.unlockPixels();
Alex Sakhartchouk835b8542011-07-20 14:33:10 -0700513 bitmap.notifyPixelsChanged();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700514}
515
Jason Sams8a647432010-03-01 15:31:04 -0800516static void ReleaseBitmapCallback(void *bmp)
517{
518 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
519 nativeBitmap->unlockPixels();
520}
521
Romain Guy650a3eb2009-08-31 14:06:43 -0700522
Jason Samsd19f10d2009-05-22 14:03:28 -0700523static void
Jason Sams49a05d72010-12-29 14:31:29 -0800524nAllocationData1D_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 -0700525{
Jason Samsd19f10d2009-05-22 14:03:28 -0700526 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800527 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 -0700528 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800529 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700530 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
531}
532
533static void
Jason Sams49a05d72010-12-29 14:31:29 -0800534nAllocationData1D_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 -0700535{
Jason Sams768bc022009-09-21 19:41:04 -0700536 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800537 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 -0700538 jshort *ptr = _env->GetShortArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800539 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700540 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
541}
542
543static void
Jason Sams49a05d72010-12-29 14:31:29 -0800544nAllocationData1D_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 -0700545{
Jason Sams768bc022009-09-21 19:41:04 -0700546 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800547 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 -0700548 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800549 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700550 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
551}
552
553static void
Jason Sams49a05d72010-12-29 14:31:29 -0800554nAllocationData1D_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 -0700555{
Jason Samsd19f10d2009-05-22 14:03:28 -0700556 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800557 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 -0700558 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800559 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700560 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
561}
562
563static void
Jason Sams49a05d72010-12-29 14:31:29 -0800564// native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
565nAllocationElementData1D(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 -0700566{
567 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800568 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 -0700569 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800570 rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, compIdx, sizeBytes);
Jason Sams49bdaf02010-08-31 13:50:42 -0700571 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
572}
573
574static void
Jason Samsfb9f82c2011-01-12 14:53:25 -0800575nAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
576 jint w, jint h, jshortArray data, int sizeBytes)
577{
578 jint len = _env->GetArrayLength(data);
579 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);
580 jshort *ptr = _env->GetShortArrayElements(data, NULL);
581 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
582 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
583}
584
585static void
586nAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
587 jint w, jint h, jbyteArray data, int sizeBytes)
588{
589 jint len = _env->GetArrayLength(data);
590 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);
591 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
592 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
593 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
594}
595
596static void
Jason Sams49a05d72010-12-29 14:31:29 -0800597nAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
598 jint w, jint h, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700599{
Jason Samsd19f10d2009-05-22 14:03:28 -0700600 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800601 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 -0700602 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800603 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700604 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
605}
606
607static void
Jason Sams49a05d72010-12-29 14:31:29 -0800608nAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
609 jint w, jint h, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700610{
Jason Samsd19f10d2009-05-22 14:03:28 -0700611 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800612 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 -0700613 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800614 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700615 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
616}
617
Jason Sams40a29e82009-08-10 14:55:26 -0700618static void
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700619nAllocationData2D_alloc(JNIEnv *_env, jobject _this, RsContext con,
620 jint dstAlloc, jint dstXoff, jint dstYoff,
621 jint dstMip, jint dstFace,
622 jint width, jint height,
623 jint srcAlloc, jint srcXoff, jint srcYoff,
624 jint srcMip, jint srcFace)
625{
626 LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff, dstYoff,"
627 " dstMip(%i), dstFace(%i), width(%i), height(%i),"
628 " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
629 con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
630 width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
631
632 rsAllocationCopy2DRange(con,
633 (RsAllocation)dstAlloc,
634 dstXoff, dstYoff,
635 dstMip, dstFace,
636 width, height,
637 (RsAllocation)srcAlloc,
638 srcXoff, srcYoff,
639 srcMip, srcFace);
640}
641
642static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700643nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700644{
Jason Sams40a29e82009-08-10 14:55:26 -0700645 jint len = _env->GetArrayLength(data);
646 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
647 jint *ptr = _env->GetIntArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700648 jsize length = _env->GetArrayLength(data);
649 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700650 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700651}
652
653static void
Jason Samsfb9f82c2011-01-12 14:53:25 -0800654nAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
655{
656 jint len = _env->GetArrayLength(data);
657 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
658 jshort *ptr = _env->GetShortArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700659 jsize length = _env->GetArrayLength(data);
660 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Jason Samsfb9f82c2011-01-12 14:53:25 -0800661 _env->ReleaseShortArrayElements(data, ptr, 0);
662}
663
664static void
665nAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
666{
667 jint len = _env->GetArrayLength(data);
668 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
669 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700670 jsize length = _env->GetArrayLength(data);
671 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Jason Samsfb9f82c2011-01-12 14:53:25 -0800672 _env->ReleaseByteArrayElements(data, ptr, 0);
673}
674
675static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700676nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700677{
Jason Sams40a29e82009-08-10 14:55:26 -0700678 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700679 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700680 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700681 jsize length = _env->GetArrayLength(data);
682 rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700683 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700684}
Jason Samsd19f10d2009-05-22 14:03:28 -0700685
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700686static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700687nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700688{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700689 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700690 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700691}
692
Jason Sams5edc6082010-10-05 13:32:49 -0700693static void
694nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
695{
696 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
697 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
698}
699
700static void
701nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
702{
703 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
704 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
705}
706
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700707// -----------------------------------
708
709static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700710nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700711{
712 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700713
714 Asset* asset = reinterpret_cast<Asset*>(native_asset);
715
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800716 jint id = (jint)rsaFileA3DCreateFromMemory(con, asset->getBuffer(false), asset->getLength());
717 return id;
718}
719
720static int
721nFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path)
722{
723 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
724 if (mgr == NULL) {
725 return 0;
726 }
727
728 AutoJavaStringToUTF8 str(_env, _path);
729 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
730 if (asset == NULL) {
731 return 0;
732 }
733
734 jint id = (jint)rsaFileA3DCreateFromAsset(con, asset);
735 return id;
736}
737
738static int
739nFileA3DCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName)
740{
741 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
742 jint id = (jint)rsaFileA3DCreateFromFile(con, fileNameUTF.c_str());
743
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700744 return id;
745}
746
747static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700748nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700749{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700750 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700751 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700752 return numEntries;
753}
754
755static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700756nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700757{
758 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700759 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
760
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700761 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700762
763 for(jint i = 0; i < numEntries; i ++) {
764 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
765 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
766 }
767
768 free(fileEntries);
769}
770
771static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700772nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700773{
774 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700775 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700776 return id;
777}
Jason Samsd19f10d2009-05-22 14:03:28 -0700778
779// -----------------------------------
780
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700781static int
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800782nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con,
783 jstring fileName, jfloat fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700784{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800785 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700786 jint id = (jint)rsFontCreateFromFile(con,
787 fileNameUTF.c_str(), fileNameUTF.length(),
788 fontSize, dpi);
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700789
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800790 return id;
791}
792
793static int
794nFontCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con,
795 jstring name, jfloat fontSize, jint dpi, jint native_asset)
796{
797 Asset* asset = reinterpret_cast<Asset*>(native_asset);
798 AutoJavaStringToUTF8 nameUTF(_env, name);
799
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700800 jint id = (jint)rsFontCreateFromMemory(con,
801 nameUTF.c_str(), nameUTF.length(),
802 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800803 asset->getBuffer(false), asset->getLength());
804 return id;
805}
806
807static int
808nFontCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path,
809 jfloat fontSize, jint dpi)
810{
811 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
812 if (mgr == NULL) {
813 return 0;
814 }
815
816 AutoJavaStringToUTF8 str(_env, _path);
817 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
818 if (asset == NULL) {
819 return 0;
820 }
821
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700822 jint id = (jint)rsFontCreateFromMemory(con,
823 str.c_str(), str.length(),
824 fontSize, dpi,
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800825 asset->getBuffer(false), asset->getLength());
826 delete asset;
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700827 return id;
828}
829
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700830// -----------------------------------
831
832static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700833nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700834{
Jason Samsd19f10d2009-05-22 14:03:28 -0700835 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700836 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700837}
838
839static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700840nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700841{
Jason Samscfc04362010-09-14 14:59:03 -0700842 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700843 rsScriptSetVarI(con, (RsScript)script, slot, val);
844}
845
846static void
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800847nScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
848{
849 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
850 rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
851}
852
853static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700854nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
855{
856 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
857 rsScriptSetVarJ(con, (RsScript)script, slot, val);
858}
859
860static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700861nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700862{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700863 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700864 rsScriptSetVarF(con, (RsScript)script, slot, val);
865}
866
867static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700868nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
869{
870 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
871 rsScriptSetVarD(con, (RsScript)script, slot, val);
872}
873
874static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700875nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700876{
Jason Sams4d339932010-05-11 14:03:58 -0700877 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
878 jint len = _env->GetArrayLength(data);
879 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
880 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
881 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
882}
883
Jason Samsd19f10d2009-05-22 14:03:28 -0700884
885static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700886nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700887{
Jason Sams07ae4062009-08-27 20:23:34 -0700888 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700889
890 jint length = _env->GetArrayLength(timeZone);
891 jbyte* timeZone_ptr;
892 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
893
Jason Samsbc948de2009-08-17 18:35:48 -0700894 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700895
896 if (timeZone_ptr) {
897 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
898 }
899}
900
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700901static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700902nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700903{
Jason Samsbe2e8412009-09-16 15:04:38 -0700904 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
905 rsScriptInvoke(con, (RsScript)obj, slot);
906}
907
908static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700909nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700910{
Jason Sams4d339932010-05-11 14:03:58 -0700911 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
912 jint len = _env->GetArrayLength(data);
913 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
914 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
915 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
916}
917
Jason Sams6e494d32011-04-27 16:33:11 -0700918static void
919nScriptForEach(JNIEnv *_env, jobject _this, RsContext con,
920 jint script, jint slot, jint ain, jint aout)
921{
922 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
923 rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0);
924}
925static void
926nScriptForEachV(JNIEnv *_env, jobject _this, RsContext con,
927 jint script, jint slot, jint ain, jint aout, jbyteArray params)
928{
929 LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
930 jint len = _env->GetArrayLength(params);
931 jbyte *ptr = _env->GetByteArrayElements(params, NULL);
932 rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len);
933 _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
934}
935
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700936
Jason Sams22534172009-08-04 16:58:20 -0700937// -----------------------------------
938
Jason Samse4a06c52011-03-16 16:29:28 -0700939static jint
940nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con,
941 jstring resName, jstring cacheDir,
942 jbyteArray scriptRef, jint length)
Jason Sams22534172009-08-04 16:58:20 -0700943{
Jason Samse4a06c52011-03-16 16:29:28 -0700944 LOG_API("nScriptCCreate, con(%p)", con);
Jason Sams22534172009-08-04 16:58:20 -0700945
Jason Samse4a06c52011-03-16 16:29:28 -0700946 AutoJavaStringToUTF8 resNameUTF(_env, resName);
947 AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
948 jint ret = 0;
Elliott Hughes8451b252011-04-07 19:17:57 -0700949 jbyte* script_ptr = NULL;
Jack Palevich43702d82009-05-28 13:38:16 -0700950 jint _exception = 0;
951 jint remaining;
Jack Palevich43702d82009-05-28 13:38:16 -0700952 if (!scriptRef) {
953 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -0700954 //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
Jack Palevich43702d82009-05-28 13:38:16 -0700955 goto exit;
956 }
Jack Palevich43702d82009-05-28 13:38:16 -0700957 if (length < 0) {
958 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -0700959 //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
Jack Palevich43702d82009-05-28 13:38:16 -0700960 goto exit;
961 }
Jason Samse4a06c52011-03-16 16:29:28 -0700962 remaining = _env->GetArrayLength(scriptRef);
Jack Palevich43702d82009-05-28 13:38:16 -0700963 if (remaining < length) {
964 _exception = 1;
Elliott Hughes8451b252011-04-07 19:17:57 -0700965 //jniThrowException(_env, "java/lang/IllegalArgumentException",
966 // "length > script.length - offset");
Jack Palevich43702d82009-05-28 13:38:16 -0700967 goto exit;
968 }
Jason Samse4a06c52011-03-16 16:29:28 -0700969 script_ptr = (jbyte *)
Jack Palevich43702d82009-05-28 13:38:16 -0700970 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
Jack Palevich43702d82009-05-28 13:38:16 -0700971
Jason Samse4a06c52011-03-16 16:29:28 -0700972 //rsScriptCSetText(con, (const char *)script_ptr, length);
973
Alex Sakhartchouke7c4a752011-04-06 10:57:51 -0700974 ret = (jint)rsScriptCCreate(con,
975 resNameUTF.c_str(), resNameUTF.length(),
976 cacheDirUTF.c_str(), cacheDirUTF.length(),
Jason Samse4a06c52011-03-16 16:29:28 -0700977 (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700978
Jack Palevich43702d82009-05-28 13:38:16 -0700979exit:
Jason Samse4a06c52011-03-16 16:29:28 -0700980 if (script_ptr) {
981 _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
Jack Palevich43702d82009-05-28 13:38:16 -0700982 _exception ? JNI_ABORT: 0);
983 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700984
Jason Samse4a06c52011-03-16 16:29:28 -0700985 return ret;
Jason Samsd19f10d2009-05-22 14:03:28 -0700986}
987
988// ---------------------------------------------------------------------------
989
Jason Samsd19f10d2009-05-22 14:03:28 -0700990static jint
Jason Sams331bf9b2011-04-06 11:23:54 -0700991nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con,
992 jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
993 jboolean depthMask, jboolean ditherEnable,
994 jint srcFunc, jint destFunc,
995 jint depthFunc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700996{
Jason Sams54db59c2010-05-13 18:30:11 -0700997 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams331bf9b2011-04-06 11:23:54 -0700998 return (jint)rsProgramStoreCreate(con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
999 depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1000 (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
Jason Samsd19f10d2009-05-22 14:03:28 -07001001}
1002
Jason Sams0011bcf2009-12-15 12:58:36 -08001003// ---------------------------------------------------------------------------
1004
1005static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001006nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001007{
Jason Sams0011bcf2009-12-15 12:58:36 -08001008 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1009 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
1010}
Jason Sams54c0ec12009-11-30 14:49:55 -08001011
Jason Sams68afd012009-12-17 16:55:08 -08001012static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001013nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001014{
Jason Sams68afd012009-12-17 16:55:08 -08001015 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1016 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1017}
1018
1019static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001020nProgramBindSampler(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("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1023 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1024}
1025
Jason Samsd19f10d2009-05-22 14:03:28 -07001026// ---------------------------------------------------------------------------
1027
Jason Samsd19f10d2009-05-22 14:03:28 -07001028static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001029nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001030{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001031 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001032 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1033 jint paramLen = _env->GetArrayLength(params);
1034
Jason Sams991040c2011-01-17 15:59:39 -08001035 LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001036
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001037 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001038 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1039 return ret;
1040}
1041
1042
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001043// ---------------------------------------------------------------------------
1044
Jason Sams0011bcf2009-12-15 12:58:36 -08001045static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001046nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001047{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001048 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams0011bcf2009-12-15 12:58:36 -08001049 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1050 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001051
Jason Sams991040c2011-01-17 15:59:39 -08001052 LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", con, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001053
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001054 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001055 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1056 return ret;
1057}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001058
Jason Samsebfb4362009-09-23 13:57:02 -07001059// ---------------------------------------------------------------------------
1060
1061static jint
Jason Sams94aaed32011-09-23 14:18:53 -07001062nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSprite, jint cull)
Jason Samsebfb4362009-09-23 13:57:02 -07001063{
Jason Sams94aaed32011-09-23 14:18:53 -07001064 LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", con, pointSprite, cull);
1065 return (jint)rsProgramRasterCreate(con, pointSprite, (RsCullMode)cull);
Jason Samsebfb4362009-09-23 13:57:02 -07001066}
1067
Jason Samsd19f10d2009-05-22 14:03:28 -07001068
1069// ---------------------------------------------------------------------------
1070
1071static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001072nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001073{
Jason Samsd19f10d2009-05-22 14:03:28 -07001074 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001075 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001076}
1077
1078static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001079nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001080{
Jason Sams54db59c2010-05-13 18:30:11 -07001081 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1082 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001083}
1084
1085static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001086nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001087{
Jason Samsd19f10d2009-05-22 14:03:28 -07001088 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001089 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001090}
1091
Jason Sams0826a6f2009-06-15 19:04:56 -07001092static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001093nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001094{
Jason Sams0826a6f2009-06-15 19:04:56 -07001095 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001096 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001097}
1098
Joe Onoratod7b37742009-08-09 22:57:44 -07001099static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001100nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001101{
Jason Samsebfb4362009-09-23 13:57:02 -07001102 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1103 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1104}
1105
Joe Onoratod7b37742009-08-09 22:57:44 -07001106
Jason Sams02fb2cb2009-05-28 15:37:57 -07001107// ---------------------------------------------------------------------------
1108
Jason Sams02fb2cb2009-05-28 15:37:57 -07001109static jint
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001110nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con, jint magFilter, jint minFilter,
1111 jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001112{
Jason Samsbba134c2009-06-22 15:49:21 -07001113 LOG_API("nSamplerCreate, con(%p)", con);
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001114 return (jint)rsSamplerCreate(con,
1115 (RsSamplerValue)magFilter,
1116 (RsSamplerValue)minFilter,
1117 (RsSamplerValue)wrapS,
1118 (RsSamplerValue)wrapT,
1119 (RsSamplerValue)wrapR,
1120 aniso);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001121}
1122
Jason Samsbba134c2009-06-22 15:49:21 -07001123// ---------------------------------------------------------------------------
1124
Jason Samsbba134c2009-06-22 15:49:21 -07001125static jint
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001126nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jintArray _vtx, jintArray _idx, jintArray _prim)
Jason Samsbba134c2009-06-22 15:49:21 -07001127{
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001128 LOG_API("nMeshCreate, con(%p)", con);
1129
1130 jint vtxLen = _env->GetArrayLength(_vtx);
1131 jint *vtxPtr = _env->GetIntArrayElements(_vtx, NULL);
1132 jint idxLen = _env->GetArrayLength(_idx);
1133 jint *idxPtr = _env->GetIntArrayElements(_idx, NULL);
1134 jint primLen = _env->GetArrayLength(_prim);
1135 jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1136
1137 int id = (int)rsMeshCreate(con,
1138 (RsAllocation *)vtxPtr, vtxLen,
1139 (RsAllocation *)idxPtr, idxLen,
1140 (uint32_t *)primPtr, primLen);
1141
1142 _env->ReleaseIntArrayElements(_vtx, vtxPtr, 0);
1143 _env->ReleaseIntArrayElements(_idx, idxPtr, 0);
1144 _env->ReleaseIntArrayElements(_prim, primPtr, 0);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001145 return id;
1146}
1147
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001148static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001149nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001150{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001151 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1152 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001153 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001154 return vtxCount;
1155}
1156
1157static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001158nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001159{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001160 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1161 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001162 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001163 return idxCount;
1164}
1165
1166static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001167nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001168{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001169 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1170
1171 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001172 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001173
1174 for(jint i = 0; i < numVtxIDs; i ++) {
1175 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1176 }
1177
1178 free(allocs);
1179}
1180
1181static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001182nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001183{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001184 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1185
1186 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1187 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1188
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001189 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001190
1191 for(jint i = 0; i < numIndices; i ++) {
1192 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1193 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1194 }
1195
1196 free(allocs);
1197 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001198}
1199
1200// ---------------------------------------------------------------------------
1201
Jason Samsd19f10d2009-05-22 14:03:28 -07001202
Jason Sams94d8e90a2009-06-10 16:09:05 -07001203static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001204
1205static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001206{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001207
Jason Sams1c415172010-11-08 17:06:46 -08001208{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1209{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
1210{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
Jason Samsedbfabd2011-05-17 15:01:29 -07001211{"nContextGetUserMessage", "(I[I)I", (void*)nContextGetUserMessage },
Jason Sams1c415172010-11-08 17:06:46 -08001212{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
Jason Samsedbfabd2011-05-17 15:01:29 -07001213{"nContextPeekMessage", "(I[I)I", (void*)nContextPeekMessage },
Jason Sams1c415172010-11-08 17:06:46 -08001214
1215{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1216{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001217
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001218
Jason Sams2e1872f2010-08-17 16:25:41 -07001219// All methods below are thread protected in java.
Stephen Hines4382467a2011-08-01 15:02:34 -07001220{"rsnContextCreate", "(III)I", (void*)nContextCreate },
1221{"rsnContextCreateGL", "(IIIIIIIIIIIIIFI)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001222{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1223{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1224{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Jason Samsfaa32b32011-06-20 16:58:04 -07001225{"rsnContextSetSurfaceTexture", "(IIILandroid/graphics/SurfaceTexture;)V", (void*)nContextSetSurfaceTexture },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001226{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001227{"rsnContextDump", "(II)V", (void*)nContextDump },
1228{"rsnContextPause", "(I)V", (void*)nContextPause },
1229{"rsnContextResume", "(I)V", (void*)nContextResume },
1230{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001231{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001232{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001233
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001234{"rsnFileA3DCreateFromFile", "(ILjava/lang/String;)I", (void*)nFileA3DCreateFromFile },
Jason Sams2e1872f2010-08-17 16:25:41 -07001235{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001236{"rsnFileA3DCreateFromAsset", "(ILandroid/content/res/AssetManager;Ljava/lang/String;)I", (void*)nFileA3DCreateFromAsset },
Jason Sams2e1872f2010-08-17 16:25:41 -07001237{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001238{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001239{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001240
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -08001241{"rsnFontCreateFromFile", "(ILjava/lang/String;FI)I", (void*)nFontCreateFromFile },
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001242{"rsnFontCreateFromAssetStream", "(ILjava/lang/String;FII)I", (void*)nFontCreateFromAssetStream },
1243{"rsnFontCreateFromAsset", "(ILandroid/content/res/AssetManager;Ljava/lang/String;FI)I", (void*)nFontCreateFromAsset },
Jason Samsd19f10d2009-05-22 14:03:28 -07001244
Jason Sams2e1872f2010-08-17 16:25:41 -07001245{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001246{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001247{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -07001248{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;[I)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001249
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001250{"rsnTypeCreate", "(IIIIIZZ)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001251{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001252
Jason Samsd4b23b52010-12-13 15:32:35 -08001253{"rsnAllocationCreateTyped", "(IIII)I", (void*)nAllocationCreateTyped },
Jason Sams5476b452010-12-08 16:14:36 -08001254{"rsnAllocationCreateFromBitmap", "(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCreateFromBitmap },
1255{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08001256
Jason Sams4ef66502010-12-10 16:03:15 -08001257{"rsnAllocationCopyFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
1258{"rsnAllocationCopyToBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
1259
Jason Sams5476b452010-12-08 16:14:36 -08001260{"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll },
Jason Sams49a05d72010-12-29 14:31:29 -08001261{"rsnAllocationData1D", "(IIIII[II)V", (void*)nAllocationData1D_i },
1262{"rsnAllocationData1D", "(IIIII[SI)V", (void*)nAllocationData1D_s },
1263{"rsnAllocationData1D", "(IIIII[BI)V", (void*)nAllocationData1D_b },
1264{"rsnAllocationData1D", "(IIIII[FI)V", (void*)nAllocationData1D_f },
1265{"rsnAllocationElementData1D", "(IIIII[BI)V", (void*)nAllocationElementData1D },
1266{"rsnAllocationData2D", "(IIIIIIII[II)V", (void*)nAllocationData2D_i },
Jason Samsfb9f82c2011-01-12 14:53:25 -08001267{"rsnAllocationData2D", "(IIIIIIII[SI)V", (void*)nAllocationData2D_s },
1268{"rsnAllocationData2D", "(IIIIIIII[BI)V", (void*)nAllocationData2D_b },
Jason Sams49a05d72010-12-29 14:31:29 -08001269{"rsnAllocationData2D", "(IIIIIIII[FI)V", (void*)nAllocationData2D_f },
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -07001270{"rsnAllocationData2D", "(IIIIIIIIIIIII)V", (void*)nAllocationData2D_alloc },
Jason Sams2e1872f2010-08-17 16:25:41 -07001271{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
Jason Samsfb9f82c2011-01-12 14:53:25 -08001272{"rsnAllocationRead", "(II[S)V", (void*)nAllocationRead_s },
1273{"rsnAllocationRead", "(II[B)V", (void*)nAllocationRead_b },
Jason Sams2e1872f2010-08-17 16:25:41 -07001274{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001275{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001276{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1277{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsf7086092011-01-12 13:28:37 -08001278{"rsnAllocationGenerateMipmaps", "(II)V", (void*)nAllocationGenerateMipmaps },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001279
Jason Sams2e1872f2010-08-17 16:25:41 -07001280{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1281{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1282{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1283{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
Jason Sams6e494d32011-04-27 16:33:11 -07001284{"rsnScriptForEach", "(IIIII)V", (void*)nScriptForEach },
1285{"rsnScriptForEach", "(IIIII[B)V", (void*)nScriptForEachV },
Jason Sams2e1872f2010-08-17 16:25:41 -07001286{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001287{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001288{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001289{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001290{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001291{"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001292
Jason Samse4a06c52011-03-16 16:29:28 -07001293{"rsnScriptCCreate", "(ILjava/lang/String;Ljava/lang/String;[BI)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001294
Jason Sams331bf9b2011-04-06 11:23:54 -07001295{"rsnProgramStoreCreate", "(IZZZZZZIII)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001296
Jason Sams2e1872f2010-08-17 16:25:41 -07001297{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1298{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1299{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001300
Jason Sams49a05d72010-12-29 14:31:29 -08001301{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams94aaed32011-09-23 14:18:53 -07001302{"rsnProgramRasterCreate", "(IZI)I", (void*)nProgramRasterCreate },
Jason Sams49a05d72010-12-29 14:31:29 -08001303{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001304
Jason Sams2e1872f2010-08-17 16:25:41 -07001305{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001306{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001307{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1308{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1309{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001310
Alex Sakhartchouka89094a2011-05-04 17:45:36 -07001311{"rsnSamplerCreate", "(IIIIIIF)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001312
Alex Sakhartchouk25999a02011-05-12 10:38:03 -07001313{"rsnMeshCreate", "(I[I[I[I)I", (void*)nMeshCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001314
1315{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1316{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001317{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001318{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001319
Jason Samsd19f10d2009-05-22 14:03:28 -07001320};
1321
1322static int registerFuncs(JNIEnv *_env)
1323{
1324 return android::AndroidRuntime::registerNativeMethods(
1325 _env, classPathName, methods, NELEM(methods));
1326}
1327
1328// ---------------------------------------------------------------------------
1329
1330jint JNI_OnLoad(JavaVM* vm, void* reserved)
1331{
1332 JNIEnv* env = NULL;
1333 jint result = -1;
1334
Jason Samsd19f10d2009-05-22 14:03:28 -07001335 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1336 LOGE("ERROR: GetEnv failed\n");
1337 goto bail;
1338 }
1339 assert(env != NULL);
1340
1341 if (registerFuncs(env) < 0) {
1342 LOGE("ERROR: MediaPlayer native registration failed\n");
1343 goto bail;
1344 }
1345
1346 /* success -- return valid version number */
1347 result = JNI_VERSION_1_4;
1348
1349bail:
1350 return result;
1351}