blob: 04a7b41777f6d040c090e7120f4fd2aec7e62f30 [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
62static void _nInit(JNIEnv *_env, jclass _this)
63{
Jason Samsd19f10d2009-05-22 14:03:28 -070064 gContextId = _env->GetFieldID(_this, "mContext", "I");
Jason Samsffe9f482009-06-01 17:45:53 -070065
66 jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
67 gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
Jason Samsd19f10d2009-05-22 14:03:28 -070068}
69
Jason Samsd19f10d2009-05-22 14:03:28 -070070// ---------------------------------------------------------------------------
71
Jason Sams3eaa338e2009-06-10 15:04:38 -070072static void
Jason Sams2e1872f2010-08-17 16:25:41 -070073nContextFinish(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams96ed4cf2010-06-15 12:15:57 -070074{
Jason Sams96ed4cf2010-06-15 12:15:57 -070075 LOG_API("nContextFinish, con(%p)", con);
76 rsContextFinish(con);
77}
78
79static void
Jason Sams2e1872f2010-08-17 16:25:41 -070080nAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
Jason Sams3eaa338e2009-06-10 15:04:38 -070081{
Jason Sams07ae4062009-08-27 20:23:34 -070082 LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
Jason Sams3eaa338e2009-06-10 15:04:38 -070083 jint len = _env->GetArrayLength(str);
84 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -070085 rsAssignName(con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -070086 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
87}
88
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -070089static jstring
Jason Sams2e1872f2010-08-17 16:25:41 -070090nGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -070091{
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -070092 LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -070093 const char *name = NULL;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -070094 rsaGetName(con, (void *)obj, &name);
95 if(name == NULL || strlen(name) == 0) {
96 return NULL;
97 }
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -070098 return _env->NewStringUTF(name);
99}
100
Jason Sams7ce033d2009-08-18 14:14:24 -0700101static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700102nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Jason Sams7ce033d2009-08-18 14:14:24 -0700103{
Jason Sams7ce033d2009-08-18 14:14:24 -0700104 LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
Jason Sams9c25aee2010-10-14 17:57:30 -0700105 rsObjDestroy(con, (void *)obj);
Jason Sams7ce033d2009-08-18 14:14:24 -0700106}
107
Jason Sams3eaa338e2009-06-10 15:04:38 -0700108// ---------------------------------------------------------------------------
109
Jason Samsd19f10d2009-05-22 14:03:28 -0700110static jint
111nDeviceCreate(JNIEnv *_env, jobject _this)
112{
113 LOG_API("nDeviceCreate");
114 return (jint)rsDeviceCreate();
115}
116
117static void
118nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
119{
120 LOG_API("nDeviceDestroy");
121 return rsDeviceDestroy((RsDevice)dev);
122}
123
Jason Samsebfb4362009-09-23 13:57:02 -0700124static void
125nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
126{
127 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
128 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
129}
130
Jason Samsd19f10d2009-05-22 14:03:28 -0700131static jint
Jason Sams704ff642010-02-09 16:05:07 -0800132nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
Jason Samsd19f10d2009-05-22 14:03:28 -0700133{
134 LOG_API("nContextCreate");
Jason Sams704ff642010-02-09 16:05:07 -0800135 return (jint)rsContextCreate((RsDevice)dev, ver);
136}
137
138static jint
Jason Sams11c8af92010-10-13 15:31:10 -0700139nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
140 int colorMin, int colorPref,
141 int alphaMin, int alphaPref,
142 int depthMin, int depthPref,
143 int stencilMin, int stencilPref,
144 int samplesMin, int samplesPref, float samplesQ)
Jason Sams704ff642010-02-09 16:05:07 -0800145{
Jason Sams11c8af92010-10-13 15:31:10 -0700146 RsSurfaceConfig sc;
147 sc.alphaMin = alphaMin;
148 sc.alphaPref = alphaPref;
149 sc.colorMin = colorMin;
150 sc.colorPref = colorPref;
151 sc.depthMin = depthMin;
152 sc.depthPref = depthPref;
153 sc.samplesMin = samplesMin;
154 sc.samplesPref = samplesPref;
155 sc.samplesQ = samplesQ;
156
Jason Sams704ff642010-02-09 16:05:07 -0800157 LOG_API("nContextCreateGL");
Jason Sams11c8af92010-10-13 15:31:10 -0700158 return (jint)rsContextCreateGL((RsDevice)dev, ver, sc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700159}
160
161static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700162nContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800163{
Jason Sams7d787b42009-11-15 12:14:26 -0800164 LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
165 rsContextSetPriority(con, p);
166}
167
168
169
170static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700171nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800172{
Jason Sams3bc47d42009-11-12 15:10:25 -0800173 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800174
175 Surface * window = NULL;
176 if (wnd == NULL) {
177
178 } else {
Jim Milleree956052010-08-19 18:56:00 -0700179 window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800180 }
181
Jason Sams3bc47d42009-11-12 15:10:25 -0800182 rsContextSetSurface(con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800183}
184
185static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700186nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700187{
Jason Sams2e1872f2010-08-17 16:25:41 -0700188 LOG_API("nContextDestroy, con(%p)", con);
189 rsContextDestroy(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700190}
191
Jason Sams715333b2009-11-17 17:26:46 -0800192static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700193nContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800194{
Jason Sams715333b2009-11-17 17:26:46 -0800195 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
196 rsContextDump((RsContext)con, bits);
197}
Jason Samsd19f10d2009-05-22 14:03:28 -0700198
199static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700200nContextPause(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700201{
Jason Sams65e7aa52009-09-24 17:38:20 -0700202 LOG_API("nContextPause, con(%p)", con);
203 rsContextPause(con);
204}
205
206static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700207nContextResume(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700208{
Jason Sams65e7aa52009-09-24 17:38:20 -0700209 LOG_API("nContextResume, con(%p)", con);
210 rsContextResume(con);
211}
212
Jason Sams1c415172010-11-08 17:06:46 -0800213
214static jstring
215nContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
216{
217 LOG_API("nContextGetErrorMessage, con(%p)", con);
218 char buf[1024];
219
220 size_t receiveLen;
221 uint32_t subID;
222 int id = rsContextGetMessage(con, buf, &receiveLen, &subID, sizeof(buf), true);
223 if (!id && receiveLen) {
224 LOGV("message receive buffer too small. %i", receiveLen);
225 }
226 return _env->NewStringUTF(buf);
227}
228
229static void
230nContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
Jason Sams516c3192009-10-06 13:58:47 -0700231{
Jason Sams516c3192009-10-06 13:58:47 -0700232 jint len = _env->GetArrayLength(data);
233 LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
234 jint *ptr = _env->GetIntArrayElements(data, NULL);
235 size_t receiveLen;
Jason Sams1c415172010-11-08 17:06:46 -0800236 uint32_t subID;
237 int id = rsContextGetMessage(con, ptr, &receiveLen, &subID, len * 4, true);
Jason Sams516c3192009-10-06 13:58:47 -0700238 if (!id && receiveLen) {
Jason Sams1d45c472010-08-25 14:31:48 -0700239 LOGV("message receive buffer too small. %i", receiveLen);
Jason Sams516c3192009-10-06 13:58:47 -0700240 }
241 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams1c415172010-11-08 17:06:46 -0800242}
243
244static jint
245nContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData, jboolean wait)
246{
247 LOG_API("nContextPeekMessage, con(%p)", con);
248 jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
249 size_t receiveLen;
250 uint32_t subID;
251 int id = rsContextPeekMessage(con, &receiveLen, &subID, wait);
252 auxDataPtr[0] = (jint)subID;
253 auxDataPtr[1] = (jint)receiveLen;
254 _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
Jason Sams516c3192009-10-06 13:58:47 -0700255 return id;
256}
257
Jason Sams2e1872f2010-08-17 16:25:41 -0700258static void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700259{
Jason Sams516c3192009-10-06 13:58:47 -0700260 LOG_API("nContextInitToClient, con(%p)", con);
261 rsContextInitToClient(con);
262}
263
Jason Sams2e1872f2010-08-17 16:25:41 -0700264static void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700265{
Jason Sams516c3192009-10-06 13:58:47 -0700266 LOG_API("nContextDeinitToClient, con(%p)", con);
267 rsContextDeinitToClient(con);
268}
269
270
Jason Sams718cd1f2009-12-23 14:35:29 -0800271static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700272nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700273{
Jason Sams718cd1f2009-12-23 14:35:29 -0800274 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
275 return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700276}
277
278static jint
Jason Sams70d4e502010-09-02 17:35:23 -0700279nElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700280{
Jason Sams718cd1f2009-12-23 14:35:29 -0800281 int fieldCount = _env->GetArrayLength(_ids);
Jason Sams704ff642010-02-09 16:05:07 -0800282 LOG_API("nElementCreate2, con(%p)", con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800283
284 jint *ids = _env->GetIntArrayElements(_ids, NULL);
Jason Sams70d4e502010-09-02 17:35:23 -0700285 jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
Jason Sams718cd1f2009-12-23 14:35:29 -0800286 const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
287 size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
288
289 for (int ct=0; ct < fieldCount; ct++) {
290 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
291 nameArray[ct] = _env->GetStringUTFChars(s, NULL);
292 sizeArray[ct] = _env->GetStringUTFLength(s);
293 }
Jason Sams70d4e502010-09-02 17:35:23 -0700294 jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
Jason Sams718cd1f2009-12-23 14:35:29 -0800295 for (int ct=0; ct < fieldCount; ct++) {
296 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
297 _env->ReleaseStringUTFChars(s, nameArray[ct]);
298 }
299 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
Jason Sams70d4e502010-09-02 17:35:23 -0700300 _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
Jason Sams718cd1f2009-12-23 14:35:29 -0800301 free(nameArray);
302 free(sizeArray);
303 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700304}
305
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700306static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700307nElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700308{
309 int dataSize = _env->GetArrayLength(_elementData);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700310 LOG_API("nElementGetNativeData, con(%p)", con);
311
312 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
313 assert(dataSize == 5);
314
315 uint32_t elementData[5];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700316 rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700317
318 for(jint i = 0; i < dataSize; i ++) {
319 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
320 }
321}
322
323
324static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700325nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700326{
327 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700328 LOG_API("nElementGetSubElements, con(%p)", con);
329
330 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
331 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
332
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700333 rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700334
Jason Sams11c8af92010-10-13 15:31:10 -0700335 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700336 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
337 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
338 }
339
340 free(ids);
341 free(names);
342}
343
Jason Samsd19f10d2009-05-22 14:03:28 -0700344// -----------------------------------
345
Jason Sams3b9c52a2010-10-14 17:48:46 -0700346static int
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800347nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
348 jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
Jason Samsd19f10d2009-05-22 14:03:28 -0700349{
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800350 LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
351 con, eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700352
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800353 jint id = (jint)rsaTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700354 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700355}
356
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700357static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700358nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700359{
360 // We are packing 6 items: mDimX; mDimY; mDimZ;
361 // mDimLOD; mDimFaces; mElement; into typeData
362 int elementCount = _env->GetArrayLength(_typeData);
363
364 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700365 LOG_API("nTypeCreate, con(%p)", con);
366
367 uint32_t typeData[6];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700368 rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700369
370 for(jint i = 0; i < elementCount; i ++) {
371 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
372 }
373}
374
Jason Samsd19f10d2009-05-22 14:03:28 -0700375// -----------------------------------
376
377static jint
Jason Sams5476b452010-12-08 16:14:36 -0800378nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage)
Jason Samsd19f10d2009-05-22 14:03:28 -0700379{
Jason Samsd4b23b52010-12-13 15:32:35 -0800380 LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i)", con, (RsElement)type, mips, usage);
381 return (jint) rsaAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage);
Jason Samsd19f10d2009-05-22 14:03:28 -0700382}
383
Jason Samsd19f10d2009-05-22 14:03:28 -0700384static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700385nAllocationUploadToTexture(JNIEnv *_env, jobject _this, RsContext con, jint a, jboolean genMip, jint mip)
Jason Samsd19f10d2009-05-22 14:03:28 -0700386{
Jason Samsc2908e62010-02-23 17:44:28 -0800387 LOG_API("nAllocationUploadToTexture, con(%p), a(%p), genMip(%i), mip(%i)", con, (RsAllocation)a, genMip, mip);
388 rsAllocationUploadToTexture(con, (RsAllocation)a, genMip, mip);
Jason Samsd19f10d2009-05-22 14:03:28 -0700389}
390
Jason Sams07ae4062009-08-27 20:23:34 -0700391static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700392nAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, RsContext con, jint a)
Jason Sams07ae4062009-08-27 20:23:34 -0700393{
Jason Sams07ae4062009-08-27 20:23:34 -0700394 LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
395 rsAllocationUploadToBufferObject(con, (RsAllocation)a);
396}
397
Jason Sams5476b452010-12-08 16:14:36 -0800398static void
399nAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
400{
401 LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
402 rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
403}
404
Jason Samsffe9f482009-06-01 17:45:53 -0700405static int
Jason Sams5476b452010-12-08 16:14:36 -0800406nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Jason Samsffe9f482009-06-01 17:45:53 -0700407{
Jason Samsffe9f482009-06-01 17:45:53 -0700408 SkBitmap const * nativeBitmap =
409 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
410 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsffe9f482009-06-01 17:45:53 -0700411
Jason Sams5476b452010-12-08 16:14:36 -0800412 bitmap.lockPixels();
413 const void* ptr = bitmap.getPixels();
Jason Samsd4b23b52010-12-13 15:32:35 -0800414 jint id = (jint)rsaAllocationCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
Jason Sams5476b452010-12-08 16:14:36 -0800415 bitmap.unlockPixels();
416 return id;
Jason Samsffe9f482009-06-01 17:45:53 -0700417}
Jason Samsfe08d992009-05-27 14:45:32 -0700418
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800419static int
Jason Sams5476b452010-12-08 16:14:36 -0800420nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800421{
422 SkBitmap const * nativeBitmap =
423 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
424 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800425
Jason Sams5476b452010-12-08 16:14:36 -0800426 bitmap.lockPixels();
427 const void* ptr = bitmap.getPixels();
Jason Samsd4b23b52010-12-13 15:32:35 -0800428 jint id = (jint)rsaAllocationCubeCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
Jason Sams5476b452010-12-08 16:14:36 -0800429 bitmap.unlockPixels();
430 return id;
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800431}
432
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700433static void
Jason Sams4ef66502010-12-10 16:03:15 -0800434nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700435{
436 SkBitmap const * nativeBitmap =
437 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
438 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700439
Jason Sams4ef66502010-12-10 16:03:15 -0800440 bitmap.lockPixels();
441 const void* ptr = bitmap.getPixels();
442 rsAllocationCopyFromBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
443 bitmap.unlockPixels();
444}
445
446static void
447nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
448{
449 SkBitmap const * nativeBitmap =
450 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
451 const SkBitmap& bitmap(*nativeBitmap);
452
453 bitmap.lockPixels();
454 void* ptr = bitmap.getPixels();
455 rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
456 bitmap.unlockPixels();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700457}
458
Jason Sams8a647432010-03-01 15:31:04 -0800459static void ReleaseBitmapCallback(void *bmp)
460{
461 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
462 nativeBitmap->unlockPixels();
463}
464
Romain Guy650a3eb2009-08-31 14:06:43 -0700465
Jason Samsd19f10d2009-05-22 14:03:28 -0700466static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700467nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700468{
Jason Samsd19f10d2009-05-22 14:03:28 -0700469 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700470 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 -0700471 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700472 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700473 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
474}
475
476static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700477nAllocationSubData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700478{
Jason Sams768bc022009-09-21 19:41:04 -0700479 jint len = _env->GetArrayLength(data);
480 LOG_API("nAllocation1DSubData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
481 jshort *ptr = _env->GetShortArrayElements(data, NULL);
482 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
483 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
484}
485
486static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700487nAllocationSubData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700488{
Jason Sams768bc022009-09-21 19:41:04 -0700489 jint len = _env->GetArrayLength(data);
490 LOG_API("nAllocation1DSubData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
491 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
492 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
493 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
494}
495
496static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700497nAllocationSubData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700498{
Jason Samsd19f10d2009-05-22 14:03:28 -0700499 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700500 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 -0700501 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700502 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700503 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
504}
505
506static void
Jason Sams49bdaf02010-08-31 13:50:42 -0700507// native void rsnAllocationSubElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
508nAllocationSubElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint compIdx, jbyteArray data, int sizeBytes)
509{
510 jint len = _env->GetArrayLength(data);
511 LOG_API("nAllocationSubElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
512 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
513 rsAllocation1DSubElementData(con, (RsAllocation)alloc, offset, ptr, compIdx, sizeBytes);
514 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
515}
516
517static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700518nAllocationSubData2D_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 -0700519{
Jason Samsd19f10d2009-05-22 14:03:28 -0700520 jint len = _env->GetArrayLength(data);
521 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);
522 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700523 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700524 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
525}
526
527static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700528nAllocationSubData2D_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 -0700529{
Jason Samsd19f10d2009-05-22 14:03:28 -0700530 jint len = _env->GetArrayLength(data);
531 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);
532 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700533 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700534 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
535}
536
Jason Sams40a29e82009-08-10 14:55:26 -0700537static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700538nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700539{
Jason Sams40a29e82009-08-10 14:55:26 -0700540 jint len = _env->GetArrayLength(data);
541 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
542 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700543 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700544 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700545}
546
547static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700548nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700549{
Jason Sams40a29e82009-08-10 14:55:26 -0700550 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700551 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700552 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700553 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700554 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700555}
Jason Samsd19f10d2009-05-22 14:03:28 -0700556
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700557static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700558nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700559{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700560 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700561 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700562}
563
Jason Sams5edc6082010-10-05 13:32:49 -0700564static void
565nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
566{
567 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
568 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
569}
570
571static void
572nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
573{
574 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
575 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
576}
577
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700578// -----------------------------------
579
580static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700581nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700582{
583 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700584
585 Asset* asset = reinterpret_cast<Asset*>(native_asset);
586
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700587 jint id = (jint)rsaFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700588 return id;
589}
590
591static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700592nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700593{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700594 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700595 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700596 return numEntries;
597}
598
599static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700600nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700601{
602 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700603 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
604
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700605 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700606
607 for(jint i = 0; i < numEntries; i ++) {
608 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
609 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
610 }
611
612 free(fileEntries);
613}
614
615static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700616nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700617{
618 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700619 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700620 return id;
621}
Jason Samsd19f10d2009-05-22 14:03:28 -0700622
623// -----------------------------------
624
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700625static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700626nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jint fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700627{
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700628 const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
629
630 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
631 return id;
632}
633
634
635// -----------------------------------
636
Jason Samsd19f10d2009-05-22 14:03:28 -0700637static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700638nAdapter1DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700639{
Jason Samsd19f10d2009-05-22 14:03:28 -0700640 LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700641 rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700642}
643
644static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700645nAdapter1DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsd19f10d2009-05-22 14:03:28 -0700646{
Jason Samsd19f10d2009-05-22 14:03:28 -0700647 LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700648 rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
Jason Samsd19f10d2009-05-22 14:03:28 -0700649}
650
651static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700652nAdapter1DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700653{
Jason Samsd19f10d2009-05-22 14:03:28 -0700654 jint len = _env->GetArrayLength(data);
655 LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
656 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700657 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700658 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
659}
660
661static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700662nAdapter1DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700663{
Jason Samsd19f10d2009-05-22 14:03:28 -0700664 jint len = _env->GetArrayLength(data);
665 LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
666 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700667 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700668 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
669}
670
671static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700672nAdapter1DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700673{
Jason Samsd19f10d2009-05-22 14:03:28 -0700674 jint len = _env->GetArrayLength(data);
675 LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
676 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700677 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700678 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
679}
680
681static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700682nAdapter1DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700683{
Jason Samsd19f10d2009-05-22 14:03:28 -0700684 jint len = _env->GetArrayLength(data);
685 LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
686 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700687 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700688 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
689}
690
691static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700692nAdapter1DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700693{
Jason Samsd19f10d2009-05-22 14:03:28 -0700694 LOG_API("nAdapter1DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700695 return (jint)rsAdapter1DCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700696}
697
698// -----------------------------------
699
700static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700701nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700702{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700703 LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700704 rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700705}
706
707static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700708nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700709{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700710 LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700711 rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700712}
713
714static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700715nAdapter2DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700716{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700717 jint len = _env->GetArrayLength(data);
718 LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
719 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700720 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700721 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
722}
723
724static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700725nAdapter2DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700726{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700727 jint len = _env->GetArrayLength(data);
728 LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
729 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700730 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700731 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
732}
733
734static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700735nAdapter2DSubData_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 -0700736{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700737 jint len = _env->GetArrayLength(data);
738 LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
739 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
740 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700741 rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700742 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
743}
744
745static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700746nAdapter2DSubData_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 -0700747{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700748 jint len = _env->GetArrayLength(data);
749 LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
750 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
751 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700752 rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700753 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
754}
755
756static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700757nAdapter2DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700758{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700759 LOG_API("nAdapter2DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700760 return (jint)rsAdapter2DCreate(con);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700761}
762
763// -----------------------------------
764
765static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700766nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700767{
Jason Samsd19f10d2009-05-22 14:03:28 -0700768 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700769 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700770}
771
772static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700773nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700774{
Jason Samscfc04362010-09-14 14:59:03 -0700775 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700776 rsScriptSetVarI(con, (RsScript)script, slot, val);
777}
778
779static void
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800780nScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
781{
782 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
783 rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
784}
785
786static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700787nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
788{
789 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
790 rsScriptSetVarJ(con, (RsScript)script, slot, val);
791}
792
793static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700794nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700795{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700796 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700797 rsScriptSetVarF(con, (RsScript)script, slot, val);
798}
799
800static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700801nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
802{
803 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
804 rsScriptSetVarD(con, (RsScript)script, slot, val);
805}
806
807static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700808nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700809{
Jason Sams4d339932010-05-11 14:03:58 -0700810 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
811 jint len = _env->GetArrayLength(data);
812 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
813 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
814 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
815}
816
Jason Samsd19f10d2009-05-22 14:03:28 -0700817
818static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700819nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700820{
Jason Sams07ae4062009-08-27 20:23:34 -0700821 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700822
823 jint length = _env->GetArrayLength(timeZone);
824 jbyte* timeZone_ptr;
825 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
826
Jason Samsbc948de2009-08-17 18:35:48 -0700827 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700828
829 if (timeZone_ptr) {
830 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
831 }
832}
833
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700834static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700835nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700836{
Jason Samsbe2e8412009-09-16 15:04:38 -0700837 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
838 rsScriptInvoke(con, (RsScript)obj, slot);
839}
840
841static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700842nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700843{
Jason Sams4d339932010-05-11 14:03:58 -0700844 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
845 jint len = _env->GetArrayLength(data);
846 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
847 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
848 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
849}
850
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700851
Jason Sams22534172009-08-04 16:58:20 -0700852// -----------------------------------
853
854static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700855nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700856{
Jason Sams22534172009-08-04 16:58:20 -0700857 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700858 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700859}
860
Romain Guy584a3752009-07-30 18:45:01 -0700861static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700862nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700863 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700864{
Jason Samsd19f10d2009-05-22 14:03:28 -0700865 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700866 jint _exception = 0;
867 jint remaining;
868 jbyte* script_base = 0;
869 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700870 if (!scriptRef) {
871 _exception = 1;
872 //_env->ThrowNew(IAEClass, "script == null");
873 goto exit;
874 }
875 if (offset < 0) {
876 _exception = 1;
877 //_env->ThrowNew(IAEClass, "offset < 0");
878 goto exit;
879 }
880 if (length < 0) {
881 _exception = 1;
882 //_env->ThrowNew(IAEClass, "length < 0");
883 goto exit;
884 }
885 remaining = _env->GetArrayLength(scriptRef) - offset;
886 if (remaining < length) {
887 _exception = 1;
888 //_env->ThrowNew(IAEClass, "length > script.length - offset");
889 goto exit;
890 }
891 script_base = (jbyte *)
892 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
893 script_ptr = script_base + offset;
894
Jason Samsbc948de2009-08-17 18:35:48 -0700895 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700896
Jack Palevich43702d82009-05-28 13:38:16 -0700897exit:
898 if (script_base) {
899 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
900 _exception ? JNI_ABORT: 0);
901 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700902}
903
904static jint
Shih-wei Liaoa914f342010-11-08 01:33:59 -0800905nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con, jstring resName)
Jason Samsd19f10d2009-05-22 14:03:28 -0700906{
Jason Samsd19f10d2009-05-22 14:03:28 -0700907 LOG_API("nScriptCCreate, con(%p)", con);
Shih-wei Liaoa914f342010-11-08 01:33:59 -0800908 const char* resNameUTF = _env->GetStringUTFChars(resName, NULL);
909 return (jint)rsScriptCCreate(con, resNameUTF);
Jason Samsd19f10d2009-05-22 14:03:28 -0700910}
911
912// ---------------------------------------------------------------------------
913
914static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700915nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700916{
Jason Sams54db59c2010-05-13 18:30:11 -0700917 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
918 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700919}
920
921static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700922nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700923{
Jason Sams54db59c2010-05-13 18:30:11 -0700924 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
925 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700926}
927
928static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700929nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700930{
Jason Sams54db59c2010-05-13 18:30:11 -0700931 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
932 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700933}
934
935static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700936nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700937{
Jason Sams54db59c2010-05-13 18:30:11 -0700938 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
939 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700940}
941
942static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700943nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -0700944{
Jason Sams54db59c2010-05-13 18:30:11 -0700945 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
946 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700947}
948
949static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700950nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700951{
Jason Sams54db59c2010-05-13 18:30:11 -0700952 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
953 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700954}
955
956static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700957nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700958{
Jason Sams54db59c2010-05-13 18:30:11 -0700959 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -0700960 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700961}
962
Jason Sams0011bcf2009-12-15 12:58:36 -0800963// ---------------------------------------------------------------------------
964
965static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700966nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -0800967{
Jason Sams0011bcf2009-12-15 12:58:36 -0800968 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
969 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
970}
Jason Sams54c0ec12009-11-30 14:49:55 -0800971
Jason Sams68afd012009-12-17 16:55:08 -0800972static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700973nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800974{
Jason Sams68afd012009-12-17 16:55:08 -0800975 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
976 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
977}
978
979static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700980nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800981{
Jason Sams68afd012009-12-17 16:55:08 -0800982 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
983 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
984}
985
Jason Samsd19f10d2009-05-22 14:03:28 -0700986// ---------------------------------------------------------------------------
987
Jason Samsd19f10d2009-05-22 14:03:28 -0700988static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700989nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800990{
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800991 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
992 jint shaderLen = _env->GetStringUTFLength(shader);
993 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
994 jint paramLen = _env->GetArrayLength(params);
995
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700996 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800997
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700998 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800999 _env->ReleaseStringUTFChars(shader, shaderUTF);
1000 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1001 return ret;
1002}
1003
1004
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001005// ---------------------------------------------------------------------------
1006
Jason Sams0011bcf2009-12-15 12:58:36 -08001007static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001008nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001009{
Jason Sams0011bcf2009-12-15 12:58:36 -08001010 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1011 jint shaderLen = _env->GetStringUTFLength(shader);
1012 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1013 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001014
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001015 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001016
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001017 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001018 _env->ReleaseStringUTFChars(shader, shaderUTF);
1019 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1020 return ret;
1021}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001022
Jason Samsebfb4362009-09-23 13:57:02 -07001023// ---------------------------------------------------------------------------
1024
1025static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001026nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001027{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001028 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1029 con, pointSmooth, lineSmooth, pointSprite);
1030 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001031}
1032
1033static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001034nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001035{
Jason Samsebfb4362009-09-23 13:57:02 -07001036 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001037 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1038}
1039
1040static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001041nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001042{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001043 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1044 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001045}
1046
Jason Samsd19f10d2009-05-22 14:03:28 -07001047
1048// ---------------------------------------------------------------------------
1049
1050static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001051nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001052{
Jason Samsd19f10d2009-05-22 14:03:28 -07001053 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001054 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001055}
1056
1057static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001058nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001059{
Jason Sams54db59c2010-05-13 18:30:11 -07001060 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1061 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001062}
1063
1064static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001065nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001066{
Jason Samsd19f10d2009-05-22 14:03:28 -07001067 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001068 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001069}
1070
Jason Sams0826a6f2009-06-15 19:04:56 -07001071static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001072nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001073{
Jason Sams0826a6f2009-06-15 19:04:56 -07001074 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001075 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001076}
1077
Joe Onoratod7b37742009-08-09 22:57:44 -07001078static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001079nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001080{
Jason Samsebfb4362009-09-23 13:57:02 -07001081 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1082 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1083}
1084
Joe Onoratod7b37742009-08-09 22:57:44 -07001085
Jason Sams02fb2cb2009-05-28 15:37:57 -07001086// ---------------------------------------------------------------------------
1087
1088static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001089nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001090{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001091 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001092 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001093}
1094
1095static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001096nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001097{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001098 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001099 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001100}
1101
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001102static void
1103nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1104{
1105 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1106 rsSamplerSet2(con, (RsSamplerParam)p, v);
1107}
1108
Jason Sams02fb2cb2009-05-28 15:37:57 -07001109static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001110nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001111{
Jason Samsbba134c2009-06-22 15:49:21 -07001112 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001113 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001114}
1115
Jason Samsbba134c2009-06-22 15:49:21 -07001116// ---------------------------------------------------------------------------
1117
Jason Samsbba134c2009-06-22 15:49:21 -07001118static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001119nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001120{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001121 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1122 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1123 return id;
1124}
1125
1126static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001127nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001128{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001129 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1130 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001131}
1132
1133static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001134nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001135{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001136 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1137 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1138}
1139
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001140static void
1141nMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
1142{
1143 LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1144 rsMeshInitVertexAttribs(con, (RsMesh)mesh);
1145}
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 },
1211{"nContextGetUserMessage", "(I[I)V", (void*)nContextGetUserMessage },
1212{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1213{"nContextPeekMessage", "(I[IZ)I", (void*)nContextPeekMessage },
1214
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.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001220{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001221{"rsnContextCreateGL", "(IIIIIIIIIIIIF)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 },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001225{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001226{"rsnContextDump", "(II)V", (void*)nContextDump },
1227{"rsnContextPause", "(I)V", (void*)nContextPause },
1228{"rsnContextResume", "(I)V", (void*)nContextResume },
1229{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001230{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001231{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001232
Jason Sams2e1872f2010-08-17 16:25:41 -07001233{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1234{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001235{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001236{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001237
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001238{"rsnFontCreateFromFile", "(ILjava/lang/String;II)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001239
Jason Sams2e1872f2010-08-17 16:25:41 -07001240{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001241{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001242{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001243{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001244
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001245{"rsnTypeCreate", "(IIIIIZZ)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001246{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001247
Jason Samsd4b23b52010-12-13 15:32:35 -08001248{"rsnAllocationCreateTyped", "(IIII)I", (void*)nAllocationCreateTyped },
Jason Sams5476b452010-12-08 16:14:36 -08001249{"rsnAllocationCreateFromBitmap", "(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCreateFromBitmap },
1250{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08001251
Jason Sams4ef66502010-12-10 16:03:15 -08001252{"rsnAllocationCopyFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
1253{"rsnAllocationCopyToBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
1254
Jason Sams2e1872f2010-08-17 16:25:41 -07001255{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
1256{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
Jason Sams5476b452010-12-08 16:14:36 -08001257{"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll },
Jason Sams2e1872f2010-08-17 16:25:41 -07001258{"rsnAllocationSubData1D", "(IIII[II)V", (void*)nAllocationSubData1D_i },
1259{"rsnAllocationSubData1D", "(IIII[SI)V", (void*)nAllocationSubData1D_s },
1260{"rsnAllocationSubData1D", "(IIII[BI)V", (void*)nAllocationSubData1D_b },
1261{"rsnAllocationSubData1D", "(IIII[FI)V", (void*)nAllocationSubData1D_f },
Jason Sams49bdaf02010-08-31 13:50:42 -07001262{"rsnAllocationSubElementData1D", "(IIII[BI)V", (void*)nAllocationSubElementData1D },
Jason Sams2e1872f2010-08-17 16:25:41 -07001263{"rsnAllocationSubData2D", "(IIIIII[II)V", (void*)nAllocationSubData2D_i },
1264{"rsnAllocationSubData2D", "(IIIIII[FI)V", (void*)nAllocationSubData2D_f },
1265{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1266{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001267{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001268{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1269{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001270
Jason Sams2e1872f2010-08-17 16:25:41 -07001271{"rsnAdapter1DBindAllocation", "(III)V", (void*)nAdapter1DBindAllocation },
1272{"rsnAdapter1DSetConstraint", "(IIII)V", (void*)nAdapter1DSetConstraint },
1273{"rsnAdapter1DData", "(II[I)V", (void*)nAdapter1DData_i },
1274{"rsnAdapter1DData", "(II[F)V", (void*)nAdapter1DData_f },
1275{"rsnAdapter1DSubData", "(IIII[I)V", (void*)nAdapter1DSubData_i },
1276{"rsnAdapter1DSubData", "(IIII[F)V", (void*)nAdapter1DSubData_f },
1277{"rsnAdapter1DCreate", "(I)I", (void*)nAdapter1DCreate },
Jason Sams22534172009-08-04 16:58:20 -07001278
Jason Sams2e1872f2010-08-17 16:25:41 -07001279{"rsnAdapter2DBindAllocation", "(III)V", (void*)nAdapter2DBindAllocation },
1280{"rsnAdapter2DSetConstraint", "(IIII)V", (void*)nAdapter2DSetConstraint },
1281{"rsnAdapter2DData", "(II[I)V", (void*)nAdapter2DData_i },
1282{"rsnAdapter2DData", "(II[F)V", (void*)nAdapter2DData_f },
1283{"rsnAdapter2DSubData", "(IIIIII[I)V", (void*)nAdapter2DSubData_i },
1284{"rsnAdapter2DSubData", "(IIIIII[F)V", (void*)nAdapter2DSubData_f },
1285{"rsnAdapter2DCreate", "(I)I", (void*)nAdapter2DCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001286
Jason Sams2e1872f2010-08-17 16:25:41 -07001287{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1288{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1289{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1290{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1291{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001292{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001293{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001294{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001295{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001296{"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001297
Jason Sams2e1872f2010-08-17 16:25:41 -07001298{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1299{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
Shih-wei Liaoa914f342010-11-08 01:33:59 -08001300{"rsnScriptCCreate", "(ILjava/lang/String;)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001301
Jason Sams2e1872f2010-08-17 16:25:41 -07001302{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1303{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1304{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1305{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1306{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1307{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1308{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001309
Jason Sams2e1872f2010-08-17 16:25:41 -07001310{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1311{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1312{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001313
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001314{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001315
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001316{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001317{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1318{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001319
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001320{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001321
Jason Sams2e1872f2010-08-17 16:25:41 -07001322{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001323{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001324{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1325{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1326{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001327
Jason Sams2e1872f2010-08-17 16:25:41 -07001328{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1329{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001330{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001331{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001332
Jason Sams2e1872f2010-08-17 16:25:41 -07001333{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1334{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1335{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001336{"rsnMeshInitVertexAttribs", "(II)V", (void*)nMeshInitVertexAttribs },
Jason Sams2e1872f2010-08-17 16:25:41 -07001337
1338{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1339{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001340{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001341{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001342
Jason Samsd19f10d2009-05-22 14:03:28 -07001343};
1344
1345static int registerFuncs(JNIEnv *_env)
1346{
1347 return android::AndroidRuntime::registerNativeMethods(
1348 _env, classPathName, methods, NELEM(methods));
1349}
1350
1351// ---------------------------------------------------------------------------
1352
1353jint JNI_OnLoad(JavaVM* vm, void* reserved)
1354{
1355 JNIEnv* env = NULL;
1356 jint result = -1;
1357
Jason Samsd19f10d2009-05-22 14:03:28 -07001358 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1359 LOGE("ERROR: GetEnv failed\n");
1360 goto bail;
1361 }
1362 assert(env != NULL);
1363
1364 if (registerFuncs(env) < 0) {
1365 LOGE("ERROR: MediaPlayer native registration failed\n");
1366 goto bail;
1367 }
1368
1369 /* success -- return valid version number */
1370 result = JNI_VERSION_1_4;
1371
1372bail:
1373 return result;
1374}
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001375