blob: b2e8dd93a989f9c75fa86806cc2615c16786d92a [file] [log] [blame]
Jason Samsd19f10d2009-05-22 14:03:28 -07001/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
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>
35#include <utils/ResourceTypes.h>
Jason Samsf29ca502009-06-23 12:22:47 -070036
Jason Samsd19f10d2009-05-22 14:03:28 -070037#include "jni.h"
38#include "JNIHelp.h"
39#include "android_runtime/AndroidRuntime.h"
Jim Milleree956052010-08-19 18:56:00 -070040#include "android_runtime/android_view_Surface.h"
Jason Samsd19f10d2009-05-22 14:03:28 -070041
Jason Samse29d4712009-07-23 15:19:03 -070042#include <RenderScript.h>
43#include <RenderScriptEnv.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070044
45//#define LOG_API LOGE
46#define LOG_API(...)
47
48using namespace android;
49
Jason Samsd19f10d2009-05-22 14:03:28 -070050// ---------------------------------------------------------------------------
51
52static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
53{
54 jclass npeClazz = env->FindClass(exc);
55 env->ThrowNew(npeClazz, msg);
56}
57
Jason Samsffe9f482009-06-01 17:45:53 -070058static jfieldID gContextId = 0;
59static jfieldID gNativeBitmapID = 0;
Jason Sams43ee06852009-08-12 17:54:11 -070060static jfieldID gTypeNativeCache = 0;
Jason Samsd19f10d2009-05-22 14:03:28 -070061
Jason Samsea84a7c2009-09-04 14:42:41 -070062static RsElement g_A_8 = NULL;
63static RsElement g_RGBA_4444 = NULL;
64static RsElement g_RGBA_8888 = NULL;
65static RsElement g_RGB_565 = NULL;
66
Jason Samsd19f10d2009-05-22 14:03:28 -070067static void _nInit(JNIEnv *_env, jclass _this)
68{
Jason Samsd19f10d2009-05-22 14:03:28 -070069 gContextId = _env->GetFieldID(_this, "mContext", "I");
Jason Samsffe9f482009-06-01 17:45:53 -070070
71 jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
72 gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
Jason Sams43ee06852009-08-12 17:54:11 -070073
74 jclass typeClass = _env->FindClass("android/renderscript/Type");
75 gTypeNativeCache = _env->GetFieldID(typeClass, "mNativeCache", "I");
Jason Samsd19f10d2009-05-22 14:03:28 -070076}
77
Jason Samsea84a7c2009-09-04 14:42:41 -070078static void nInitElements(JNIEnv *_env, jobject _this, jint a8, jint rgba4444, jint rgba8888, jint rgb565)
79{
80 g_A_8 = reinterpret_cast<RsElement>(a8);
81 g_RGBA_4444 = reinterpret_cast<RsElement>(rgba4444);
82 g_RGBA_8888 = reinterpret_cast<RsElement>(rgba8888);
83 g_RGB_565 = reinterpret_cast<RsElement>(rgb565);
84}
Jason Samsd19f10d2009-05-22 14:03:28 -070085
86// ---------------------------------------------------------------------------
87
Jason Sams3eaa338e2009-06-10 15:04:38 -070088static void
Jason Sams2e1872f2010-08-17 16:25:41 -070089nContextFinish(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams96ed4cf2010-06-15 12:15:57 -070090{
Jason Sams96ed4cf2010-06-15 12:15:57 -070091 LOG_API("nContextFinish, con(%p)", con);
92 rsContextFinish(con);
93}
94
95static void
Jason Sams2e1872f2010-08-17 16:25:41 -070096nAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
Jason Sams3eaa338e2009-06-10 15:04:38 -070097{
Jason Sams07ae4062009-08-27 20:23:34 -070098 LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
Jason Sams3eaa338e2009-06-10 15:04:38 -070099 jint len = _env->GetArrayLength(str);
100 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -0700101 rsAssignName(con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -0700102 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
103}
104
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700105static jstring
Jason Sams2e1872f2010-08-17 16:25:41 -0700106nGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700107{
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700108 LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700109 const char *name = NULL;
110 rsGetName(con, (void *)obj, &name);
111 return _env->NewStringUTF(name);
112}
113
Jason Sams7ce033d2009-08-18 14:14:24 -0700114static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700115nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Jason Sams7ce033d2009-08-18 14:14:24 -0700116{
Jason Sams7ce033d2009-08-18 14:14:24 -0700117 LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
118 rsObjDestroy(con, (void *)obj);
119}
120
Jason Sams3eaa338e2009-06-10 15:04:38 -0700121
Jason Sams64676f32009-07-08 18:01:53 -0700122static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700123nFileOpen(JNIEnv *_env, jobject _this, RsContext con, jbyteArray str)
Jason Sams64676f32009-07-08 18:01:53 -0700124{
Jason Sams64676f32009-07-08 18:01:53 -0700125 LOG_API("nFileOpen, con(%p)", con);
Jason Sams64676f32009-07-08 18:01:53 -0700126 jint len = _env->GetArrayLength(str);
127 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -0700128 jint ret = (jint)rsFileOpen(con, (const char *)cptr, len);
Jason Sams64676f32009-07-08 18:01:53 -0700129 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
130 return ret;
131}
132
Jason Sams3eaa338e2009-06-10 15:04:38 -0700133// ---------------------------------------------------------------------------
134
Jason Samsd19f10d2009-05-22 14:03:28 -0700135static jint
136nDeviceCreate(JNIEnv *_env, jobject _this)
137{
138 LOG_API("nDeviceCreate");
139 return (jint)rsDeviceCreate();
140}
141
142static void
143nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
144{
145 LOG_API("nDeviceDestroy");
146 return rsDeviceDestroy((RsDevice)dev);
147}
148
Jason Samsebfb4362009-09-23 13:57:02 -0700149static void
150nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
151{
152 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
153 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
154}
155
Jason Samsd19f10d2009-05-22 14:03:28 -0700156static jint
Jason Sams704ff642010-02-09 16:05:07 -0800157nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
Jason Samsd19f10d2009-05-22 14:03:28 -0700158{
159 LOG_API("nContextCreate");
Jason Sams704ff642010-02-09 16:05:07 -0800160 return (jint)rsContextCreate((RsDevice)dev, ver);
161}
162
163static jint
164nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, jboolean useDepth)
165{
166 LOG_API("nContextCreateGL");
167 return (jint)rsContextCreateGL((RsDevice)dev, ver, useDepth);
Jason Samsd19f10d2009-05-22 14:03:28 -0700168}
169
170static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700171nContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800172{
Jason Sams7d787b42009-11-15 12:14:26 -0800173 LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
174 rsContextSetPriority(con, p);
175}
176
177
178
179static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700180nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800181{
Jason Sams3bc47d42009-11-12 15:10:25 -0800182 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800183
184 Surface * window = NULL;
185 if (wnd == NULL) {
186
187 } else {
Jim Milleree956052010-08-19 18:56:00 -0700188 window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800189 }
190
Jason Sams3bc47d42009-11-12 15:10:25 -0800191 rsContextSetSurface(con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800192}
193
194static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700195nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700196{
Jason Sams2e1872f2010-08-17 16:25:41 -0700197 LOG_API("nContextDestroy, con(%p)", con);
198 rsContextDestroy(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700199}
200
Jason Sams715333b2009-11-17 17:26:46 -0800201static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700202nContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800203{
Jason Sams715333b2009-11-17 17:26:46 -0800204 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
205 rsContextDump((RsContext)con, bits);
206}
Jason Samsd19f10d2009-05-22 14:03:28 -0700207
208static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700209nContextPause(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700210{
Jason Sams65e7aa52009-09-24 17:38:20 -0700211 LOG_API("nContextPause, con(%p)", con);
212 rsContextPause(con);
213}
214
215static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700216nContextResume(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700217{
Jason Sams65e7aa52009-09-24 17:38:20 -0700218 LOG_API("nContextResume, con(%p)", con);
219 rsContextResume(con);
220}
221
Jason Sams516c3192009-10-06 13:58:47 -0700222static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700223nContextGetMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data, jboolean wait)
Jason Sams516c3192009-10-06 13:58:47 -0700224{
Jason Sams516c3192009-10-06 13:58:47 -0700225 jint len = _env->GetArrayLength(data);
226 LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
227 jint *ptr = _env->GetIntArrayElements(data, NULL);
228 size_t receiveLen;
229 int id = rsContextGetMessage(con, ptr, &receiveLen, len * 4, wait);
230 if (!id && receiveLen) {
231 LOGE("message receive buffer too small. %i", receiveLen);
232 }
233 _env->ReleaseIntArrayElements(data, ptr, 0);
234 return id;
235}
236
Jason Sams2e1872f2010-08-17 16:25:41 -0700237static void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700238{
Jason Sams516c3192009-10-06 13:58:47 -0700239 LOG_API("nContextInitToClient, con(%p)", con);
240 rsContextInitToClient(con);
241}
242
Jason Sams2e1872f2010-08-17 16:25:41 -0700243static void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700244{
Jason Sams516c3192009-10-06 13:58:47 -0700245 LOG_API("nContextDeinitToClient, con(%p)", con);
246 rsContextDeinitToClient(con);
247}
248
249
Jason Sams718cd1f2009-12-23 14:35:29 -0800250static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700251nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700252{
Jason Sams718cd1f2009-12-23 14:35:29 -0800253 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
254 return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700255}
256
257static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700258nElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names)
Jason Samsd19f10d2009-05-22 14:03:28 -0700259{
Jason Sams718cd1f2009-12-23 14:35:29 -0800260 int fieldCount = _env->GetArrayLength(_ids);
Jason Sams704ff642010-02-09 16:05:07 -0800261 LOG_API("nElementCreate2, con(%p)", con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800262
263 jint *ids = _env->GetIntArrayElements(_ids, NULL);
264 const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
265 size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
266
267 for (int ct=0; ct < fieldCount; ct++) {
268 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
269 nameArray[ct] = _env->GetStringUTFChars(s, NULL);
270 sizeArray[ct] = _env->GetStringUTFLength(s);
271 }
272 jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray);
273 for (int ct=0; ct < fieldCount; ct++) {
274 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
275 _env->ReleaseStringUTFChars(s, nameArray[ct]);
276 }
277 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
278 free(nameArray);
279 free(sizeArray);
280 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700281}
282
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700283static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700284nElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700285{
286 int dataSize = _env->GetArrayLength(_elementData);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700287 LOG_API("nElementGetNativeData, con(%p)", con);
288
289 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
290 assert(dataSize == 5);
291
292 uint32_t elementData[5];
293 rsElementGetNativeData(con, (RsElement)id, elementData, dataSize);
294
295 for(jint i = 0; i < dataSize; i ++) {
296 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
297 }
298}
299
300
301static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700302nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700303{
304 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700305 LOG_API("nElementGetSubElements, con(%p)", con);
306
307 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
308 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
309
310 rsElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
311
312 for(jint i = 0; i < dataSize; i ++) {
313 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
314 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
315 }
316
317 free(ids);
318 free(names);
319}
320
Jason Samsd19f10d2009-05-22 14:03:28 -0700321// -----------------------------------
322
323static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700324nTypeBegin(JNIEnv *_env, jobject _this, RsContext con, jint eID)
Jason Samsd19f10d2009-05-22 14:03:28 -0700325{
Jason Samsd19f10d2009-05-22 14:03:28 -0700326 LOG_API("nTypeBegin, con(%p) e(%p)", con, (RsElement)eID);
Jason Samsbc948de2009-08-17 18:35:48 -0700327 rsTypeBegin(con, (RsElement)eID);
Jason Samsd19f10d2009-05-22 14:03:28 -0700328}
329
330static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700331nTypeAdd(JNIEnv *_env, jobject _this, RsContext con, jint dim, jint val)
Jason Samsd19f10d2009-05-22 14:03:28 -0700332{
Jason Samsd19f10d2009-05-22 14:03:28 -0700333 LOG_API("nTypeAdd, con(%p) dim(%i), val(%i)", con, dim, val);
Jason Samsbc948de2009-08-17 18:35:48 -0700334 rsTypeAdd(con, (RsDimension)dim, val);
Jason Samsd19f10d2009-05-22 14:03:28 -0700335}
336
337static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700338nTypeCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700339{
Jason Samsd19f10d2009-05-22 14:03:28 -0700340 LOG_API("nTypeCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700341 return (jint)rsTypeCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700342}
343
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700344static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700345nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700346{
347 // We are packing 6 items: mDimX; mDimY; mDimZ;
348 // mDimLOD; mDimFaces; mElement; into typeData
349 int elementCount = _env->GetArrayLength(_typeData);
350
351 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700352 LOG_API("nTypeCreate, con(%p)", con);
353
354 uint32_t typeData[6];
355 rsTypeGetNativeData(con, (RsType)id, typeData, 6);
356
357 for(jint i = 0; i < elementCount; i ++) {
358 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
359 }
360}
361
Jason Sams43ee06852009-08-12 17:54:11 -0700362static void * SF_LoadInt(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
363{
364 ((int32_t *)buffer)[0] = _env->GetIntField(_obj, _field);
365 return ((uint8_t *)buffer) + 4;
366}
367
368static void * SF_LoadShort(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
369{
370 ((int16_t *)buffer)[0] = _env->GetShortField(_obj, _field);
371 return ((uint8_t *)buffer) + 2;
372}
373
374static void * SF_LoadByte(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
375{
376 ((int8_t *)buffer)[0] = _env->GetByteField(_obj, _field);
377 return ((uint8_t *)buffer) + 1;
378}
379
380static void * SF_LoadFloat(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
381{
382 ((float *)buffer)[0] = _env->GetFloatField(_obj, _field);
383 return ((uint8_t *)buffer) + 4;
384}
385
Jason Sams5f43fd22009-09-15 12:39:22 -0700386static void * SF_SaveInt(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
387{
Jason Sams5f43fd22009-09-15 12:39:22 -0700388 _env->SetIntField(_obj, _field, ((int32_t *)buffer)[0]);
389 return ((uint8_t *)buffer) + 4;
390}
391
392static void * SF_SaveShort(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
393{
Jason Sams5f43fd22009-09-15 12:39:22 -0700394 _env->SetShortField(_obj, _field, ((int16_t *)buffer)[0]);
395 return ((uint8_t *)buffer) + 2;
396}
397
398static void * SF_SaveByte(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
399{
Jason Sams5f43fd22009-09-15 12:39:22 -0700400 _env->SetByteField(_obj, _field, ((int8_t *)buffer)[0]);
401 return ((uint8_t *)buffer) + 1;
402}
403
404static void * SF_SaveFloat(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
405{
Jason Sams5f43fd22009-09-15 12:39:22 -0700406 _env->SetFloatField(_obj, _field, ((float *)buffer)[0]);
407 return ((uint8_t *)buffer) + 4;
408}
409
Jason Sams43ee06852009-08-12 17:54:11 -0700410struct TypeFieldCache {
411 jfieldID field;
412 int bits;
413 void * (*ptr)(JNIEnv *, jobject, jfieldID, void *buffer);
Jason Sams5f43fd22009-09-15 12:39:22 -0700414 void * (*readPtr)(JNIEnv *, jobject, jfieldID, void *buffer);
Jason Sams43ee06852009-08-12 17:54:11 -0700415};
416
417struct TypeCache {
418 int fieldCount;
419 int size;
420 TypeFieldCache fields[1];
421};
422
423//{"nTypeFinalDestroy", "(Landroid/renderscript/Type;)V", (void*)nTypeFinalDestroy },
424static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700425nTypeFinalDestroy(JNIEnv *_env, jobject _this, RsContext con, jobject _type)
Jason Sams43ee06852009-08-12 17:54:11 -0700426{
427 TypeCache *tc = (TypeCache *)_env->GetIntField(_type, gTypeNativeCache);
428 free(tc);
429}
430
431// native void nTypeSetupFields(Type t, int[] types, int[] bits, Field[] IDs);
432static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700433nTypeSetupFields(JNIEnv *_env, jobject _this, RsContext con, jobject _type, jintArray _types, jintArray _bits, jobjectArray _IDs)
Jason Sams43ee06852009-08-12 17:54:11 -0700434{
435 int fieldCount = _env->GetArrayLength(_types);
436 size_t structSize = sizeof(TypeCache) + (sizeof(TypeFieldCache) * (fieldCount-1));
437 TypeCache *tc = (TypeCache *)malloc(structSize);
438 memset(tc, 0, structSize);
439
440 TypeFieldCache *tfc = &tc->fields[0];
441 tc->fieldCount = fieldCount;
442 _env->SetIntField(_type, gTypeNativeCache, (jint)tc);
443
444 jint *fType = _env->GetIntArrayElements(_types, NULL);
445 jint *fBits = _env->GetIntArrayElements(_bits, NULL);
446 for (int ct=0; ct < fieldCount; ct++) {
447 jobject field = _env->GetObjectArrayElement(_IDs, ct);
448 tfc[ct].field = _env->FromReflectedField(field);
449 tfc[ct].bits = fBits[ct];
450
451 switch(fType[ct]) {
Jason Sams718cd1f2009-12-23 14:35:29 -0800452 case RS_TYPE_FLOAT_32:
Jason Sams43ee06852009-08-12 17:54:11 -0700453 tfc[ct].ptr = SF_LoadFloat;
Jason Sams5f43fd22009-09-15 12:39:22 -0700454 tfc[ct].readPtr = SF_SaveFloat;
Jason Sams43ee06852009-08-12 17:54:11 -0700455 break;
Jason Sams718cd1f2009-12-23 14:35:29 -0800456 case RS_TYPE_UNSIGNED_32:
457 case RS_TYPE_SIGNED_32:
458 tfc[ct].ptr = SF_LoadInt;
459 tfc[ct].readPtr = SF_SaveInt;
460 break;
461 case RS_TYPE_UNSIGNED_16:
462 case RS_TYPE_SIGNED_16:
463 tfc[ct].ptr = SF_LoadShort;
464 tfc[ct].readPtr = SF_SaveShort;
465 break;
466 case RS_TYPE_UNSIGNED_8:
467 case RS_TYPE_SIGNED_8:
468 tfc[ct].ptr = SF_LoadByte;
469 tfc[ct].readPtr = SF_SaveByte;
Jason Sams43ee06852009-08-12 17:54:11 -0700470 break;
471 }
472 tc->size += 4;
473 }
474
475 _env->ReleaseIntArrayElements(_types, fType, JNI_ABORT);
476 _env->ReleaseIntArrayElements(_bits, fBits, JNI_ABORT);
477}
478
479
Jason Samsd19f10d2009-05-22 14:03:28 -0700480// -----------------------------------
481
482static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700483nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint e)
Jason Samsd19f10d2009-05-22 14:03:28 -0700484{
Jason Samsd19f10d2009-05-22 14:03:28 -0700485 LOG_API("nAllocationCreateTyped, con(%p), e(%p)", con, (RsElement)e);
Jason Samsbc948de2009-08-17 18:35:48 -0700486 return (jint) rsAllocationCreateTyped(con, (RsElement)e);
Jason Samsd19f10d2009-05-22 14:03:28 -0700487}
488
Jason Samsd19f10d2009-05-22 14:03:28 -0700489static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700490nAllocationUploadToTexture(JNIEnv *_env, jobject _this, RsContext con, jint a, jboolean genMip, jint mip)
Jason Samsd19f10d2009-05-22 14:03:28 -0700491{
Jason Samsc2908e62010-02-23 17:44:28 -0800492 LOG_API("nAllocationUploadToTexture, con(%p), a(%p), genMip(%i), mip(%i)", con, (RsAllocation)a, genMip, mip);
493 rsAllocationUploadToTexture(con, (RsAllocation)a, genMip, mip);
Jason Samsd19f10d2009-05-22 14:03:28 -0700494}
495
Jason Sams07ae4062009-08-27 20:23:34 -0700496static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700497nAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, RsContext con, jint a)
Jason Sams07ae4062009-08-27 20:23:34 -0700498{
Jason Sams07ae4062009-08-27 20:23:34 -0700499 LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
500 rsAllocationUploadToBufferObject(con, (RsAllocation)a);
501}
502
Jason Samsea84a7c2009-09-04 14:42:41 -0700503static RsElement SkBitmapToPredefined(SkBitmap::Config cfg)
Jason Samsfe08d992009-05-27 14:45:32 -0700504{
Jason Samsffe9f482009-06-01 17:45:53 -0700505 switch (cfg) {
506 case SkBitmap::kA8_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700507 return g_A_8;
Jason Samsffe9f482009-06-01 17:45:53 -0700508 case SkBitmap::kARGB_4444_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700509 return g_RGBA_4444;
Jason Samsffe9f482009-06-01 17:45:53 -0700510 case SkBitmap::kARGB_8888_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700511 return g_RGBA_8888;
Jason Samsffe9f482009-06-01 17:45:53 -0700512 case SkBitmap::kRGB_565_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700513 return g_RGB_565;
Jason Samsfe08d992009-05-27 14:45:32 -0700514
Jason Samsffe9f482009-06-01 17:45:53 -0700515 default:
516 break;
517 }
518 // If we don't have a conversion mark it as a user type.
519 LOGE("Unsupported bitmap type");
Jason Samsea84a7c2009-09-04 14:42:41 -0700520 return NULL;
Jason Samsfe08d992009-05-27 14:45:32 -0700521}
522
Jason Samsffe9f482009-06-01 17:45:53 -0700523static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700524nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
Jason Samsffe9f482009-06-01 17:45:53 -0700525{
Jason Samsffe9f482009-06-01 17:45:53 -0700526 SkBitmap const * nativeBitmap =
527 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
528 const SkBitmap& bitmap(*nativeBitmap);
529 SkBitmap::Config config = bitmap.getConfig();
530
Jason Samsea84a7c2009-09-04 14:42:41 -0700531 RsElement e = SkBitmapToPredefined(config);
532 if (e) {
Jason Samsffe9f482009-06-01 17:45:53 -0700533 bitmap.lockPixels();
534 const int w = bitmap.width();
535 const int h = bitmap.height();
536 const void* ptr = bitmap.getPixels();
Jason Samsea84a7c2009-09-04 14:42:41 -0700537 jint id = (jint)rsAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Jason Samsffe9f482009-06-01 17:45:53 -0700538 bitmap.unlockPixels();
539 return id;
540 }
541 return 0;
542}
Jason Samsfe08d992009-05-27 14:45:32 -0700543
Jason Sams8a647432010-03-01 15:31:04 -0800544static void ReleaseBitmapCallback(void *bmp)
545{
546 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
547 nativeBitmap->unlockPixels();
548}
549
550static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700551nAllocationCreateBitmapRef(JNIEnv *_env, jobject _this, RsContext con, jint type, jobject jbitmap)
Jason Sams8a647432010-03-01 15:31:04 -0800552{
Jason Sams8a647432010-03-01 15:31:04 -0800553 SkBitmap * nativeBitmap =
554 (SkBitmap *)_env->GetIntField(jbitmap, gNativeBitmapID);
555
556
557 nativeBitmap->lockPixels();
558 void* ptr = nativeBitmap->getPixels();
559 jint id = (jint)rsAllocationCreateBitmapRef(con, (RsType)type, ptr, nativeBitmap, ReleaseBitmapCallback);
560 return id;
561}
562
Jason Samsb0ec1b42009-07-28 12:02:16 -0700563static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700564nAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jint native_asset)
Romain Guy650a3eb2009-08-31 14:06:43 -0700565{
Romain Guy650a3eb2009-08-31 14:06:43 -0700566 Asset* asset = reinterpret_cast<Asset*>(native_asset);
567 SkBitmap bitmap;
568 SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
569 &bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
570
571 SkBitmap::Config config = bitmap.getConfig();
572
Jason Samsea84a7c2009-09-04 14:42:41 -0700573 RsElement e = SkBitmapToPredefined(config);
Romain Guy650a3eb2009-08-31 14:06:43 -0700574
Jason Samsea84a7c2009-09-04 14:42:41 -0700575 if (e) {
Romain Guy650a3eb2009-08-31 14:06:43 -0700576 bitmap.lockPixels();
577 const int w = bitmap.width();
578 const int h = bitmap.height();
579 const void* ptr = bitmap.getPixels();
Jason Samsea84a7c2009-09-04 14:42:41 -0700580 jint id = (jint)rsAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Romain Guy650a3eb2009-08-31 14:06:43 -0700581 bitmap.unlockPixels();
582 return id;
583 }
584 return 0;
585}
586
587static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700588nAllocationCreateFromBitmapBoxed(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
Jason Samsb0ec1b42009-07-28 12:02:16 -0700589{
Jason Samsb0ec1b42009-07-28 12:02:16 -0700590 SkBitmap const * nativeBitmap =
591 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
592 const SkBitmap& bitmap(*nativeBitmap);
593 SkBitmap::Config config = bitmap.getConfig();
594
Jason Samsea84a7c2009-09-04 14:42:41 -0700595 RsElement e = SkBitmapToPredefined(config);
Jason Samsb0ec1b42009-07-28 12:02:16 -0700596
Jason Samsea84a7c2009-09-04 14:42:41 -0700597 if (e) {
Jason Samsb0ec1b42009-07-28 12:02:16 -0700598 bitmap.lockPixels();
599 const int w = bitmap.width();
600 const int h = bitmap.height();
601 const void* ptr = bitmap.getPixels();
Jason Samsea84a7c2009-09-04 14:42:41 -0700602 jint id = (jint)rsAllocationCreateFromBitmapBoxed(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Jason Samsb0ec1b42009-07-28 12:02:16 -0700603 bitmap.unlockPixels();
604 return id;
605 }
606 return 0;
607}
608
Jason Samsfe08d992009-05-27 14:45:32 -0700609
Jason Samsd19f10d2009-05-22 14:03:28 -0700610static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700611nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700612{
Jason Samsd19f10d2009-05-22 14:03:28 -0700613 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700614 LOG_API("nAllocation1DSubData_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 -0700615 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700616 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700617 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
618}
619
620static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700621nAllocationSubData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700622{
Jason Sams768bc022009-09-21 19:41:04 -0700623 jint len = _env->GetArrayLength(data);
624 LOG_API("nAllocation1DSubData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
625 jshort *ptr = _env->GetShortArrayElements(data, NULL);
626 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
627 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
628}
629
630static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700631nAllocationSubData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700632{
Jason Sams768bc022009-09-21 19:41:04 -0700633 jint len = _env->GetArrayLength(data);
634 LOG_API("nAllocation1DSubData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
635 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
636 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
637 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
638}
639
640static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700641nAllocationSubData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700642{
Jason Samsd19f10d2009-05-22 14:03:28 -0700643 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700644 LOG_API("nAllocation1DSubData_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 -0700645 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700646 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700647 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
648}
649
650static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700651nAllocationSubData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint w, jint h, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700652{
Jason Samsd19f10d2009-05-22 14:03:28 -0700653 jint len = _env->GetArrayLength(data);
654 LOG_API("nAllocation2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
655 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700656 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700657 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
658}
659
660static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700661nAllocationSubData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint w, jint h, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700662{
Jason Samsd19f10d2009-05-22 14:03:28 -0700663 jint len = _env->GetArrayLength(data);
664 LOG_API("nAllocation2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
665 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700666 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700667 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
668}
669
Jason Sams40a29e82009-08-10 14:55:26 -0700670static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700671nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700672{
Jason Sams40a29e82009-08-10 14:55:26 -0700673 jint len = _env->GetArrayLength(data);
674 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
675 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700676 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700677 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700678}
679
680static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700681nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700682{
Jason Sams40a29e82009-08-10 14:55:26 -0700683 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700684 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700685 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700686 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700687 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700688}
Jason Samsd19f10d2009-05-22 14:03:28 -0700689
690
Jason Sams43ee06852009-08-12 17:54:11 -0700691//{"nAllocationDataFromObject", "(ILandroid/renderscript/Type;Ljava/lang/Object;)V", (void*)nAllocationDataFromObject },
692static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700693nAllocationSubDataFromObject(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject _type, jint offset, jobject _o)
Jason Sams43ee06852009-08-12 17:54:11 -0700694{
Jason Sams43ee06852009-08-12 17:54:11 -0700695 LOG_API("nAllocationDataFromObject con(%p), alloc(%p)", con, (RsAllocation)alloc);
696
697 const TypeCache *tc = (TypeCache *)_env->GetIntField(_type, gTypeNativeCache);
698
699 void * bufAlloc = malloc(tc->size);
700 void * buf = bufAlloc;
701 for (int ct=0; ct < tc->fieldCount; ct++) {
702 const TypeFieldCache *tfc = &tc->fields[ct];
703 buf = tfc->ptr(_env, _o, tfc->field, buf);
704 }
Jason Sams2525a812009-09-03 15:43:13 -0700705 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, 1, bufAlloc, tc->size);
Jason Sams5f43fd22009-09-15 12:39:22 -0700706 free(bufAlloc);
707}
708
709static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700710nAllocationSubReadFromObject(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject _type, jint offset, jobject _o)
Jason Sams5f43fd22009-09-15 12:39:22 -0700711{
Jason Sams5f43fd22009-09-15 12:39:22 -0700712 LOG_API("nAllocationReadFromObject con(%p), alloc(%p)", con, (RsAllocation)alloc);
713
714 assert(offset == 0);
715
716 const TypeCache *tc = (TypeCache *)_env->GetIntField(_type, gTypeNativeCache);
717
718 void * bufAlloc = malloc(tc->size);
719 void * buf = bufAlloc;
720 rsAllocationRead(con, (RsAllocation)alloc, bufAlloc);
721
Jason Sams5f43fd22009-09-15 12:39:22 -0700722 for (int ct=0; ct < tc->fieldCount; ct++) {
723 const TypeFieldCache *tfc = &tc->fields[ct];
Jason Sams5f43fd22009-09-15 12:39:22 -0700724 buf = tfc->readPtr(_env, _o, tfc->field, buf);
725 }
Jason Sams43ee06852009-08-12 17:54:11 -0700726 free(bufAlloc);
727}
728
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700729static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700730nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700731{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700732 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
733 return (jint) rsAllocationGetType(con, (RsAllocation)a);
734}
735
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700736// -----------------------------------
737
738static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700739nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700740{
741 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700742
743 Asset* asset = reinterpret_cast<Asset*>(native_asset);
744
745 jint id = (jint)rsFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
746 return id;
747}
748
749static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700750nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700751{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700752 int32_t numEntries = 0;
753 rsFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700754 return numEntries;
755}
756
757static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700758nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700759{
760 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700761 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
762
763 rsFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
764
765 for(jint i = 0; i < numEntries; i ++) {
766 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
767 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
768 }
769
770 free(fileEntries);
771}
772
773static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700774nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700775{
776 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700777 jint id = (jint)rsFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
778 return id;
779}
Jason Samsd19f10d2009-05-22 14:03:28 -0700780
781// -----------------------------------
782
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700783static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700784nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jint fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700785{
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700786 const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
787
788 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
789 return id;
790}
791
792
793// -----------------------------------
794
Jason Samsd19f10d2009-05-22 14:03:28 -0700795static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700796nAdapter1DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700797{
Jason Samsd19f10d2009-05-22 14:03:28 -0700798 LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700799 rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700800}
801
802static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700803nAdapter1DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsd19f10d2009-05-22 14:03:28 -0700804{
Jason Samsd19f10d2009-05-22 14:03:28 -0700805 LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700806 rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
Jason Samsd19f10d2009-05-22 14:03:28 -0700807}
808
809static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700810nAdapter1DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700811{
Jason Samsd19f10d2009-05-22 14:03:28 -0700812 jint len = _env->GetArrayLength(data);
813 LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
814 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700815 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700816 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
817}
818
819static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700820nAdapter1DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700821{
Jason Samsd19f10d2009-05-22 14:03:28 -0700822 jint len = _env->GetArrayLength(data);
823 LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
824 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700825 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700826 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
827}
828
829static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700830nAdapter1DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700831{
Jason Samsd19f10d2009-05-22 14:03:28 -0700832 jint len = _env->GetArrayLength(data);
833 LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
834 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700835 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700836 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
837}
838
839static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700840nAdapter1DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700841{
Jason Samsd19f10d2009-05-22 14:03:28 -0700842 jint len = _env->GetArrayLength(data);
843 LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
844 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700845 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700846 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
847}
848
849static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700850nAdapter1DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700851{
Jason Samsd19f10d2009-05-22 14:03:28 -0700852 LOG_API("nAdapter1DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700853 return (jint)rsAdapter1DCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700854}
855
856// -----------------------------------
857
858static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700859nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700860{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700861 LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700862 rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700863}
864
865static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700866nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700867{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700868 LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700869 rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700870}
871
872static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700873nAdapter2DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700874{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700875 jint len = _env->GetArrayLength(data);
876 LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
877 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700878 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700879 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
880}
881
882static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700883nAdapter2DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700884{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700885 jint len = _env->GetArrayLength(data);
886 LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
887 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700888 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700889 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
890}
891
892static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700893nAdapter2DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint xoff, jint yoff, jint w, jint h, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700894{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700895 jint len = _env->GetArrayLength(data);
896 LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
897 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
898 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700899 rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700900 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
901}
902
903static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700904nAdapter2DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint xoff, jint yoff, jint w, jint h, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700905{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700906 jint len = _env->GetArrayLength(data);
907 LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
908 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
909 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700910 rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700911 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
912}
913
914static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700915nAdapter2DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700916{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700917 LOG_API("nAdapter2DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700918 return (jint)rsAdapter2DCreate(con);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700919}
920
921// -----------------------------------
922
923static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700924nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700925{
Jason Samsd19f10d2009-05-22 14:03:28 -0700926 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700927 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700928}
929
930static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700931nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700932{
Jason Sams4d339932010-05-11 14:03:58 -0700933 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i), b(%f), a(%f)", con, (void *)script, slot, val);
934 rsScriptSetVarI(con, (RsScript)script, slot, val);
935}
936
937static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700938nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700939{
Jason Sams4d339932010-05-11 14:03:58 -0700940 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i), b(%f), a(%f)", con, (void *)script, slot, val);
941 rsScriptSetVarF(con, (RsScript)script, slot, val);
942}
943
944static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700945nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700946{
Jason Sams4d339932010-05-11 14:03:58 -0700947 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
948 jint len = _env->GetArrayLength(data);
949 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
950 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
951 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
952}
953
Jason Samsd19f10d2009-05-22 14:03:28 -0700954
955static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700956nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700957{
Jason Sams07ae4062009-08-27 20:23:34 -0700958 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700959
960 jint length = _env->GetArrayLength(timeZone);
961 jbyte* timeZone_ptr;
962 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
963
Jason Samsbc948de2009-08-17 18:35:48 -0700964 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700965
966 if (timeZone_ptr) {
967 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
968 }
969}
970
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700971static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700972nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700973{
Jason Samsbe2e8412009-09-16 15:04:38 -0700974 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
975 rsScriptInvoke(con, (RsScript)obj, slot);
976}
977
978static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700979nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700980{
Jason Sams4d339932010-05-11 14:03:58 -0700981 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
982 jint len = _env->GetArrayLength(data);
983 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
984 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
985 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
986}
987
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700988
Jason Sams22534172009-08-04 16:58:20 -0700989// -----------------------------------
990
991static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700992nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700993{
Jason Sams22534172009-08-04 16:58:20 -0700994 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700995 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700996}
997
Romain Guy584a3752009-07-30 18:45:01 -0700998static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700999nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -07001000 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -07001001{
Jason Samsd19f10d2009-05-22 14:03:28 -07001002 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -07001003 jint _exception = 0;
1004 jint remaining;
1005 jbyte* script_base = 0;
1006 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -07001007 if (!scriptRef) {
1008 _exception = 1;
1009 //_env->ThrowNew(IAEClass, "script == null");
1010 goto exit;
1011 }
1012 if (offset < 0) {
1013 _exception = 1;
1014 //_env->ThrowNew(IAEClass, "offset < 0");
1015 goto exit;
1016 }
1017 if (length < 0) {
1018 _exception = 1;
1019 //_env->ThrowNew(IAEClass, "length < 0");
1020 goto exit;
1021 }
1022 remaining = _env->GetArrayLength(scriptRef) - offset;
1023 if (remaining < length) {
1024 _exception = 1;
1025 //_env->ThrowNew(IAEClass, "length > script.length - offset");
1026 goto exit;
1027 }
1028 script_base = (jbyte *)
1029 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
1030 script_ptr = script_base + offset;
1031
Jason Samsbc948de2009-08-17 18:35:48 -07001032 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -07001033
Jack Palevich43702d82009-05-28 13:38:16 -07001034exit:
1035 if (script_base) {
1036 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
1037 _exception ? JNI_ABORT: 0);
1038 }
Jason Samsd19f10d2009-05-22 14:03:28 -07001039}
1040
1041static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001042nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -07001043{
Jason Samsd19f10d2009-05-22 14:03:28 -07001044 LOG_API("nScriptCCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001045 return (jint)rsScriptCCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -07001046}
1047
1048// ---------------------------------------------------------------------------
1049
1050static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001051nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -07001052{
Jason Sams54db59c2010-05-13 18:30:11 -07001053 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
1054 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -07001055}
1056
1057static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001058nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -07001059{
Jason Sams54db59c2010-05-13 18:30:11 -07001060 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
1061 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -07001062}
1063
1064static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001065nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -07001066{
Jason Sams54db59c2010-05-13 18:30:11 -07001067 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
1068 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -07001069}
1070
1071static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001072nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -07001073{
Jason Sams54db59c2010-05-13 18:30:11 -07001074 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
1075 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -07001076}
1077
1078static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001079nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -07001080{
Jason Sams54db59c2010-05-13 18:30:11 -07001081 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
1082 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -07001083}
1084
1085static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001086nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -07001087{
Jason Sams54db59c2010-05-13 18:30:11 -07001088 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
1089 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -07001090}
1091
1092static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001093nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -07001094{
Jason Sams54db59c2010-05-13 18:30:11 -07001095 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -07001096 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -07001097}
1098
Jason Sams0011bcf2009-12-15 12:58:36 -08001099// ---------------------------------------------------------------------------
1100
1101static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001102nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001103{
Jason Sams0011bcf2009-12-15 12:58:36 -08001104 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1105 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
1106}
Jason Sams54c0ec12009-11-30 14:49:55 -08001107
Jason Sams68afd012009-12-17 16:55:08 -08001108static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001109nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001110{
Jason Sams68afd012009-12-17 16:55:08 -08001111 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1112 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1113}
1114
1115static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001116nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001117{
Jason Sams68afd012009-12-17 16:55:08 -08001118 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1119 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1120}
1121
Jason Samsd19f10d2009-05-22 14:03:28 -07001122// ---------------------------------------------------------------------------
1123
Jason Samsd19f10d2009-05-22 14:03:28 -07001124static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001125nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jintArray params)
Jason Samsd19f10d2009-05-22 14:03:28 -07001126{
Jason Sams68afd012009-12-17 16:55:08 -08001127 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1128 jint paramLen = _env->GetArrayLength(params);
1129
Jason Sams704ff642010-02-09 16:05:07 -08001130 LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, paramLen);
Jason Sams68afd012009-12-17 16:55:08 -08001131
1132 jint ret = (jint)rsProgramFragmentCreate(con, (uint32_t *)paramPtr, paramLen);
1133 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1134 return ret;
Jason Samsd19f10d2009-05-22 14:03:28 -07001135}
1136
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001137static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001138nProgramFragmentCreate2(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001139{
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001140 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1141 jint shaderLen = _env->GetStringUTFLength(shader);
1142 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1143 jint paramLen = _env->GetArrayLength(params);
1144
1145 LOG_API("nProgramFragmentCreate2, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
1146
1147 jint ret = (jint)rsProgramFragmentCreate2(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
1148 _env->ReleaseStringUTFChars(shader, shaderUTF);
1149 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1150 return ret;
1151}
1152
1153
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001154// ---------------------------------------------------------------------------
1155
Jason Sams0011bcf2009-12-15 12:58:36 -08001156static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001157nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean texMat)
Jason Sams54c0ec12009-11-30 14:49:55 -08001158{
Jason Sams0011bcf2009-12-15 12:58:36 -08001159 LOG_API("nProgramVertexCreate, con(%p), texMat(%i)", con, texMat);
1160 return (jint)rsProgramVertexCreate(con, texMat);
Jason Samsee411122009-07-21 12:20:54 -07001161}
1162
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001163static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001164nProgramVertexCreate2(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001165{
Jason Sams0011bcf2009-12-15 12:58:36 -08001166 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1167 jint shaderLen = _env->GetStringUTFLength(shader);
1168 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1169 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001170
Jason Sams0011bcf2009-12-15 12:58:36 -08001171 LOG_API("nProgramVertexCreate2, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
1172
1173 jint ret = (jint)rsProgramVertexCreate2(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
1174 _env->ReleaseStringUTFChars(shader, shaderUTF);
1175 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1176 return ret;
1177}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001178
Jason Samsebfb4362009-09-23 13:57:02 -07001179// ---------------------------------------------------------------------------
1180
1181static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001182nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001183{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001184 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1185 con, pointSmooth, lineSmooth, pointSprite);
1186 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001187}
1188
1189static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001190nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001191{
Jason Samsebfb4362009-09-23 13:57:02 -07001192 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001193 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1194}
1195
1196static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001197nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001198{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001199 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1200 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001201}
1202
Jason Samsd19f10d2009-05-22 14:03:28 -07001203
1204// ---------------------------------------------------------------------------
1205
1206static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001207nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001208{
Jason Samsd19f10d2009-05-22 14:03:28 -07001209 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001210 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001211}
1212
1213static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001214nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001215{
Jason Sams54db59c2010-05-13 18:30:11 -07001216 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1217 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001218}
1219
1220static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001221nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001222{
Jason Samsd19f10d2009-05-22 14:03:28 -07001223 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001224 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001225}
1226
Jason Sams0826a6f2009-06-15 19:04:56 -07001227static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001228nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001229{
Jason Sams0826a6f2009-06-15 19:04:56 -07001230 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001231 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001232}
1233
Joe Onoratod7b37742009-08-09 22:57:44 -07001234static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001235nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001236{
Jason Samsebfb4362009-09-23 13:57:02 -07001237 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1238 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1239}
1240
Joe Onoratod7b37742009-08-09 22:57:44 -07001241
Jason Sams02fb2cb2009-05-28 15:37:57 -07001242// ---------------------------------------------------------------------------
1243
1244static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001245nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001246{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001247 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001248 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001249}
1250
1251static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001252nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001253{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001254 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001255 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001256}
1257
1258static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001259nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001260{
Jason Samsbba134c2009-06-22 15:49:21 -07001261 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001262 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001263}
1264
Jason Samsbba134c2009-06-22 15:49:21 -07001265// ---------------------------------------------------------------------------
1266
Jason Samsbba134c2009-06-22 15:49:21 -07001267static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001268nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001269{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001270 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1271 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1272 return id;
1273}
1274
1275static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001276nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001277{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001278 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1279 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001280}
1281
1282static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001283nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001284{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001285 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1286 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1287}
1288
1289static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001290nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001291{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001292 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1293 jint vtxCount = 0;
1294 rsMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
1295 return vtxCount;
1296}
1297
1298static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001299nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001300{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001301 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1302 jint idxCount = 0;
1303 rsMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
1304 return idxCount;
1305}
1306
1307static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001308nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001309{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001310 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1311
1312 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1313 rsMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
1314
1315 for(jint i = 0; i < numVtxIDs; i ++) {
1316 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1317 }
1318
1319 free(allocs);
1320}
1321
1322static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001323nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001324{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001325 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1326
1327 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1328 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1329
1330 rsMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
1331
1332 for(jint i = 0; i < numIndices; i ++) {
1333 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1334 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1335 }
1336
1337 free(allocs);
1338 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001339}
1340
1341// ---------------------------------------------------------------------------
1342
Jason Samsd19f10d2009-05-22 14:03:28 -07001343
Jason Sams94d8e90a2009-06-10 16:09:05 -07001344static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001345
1346static JNINativeMethod methods[] = {
1347{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001348{"nInitElements", "(IIII)V", (void*)nInitElements },
1349
Jason Samsd19f10d2009-05-22 14:03:28 -07001350{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1351{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
Jason Samsebfb4362009-09-23 13:57:02 -07001352{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
Jason Sams2e1872f2010-08-17 16:25:41 -07001353{"nContextGetMessage", "(I[IZ)I", (void*)nContextGetMessage },
1354{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1355{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001356
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001357
Jason Sams2e1872f2010-08-17 16:25:41 -07001358// All methods below are thread protected in java.
1359{"rsnContextCreate", "(II)I", (void*)nContextCreate },
1360{"rsnContextCreateGL", "(IIZ)I", (void*)nContextCreateGL },
1361{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1362{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1363{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
1364{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
1365{"rsnContextDump", "(II)V", (void*)nContextDump },
1366{"rsnContextPause", "(I)V", (void*)nContextPause },
1367{"rsnContextResume", "(I)V", (void*)nContextResume },
1368{"rsnAssignName", "(II[B)V", (void*)nAssignName },
1369{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
1370{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001371
Jason Sams2e1872f2010-08-17 16:25:41 -07001372{"rsnFileOpen", "(I[B)I", (void*)nFileOpen },
1373{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1374{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
1375{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
1376{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001377
Jason Sams2e1872f2010-08-17 16:25:41 -07001378{"rsnFontCreateFromFile", "(ILjava/lang/String;II)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001379
Jason Sams2e1872f2010-08-17 16:25:41 -07001380{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
1381{"rsnElementCreate2", "(I[I[Ljava/lang/String;)I", (void*)nElementCreate2 },
1382{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
1383{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001384
Jason Sams2e1872f2010-08-17 16:25:41 -07001385{"rsnTypeBegin", "(II)V", (void*)nTypeBegin },
1386{"rsnTypeAdd", "(III)V", (void*)nTypeAdd },
1387{"rsnTypeCreate", "(I)I", (void*)nTypeCreate },
1388{"rsnTypeFinalDestroy", "(ILandroid/renderscript/Type;)V", (void*)nTypeFinalDestroy },
1389{"rsnTypeSetupFields", "(ILandroid/renderscript/Type;[I[I[Ljava/lang/reflect/Field;)V", (void*)nTypeSetupFields },
1390{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001391
Jason Sams2e1872f2010-08-17 16:25:41 -07001392{"rsnAllocationCreateTyped", "(II)I", (void*)nAllocationCreateTyped },
1393{"rsnAllocationCreateFromBitmap", "(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmap },
1394{"rsnAllocationCreateBitmapRef", "(IILandroid/graphics/Bitmap;)I", (void*)nAllocationCreateBitmapRef },
1395{"rsnAllocationCreateFromBitmapBoxed","(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmapBoxed },
1396{"rsnAllocationCreateFromAssetStream","(IIZI)I", (void*)nAllocationCreateFromAssetStream },
1397{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
1398{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
1399{"rsnAllocationSubData1D", "(IIII[II)V", (void*)nAllocationSubData1D_i },
1400{"rsnAllocationSubData1D", "(IIII[SI)V", (void*)nAllocationSubData1D_s },
1401{"rsnAllocationSubData1D", "(IIII[BI)V", (void*)nAllocationSubData1D_b },
1402{"rsnAllocationSubData1D", "(IIII[FI)V", (void*)nAllocationSubData1D_f },
1403{"rsnAllocationSubData2D", "(IIIIII[II)V", (void*)nAllocationSubData2D_i },
1404{"rsnAllocationSubData2D", "(IIIIII[FI)V", (void*)nAllocationSubData2D_f },
1405{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1406{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
1407{"rsnAllocationSubDataFromObject", "(IILandroid/renderscript/Type;ILjava/lang/Object;)V", (void*)nAllocationSubDataFromObject },
1408{"rsnAllocationSubReadFromObject", "(IILandroid/renderscript/Type;ILjava/lang/Object;)V", (void*)nAllocationSubReadFromObject },
1409{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001410
Jason Sams2e1872f2010-08-17 16:25:41 -07001411{"rsnAdapter1DBindAllocation", "(III)V", (void*)nAdapter1DBindAllocation },
1412{"rsnAdapter1DSetConstraint", "(IIII)V", (void*)nAdapter1DSetConstraint },
1413{"rsnAdapter1DData", "(II[I)V", (void*)nAdapter1DData_i },
1414{"rsnAdapter1DData", "(II[F)V", (void*)nAdapter1DData_f },
1415{"rsnAdapter1DSubData", "(IIII[I)V", (void*)nAdapter1DSubData_i },
1416{"rsnAdapter1DSubData", "(IIII[F)V", (void*)nAdapter1DSubData_f },
1417{"rsnAdapter1DCreate", "(I)I", (void*)nAdapter1DCreate },
Jason Sams22534172009-08-04 16:58:20 -07001418
Jason Sams2e1872f2010-08-17 16:25:41 -07001419{"rsnAdapter2DBindAllocation", "(III)V", (void*)nAdapter2DBindAllocation },
1420{"rsnAdapter2DSetConstraint", "(IIII)V", (void*)nAdapter2DSetConstraint },
1421{"rsnAdapter2DData", "(II[I)V", (void*)nAdapter2DData_i },
1422{"rsnAdapter2DData", "(II[F)V", (void*)nAdapter2DData_f },
1423{"rsnAdapter2DSubData", "(IIIIII[I)V", (void*)nAdapter2DSubData_i },
1424{"rsnAdapter2DSubData", "(IIIIII[F)V", (void*)nAdapter2DSubData_f },
1425{"rsnAdapter2DCreate", "(I)I", (void*)nAdapter2DCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001426
Jason Sams2e1872f2010-08-17 16:25:41 -07001427{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1428{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1429{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1430{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1431{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
1432{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
1433{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Samsd19f10d2009-05-22 14:03:28 -07001434
Jason Sams2e1872f2010-08-17 16:25:41 -07001435{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1436{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
1437{"rsnScriptCCreate", "(I)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001438
Jason Sams2e1872f2010-08-17 16:25:41 -07001439{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1440{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1441{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1442{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1443{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1444{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1445{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001446
Jason Sams2e1872f2010-08-17 16:25:41 -07001447{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1448{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1449{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001450
Jason Sams2e1872f2010-08-17 16:25:41 -07001451{"rsnProgramFragmentCreate", "(I[I)I", (void*)nProgramFragmentCreate },
1452{"rsnProgramFragmentCreate2", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate2 },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001453
Jason Sams2e1872f2010-08-17 16:25:41 -07001454{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
1455{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1456{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001457
Jason Sams2e1872f2010-08-17 16:25:41 -07001458{"rsnProgramVertexCreate", "(IZ)I", (void*)nProgramVertexCreate },
1459{"rsnProgramVertexCreate2", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate2 },
Jason Samsd19f10d2009-05-22 14:03:28 -07001460
Jason Sams2e1872f2010-08-17 16:25:41 -07001461{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
1462{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
1463{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1464{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1465{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001466
Jason Sams2e1872f2010-08-17 16:25:41 -07001467{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1468{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
1469{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001470
Jason Sams2e1872f2010-08-17 16:25:41 -07001471{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1472{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1473{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
1474
1475{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1476{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
1477{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
1478{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001479
Jason Samsd19f10d2009-05-22 14:03:28 -07001480};
1481
1482static int registerFuncs(JNIEnv *_env)
1483{
1484 return android::AndroidRuntime::registerNativeMethods(
1485 _env, classPathName, methods, NELEM(methods));
1486}
1487
1488// ---------------------------------------------------------------------------
1489
1490jint JNI_OnLoad(JavaVM* vm, void* reserved)
1491{
1492 JNIEnv* env = NULL;
1493 jint result = -1;
1494
Jason Samsd19f10d2009-05-22 14:03:28 -07001495 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1496 LOGE("ERROR: GetEnv failed\n");
1497 goto bail;
1498 }
1499 assert(env != NULL);
1500
1501 if (registerFuncs(env) < 0) {
1502 LOGE("ERROR: MediaPlayer native registration failed\n");
1503 goto bail;
1504 }
1505
1506 /* success -- return valid version number */
1507 result = JNI_VERSION_1_4;
1508
1509bail:
1510 return result;
1511}
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001512