blob: c4e0372165c762d87e4810d2bcb030329c06438c [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 Samsd19f10d2009-05-22 14:03:28 -070073}
74
Jason Samsea84a7c2009-09-04 14:42:41 -070075static void nInitElements(JNIEnv *_env, jobject _this, jint a8, jint rgba4444, jint rgba8888, jint rgb565)
76{
77 g_A_8 = reinterpret_cast<RsElement>(a8);
78 g_RGBA_4444 = reinterpret_cast<RsElement>(rgba4444);
79 g_RGBA_8888 = reinterpret_cast<RsElement>(rgba8888);
80 g_RGB_565 = reinterpret_cast<RsElement>(rgb565);
81}
Jason Samsd19f10d2009-05-22 14:03:28 -070082
83// ---------------------------------------------------------------------------
84
Jason Sams3eaa338e2009-06-10 15:04:38 -070085static void
Jason Sams2e1872f2010-08-17 16:25:41 -070086nContextFinish(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams96ed4cf2010-06-15 12:15:57 -070087{
Jason Sams96ed4cf2010-06-15 12:15:57 -070088 LOG_API("nContextFinish, con(%p)", con);
89 rsContextFinish(con);
90}
91
92static void
Jason Sams2e1872f2010-08-17 16:25:41 -070093nAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
Jason Sams3eaa338e2009-06-10 15:04:38 -070094{
Jason Sams07ae4062009-08-27 20:23:34 -070095 LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
Jason Sams3eaa338e2009-06-10 15:04:38 -070096 jint len = _env->GetArrayLength(str);
97 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -070098 rsAssignName(con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -070099 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
100}
101
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700102static jstring
Jason Sams2e1872f2010-08-17 16:25:41 -0700103nGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700104{
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700105 LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700106 const char *name = NULL;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700107 rsaGetName(con, (void *)obj, &name);
108 if(name == NULL || strlen(name) == 0) {
109 return NULL;
110 }
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700111 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);
Jason Sams9c25aee2010-10-14 17:57:30 -0700118 rsObjDestroy(con, (void *)obj);
Jason Sams7ce033d2009-08-18 14:14:24 -0700119}
120
Jason Sams3eaa338e2009-06-10 15:04:38 -0700121// ---------------------------------------------------------------------------
122
Jason Samsd19f10d2009-05-22 14:03:28 -0700123static jint
124nDeviceCreate(JNIEnv *_env, jobject _this)
125{
126 LOG_API("nDeviceCreate");
127 return (jint)rsDeviceCreate();
128}
129
130static void
131nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
132{
133 LOG_API("nDeviceDestroy");
134 return rsDeviceDestroy((RsDevice)dev);
135}
136
Jason Samsebfb4362009-09-23 13:57:02 -0700137static void
138nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
139{
140 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
141 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
142}
143
Jason Samsd19f10d2009-05-22 14:03:28 -0700144static jint
Jason Sams704ff642010-02-09 16:05:07 -0800145nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
Jason Samsd19f10d2009-05-22 14:03:28 -0700146{
147 LOG_API("nContextCreate");
Jason Sams704ff642010-02-09 16:05:07 -0800148 return (jint)rsContextCreate((RsDevice)dev, ver);
149}
150
151static jint
Jason Sams11c8af92010-10-13 15:31:10 -0700152nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
153 int colorMin, int colorPref,
154 int alphaMin, int alphaPref,
155 int depthMin, int depthPref,
156 int stencilMin, int stencilPref,
157 int samplesMin, int samplesPref, float samplesQ)
Jason Sams704ff642010-02-09 16:05:07 -0800158{
Jason Sams11c8af92010-10-13 15:31:10 -0700159 RsSurfaceConfig sc;
160 sc.alphaMin = alphaMin;
161 sc.alphaPref = alphaPref;
162 sc.colorMin = colorMin;
163 sc.colorPref = colorPref;
164 sc.depthMin = depthMin;
165 sc.depthPref = depthPref;
166 sc.samplesMin = samplesMin;
167 sc.samplesPref = samplesPref;
168 sc.samplesQ = samplesQ;
169
Jason Sams704ff642010-02-09 16:05:07 -0800170 LOG_API("nContextCreateGL");
Jason Sams11c8af92010-10-13 15:31:10 -0700171 return (jint)rsContextCreateGL((RsDevice)dev, ver, sc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700172}
173
174static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700175nContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800176{
Jason Sams7d787b42009-11-15 12:14:26 -0800177 LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
178 rsContextSetPriority(con, p);
179}
180
181
182
183static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700184nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800185{
Jason Sams3bc47d42009-11-12 15:10:25 -0800186 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800187
188 Surface * window = NULL;
189 if (wnd == NULL) {
190
191 } else {
Jim Milleree956052010-08-19 18:56:00 -0700192 window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800193 }
194
Jason Sams3bc47d42009-11-12 15:10:25 -0800195 rsContextSetSurface(con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800196}
197
198static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700199nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700200{
Jason Sams2e1872f2010-08-17 16:25:41 -0700201 LOG_API("nContextDestroy, con(%p)", con);
202 rsContextDestroy(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700203}
204
Jason Sams715333b2009-11-17 17:26:46 -0800205static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700206nContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800207{
Jason Sams715333b2009-11-17 17:26:46 -0800208 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
209 rsContextDump((RsContext)con, bits);
210}
Jason Samsd19f10d2009-05-22 14:03:28 -0700211
212static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700213nContextPause(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700214{
Jason Sams65e7aa52009-09-24 17:38:20 -0700215 LOG_API("nContextPause, con(%p)", con);
216 rsContextPause(con);
217}
218
219static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700220nContextResume(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700221{
Jason Sams65e7aa52009-09-24 17:38:20 -0700222 LOG_API("nContextResume, con(%p)", con);
223 rsContextResume(con);
224}
225
Jason Sams1c415172010-11-08 17:06:46 -0800226
227static jstring
228nContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
229{
230 LOG_API("nContextGetErrorMessage, con(%p)", con);
231 char buf[1024];
232
233 size_t receiveLen;
234 uint32_t subID;
235 int id = rsContextGetMessage(con, buf, &receiveLen, &subID, sizeof(buf), true);
236 if (!id && receiveLen) {
237 LOGV("message receive buffer too small. %i", receiveLen);
238 }
239 return _env->NewStringUTF(buf);
240}
241
242static void
243nContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
Jason Sams516c3192009-10-06 13:58:47 -0700244{
Jason Sams516c3192009-10-06 13:58:47 -0700245 jint len = _env->GetArrayLength(data);
246 LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
247 jint *ptr = _env->GetIntArrayElements(data, NULL);
248 size_t receiveLen;
Jason Sams1c415172010-11-08 17:06:46 -0800249 uint32_t subID;
250 int id = rsContextGetMessage(con, ptr, &receiveLen, &subID, len * 4, true);
Jason Sams516c3192009-10-06 13:58:47 -0700251 if (!id && receiveLen) {
Jason Sams1d45c472010-08-25 14:31:48 -0700252 LOGV("message receive buffer too small. %i", receiveLen);
Jason Sams516c3192009-10-06 13:58:47 -0700253 }
254 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams1c415172010-11-08 17:06:46 -0800255}
256
257static jint
258nContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData, jboolean wait)
259{
260 LOG_API("nContextPeekMessage, con(%p)", con);
261 jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
262 size_t receiveLen;
263 uint32_t subID;
264 int id = rsContextPeekMessage(con, &receiveLen, &subID, wait);
265 auxDataPtr[0] = (jint)subID;
266 auxDataPtr[1] = (jint)receiveLen;
267 _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
Jason Sams516c3192009-10-06 13:58:47 -0700268 return id;
269}
270
Jason Sams2e1872f2010-08-17 16:25:41 -0700271static void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700272{
Jason Sams516c3192009-10-06 13:58:47 -0700273 LOG_API("nContextInitToClient, con(%p)", con);
274 rsContextInitToClient(con);
275}
276
Jason Sams2e1872f2010-08-17 16:25:41 -0700277static void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700278{
Jason Sams516c3192009-10-06 13:58:47 -0700279 LOG_API("nContextDeinitToClient, con(%p)", con);
280 rsContextDeinitToClient(con);
281}
282
283
Jason Sams718cd1f2009-12-23 14:35:29 -0800284static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700285nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700286{
Jason Sams718cd1f2009-12-23 14:35:29 -0800287 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
288 return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700289}
290
291static jint
Jason Sams70d4e502010-09-02 17:35:23 -0700292nElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700293{
Jason Sams718cd1f2009-12-23 14:35:29 -0800294 int fieldCount = _env->GetArrayLength(_ids);
Jason Sams704ff642010-02-09 16:05:07 -0800295 LOG_API("nElementCreate2, con(%p)", con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800296
297 jint *ids = _env->GetIntArrayElements(_ids, NULL);
Jason Sams70d4e502010-09-02 17:35:23 -0700298 jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
Jason Sams718cd1f2009-12-23 14:35:29 -0800299 const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
300 size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
301
302 for (int ct=0; ct < fieldCount; ct++) {
303 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
304 nameArray[ct] = _env->GetStringUTFChars(s, NULL);
305 sizeArray[ct] = _env->GetStringUTFLength(s);
306 }
Jason Sams70d4e502010-09-02 17:35:23 -0700307 jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
Jason Sams718cd1f2009-12-23 14:35:29 -0800308 for (int ct=0; ct < fieldCount; ct++) {
309 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
310 _env->ReleaseStringUTFChars(s, nameArray[ct]);
311 }
312 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
Jason Sams70d4e502010-09-02 17:35:23 -0700313 _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
Jason Sams718cd1f2009-12-23 14:35:29 -0800314 free(nameArray);
315 free(sizeArray);
316 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700317}
318
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700319static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700320nElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700321{
322 int dataSize = _env->GetArrayLength(_elementData);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700323 LOG_API("nElementGetNativeData, con(%p)", con);
324
325 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
326 assert(dataSize == 5);
327
328 uint32_t elementData[5];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700329 rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700330
331 for(jint i = 0; i < dataSize; i ++) {
332 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
333 }
334}
335
336
337static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700338nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700339{
340 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700341 LOG_API("nElementGetSubElements, con(%p)", con);
342
343 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
344 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
345
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700346 rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700347
Jason Sams11c8af92010-10-13 15:31:10 -0700348 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700349 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
350 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
351 }
352
353 free(ids);
354 free(names);
355}
356
Jason Samsd19f10d2009-05-22 14:03:28 -0700357// -----------------------------------
358
Jason Sams3b9c52a2010-10-14 17:48:46 -0700359static int
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800360nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
361 jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
Jason Samsd19f10d2009-05-22 14:03:28 -0700362{
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800363 LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
364 con, eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700365
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800366 jint id = (jint)rsaTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700367 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700368}
369
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700370static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700371nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700372{
373 // We are packing 6 items: mDimX; mDimY; mDimZ;
374 // mDimLOD; mDimFaces; mElement; into typeData
375 int elementCount = _env->GetArrayLength(_typeData);
376
377 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700378 LOG_API("nTypeCreate, con(%p)", con);
379
380 uint32_t typeData[6];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700381 rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700382
383 for(jint i = 0; i < elementCount; i ++) {
384 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
385 }
386}
387
Jason Samsd19f10d2009-05-22 14:03:28 -0700388// -----------------------------------
389
390static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700391nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint e)
Jason Samsd19f10d2009-05-22 14:03:28 -0700392{
Jason Samsd19f10d2009-05-22 14:03:28 -0700393 LOG_API("nAllocationCreateTyped, con(%p), e(%p)", con, (RsElement)e);
Jason Sams31a7e422010-10-26 13:09:17 -0700394 return (jint) rsaAllocationCreateTyped(con, (RsElement)e);
Jason Samsd19f10d2009-05-22 14:03:28 -0700395}
396
Jason Samsd19f10d2009-05-22 14:03:28 -0700397static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700398nAllocationUploadToTexture(JNIEnv *_env, jobject _this, RsContext con, jint a, jboolean genMip, jint mip)
Jason Samsd19f10d2009-05-22 14:03:28 -0700399{
Jason Samsc2908e62010-02-23 17:44:28 -0800400 LOG_API("nAllocationUploadToTexture, con(%p), a(%p), genMip(%i), mip(%i)", con, (RsAllocation)a, genMip, mip);
401 rsAllocationUploadToTexture(con, (RsAllocation)a, genMip, mip);
Jason Samsd19f10d2009-05-22 14:03:28 -0700402}
403
Jason Sams07ae4062009-08-27 20:23:34 -0700404static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700405nAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, RsContext con, jint a)
Jason Sams07ae4062009-08-27 20:23:34 -0700406{
Jason Sams07ae4062009-08-27 20:23:34 -0700407 LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
408 rsAllocationUploadToBufferObject(con, (RsAllocation)a);
409}
410
Jason Samsea84a7c2009-09-04 14:42:41 -0700411static RsElement SkBitmapToPredefined(SkBitmap::Config cfg)
Jason Samsfe08d992009-05-27 14:45:32 -0700412{
Jason Samsffe9f482009-06-01 17:45:53 -0700413 switch (cfg) {
414 case SkBitmap::kA8_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700415 return g_A_8;
Jason Samsffe9f482009-06-01 17:45:53 -0700416 case SkBitmap::kARGB_4444_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700417 return g_RGBA_4444;
Jason Samsffe9f482009-06-01 17:45:53 -0700418 case SkBitmap::kARGB_8888_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700419 return g_RGBA_8888;
Jason Samsffe9f482009-06-01 17:45:53 -0700420 case SkBitmap::kRGB_565_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700421 return g_RGB_565;
Jason Samsfe08d992009-05-27 14:45:32 -0700422
Jason Samsffe9f482009-06-01 17:45:53 -0700423 default:
424 break;
425 }
426 // If we don't have a conversion mark it as a user type.
427 LOGE("Unsupported bitmap type");
Jason Samsea84a7c2009-09-04 14:42:41 -0700428 return NULL;
Jason Samsfe08d992009-05-27 14:45:32 -0700429}
430
Jason Samsffe9f482009-06-01 17:45:53 -0700431static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700432nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
Jason Samsffe9f482009-06-01 17:45:53 -0700433{
Jason Samsffe9f482009-06-01 17:45:53 -0700434 SkBitmap const * nativeBitmap =
435 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
436 const SkBitmap& bitmap(*nativeBitmap);
437 SkBitmap::Config config = bitmap.getConfig();
438
Jason Samsea84a7c2009-09-04 14:42:41 -0700439 RsElement e = SkBitmapToPredefined(config);
440 if (e) {
Jason Samsffe9f482009-06-01 17:45:53 -0700441 bitmap.lockPixels();
442 const int w = bitmap.width();
443 const int h = bitmap.height();
444 const void* ptr = bitmap.getPixels();
Jason Sams31a7e422010-10-26 13:09:17 -0700445 jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Jason Samsffe9f482009-06-01 17:45:53 -0700446 bitmap.unlockPixels();
447 return id;
448 }
449 return 0;
450}
Jason Samsfe08d992009-05-27 14:45:32 -0700451
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800452static int
453nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
454{
455 SkBitmap const * nativeBitmap =
456 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
457 const SkBitmap& bitmap(*nativeBitmap);
458 SkBitmap::Config config = bitmap.getConfig();
459
460 RsElement e = SkBitmapToPredefined(config);
461 if (e) {
462 bitmap.lockPixels();
463 const int w = bitmap.width();
464 const int h = bitmap.height();
465 const void* ptr = bitmap.getPixels();
466 jint id = (jint)rsaAllocationCubeCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
467 bitmap.unlockPixels();
468 return id;
469 }
470 return 0;
471}
472
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700473static void
474nAllocationUpdateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
475{
476 SkBitmap const * nativeBitmap =
477 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
478 const SkBitmap& bitmap(*nativeBitmap);
479 SkBitmap::Config config = bitmap.getConfig();
480
481 RsElement e = SkBitmapToPredefined(config);
482 if (e) {
483 bitmap.lockPixels();
484 const void* ptr = bitmap.getPixels();
485 rsAllocationUpdateFromBitmap(con, (RsAllocation)alloc, e, ptr);
486 bitmap.unlockPixels();
487 }
488}
489
Jason Sams8a647432010-03-01 15:31:04 -0800490static void ReleaseBitmapCallback(void *bmp)
491{
492 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
493 nativeBitmap->unlockPixels();
494}
495
496static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700497nAllocationCreateBitmapRef(JNIEnv *_env, jobject _this, RsContext con, jint type, jobject jbitmap)
Jason Sams8a647432010-03-01 15:31:04 -0800498{
Jason Sams8a647432010-03-01 15:31:04 -0800499 SkBitmap * nativeBitmap =
500 (SkBitmap *)_env->GetIntField(jbitmap, gNativeBitmapID);
501
502
503 nativeBitmap->lockPixels();
504 void* ptr = nativeBitmap->getPixels();
505 jint id = (jint)rsAllocationCreateBitmapRef(con, (RsType)type, ptr, nativeBitmap, ReleaseBitmapCallback);
506 return id;
507}
508
Jason Samsb0ec1b42009-07-28 12:02:16 -0700509static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700510nAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jint native_asset)
Romain Guy650a3eb2009-08-31 14:06:43 -0700511{
Romain Guy650a3eb2009-08-31 14:06:43 -0700512 Asset* asset = reinterpret_cast<Asset*>(native_asset);
513 SkBitmap bitmap;
514 SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
515 &bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
516
517 SkBitmap::Config config = bitmap.getConfig();
518
Jason Samsea84a7c2009-09-04 14:42:41 -0700519 RsElement e = SkBitmapToPredefined(config);
Romain Guy650a3eb2009-08-31 14:06:43 -0700520
Jason Samsea84a7c2009-09-04 14:42:41 -0700521 if (e) {
Romain Guy650a3eb2009-08-31 14:06:43 -0700522 bitmap.lockPixels();
523 const int w = bitmap.width();
524 const int h = bitmap.height();
525 const void* ptr = bitmap.getPixels();
Jason Sams31a7e422010-10-26 13:09:17 -0700526 jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Romain Guy650a3eb2009-08-31 14:06:43 -0700527 bitmap.unlockPixels();
528 return id;
529 }
530 return 0;
531}
532
Jason Samsd19f10d2009-05-22 14:03:28 -0700533static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700534nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700535{
Jason Samsd19f10d2009-05-22 14:03:28 -0700536 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700537 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 -0700538 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700539 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700540 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
541}
542
543static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700544nAllocationSubData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700545{
Jason Sams768bc022009-09-21 19:41:04 -0700546 jint len = _env->GetArrayLength(data);
547 LOG_API("nAllocation1DSubData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
548 jshort *ptr = _env->GetShortArrayElements(data, NULL);
549 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
550 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
551}
552
553static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700554nAllocationSubData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700555{
Jason Sams768bc022009-09-21 19:41:04 -0700556 jint len = _env->GetArrayLength(data);
557 LOG_API("nAllocation1DSubData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
558 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
559 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
560 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
561}
562
563static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700564nAllocationSubData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700565{
Jason Samsd19f10d2009-05-22 14:03:28 -0700566 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700567 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 -0700568 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700569 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700570 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
571}
572
573static void
Jason Sams49bdaf02010-08-31 13:50:42 -0700574// native void rsnAllocationSubElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
575nAllocationSubElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint compIdx, jbyteArray data, int sizeBytes)
576{
577 jint len = _env->GetArrayLength(data);
578 LOG_API("nAllocationSubElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
579 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
580 rsAllocation1DSubElementData(con, (RsAllocation)alloc, offset, ptr, compIdx, sizeBytes);
581 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
582}
583
584static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700585nAllocationSubData2D_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 -0700586{
Jason Samsd19f10d2009-05-22 14:03:28 -0700587 jint len = _env->GetArrayLength(data);
588 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);
589 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700590 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700591 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
592}
593
594static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700595nAllocationSubData2D_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 -0700596{
Jason Samsd19f10d2009-05-22 14:03:28 -0700597 jint len = _env->GetArrayLength(data);
598 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);
599 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700600 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700601 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
602}
603
Jason Sams40a29e82009-08-10 14:55:26 -0700604static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700605nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700606{
Jason Sams40a29e82009-08-10 14:55:26 -0700607 jint len = _env->GetArrayLength(data);
608 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
609 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700610 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700611 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700612}
613
614static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700615nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700616{
Jason Sams40a29e82009-08-10 14:55:26 -0700617 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700618 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700619 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700620 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700621 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700622}
Jason Samsd19f10d2009-05-22 14:03:28 -0700623
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700624static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700625nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700626{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700627 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700628 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700629}
630
Jason Sams5edc6082010-10-05 13:32:49 -0700631static void
632nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
633{
634 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
635 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
636}
637
638static void
639nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
640{
641 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
642 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
643}
644
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700645// -----------------------------------
646
647static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700648nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700649{
650 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700651
652 Asset* asset = reinterpret_cast<Asset*>(native_asset);
653
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700654 jint id = (jint)rsaFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700655 return id;
656}
657
658static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700659nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700660{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700661 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700662 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700663 return numEntries;
664}
665
666static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700667nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700668{
669 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700670 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
671
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700672 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700673
674 for(jint i = 0; i < numEntries; i ++) {
675 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
676 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
677 }
678
679 free(fileEntries);
680}
681
682static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700683nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700684{
685 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700686 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700687 return id;
688}
Jason Samsd19f10d2009-05-22 14:03:28 -0700689
690// -----------------------------------
691
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700692static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700693nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jint fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700694{
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700695 const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
696
697 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
698 return id;
699}
700
701
702// -----------------------------------
703
Jason Samsd19f10d2009-05-22 14:03:28 -0700704static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700705nAdapter1DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700706{
Jason Samsd19f10d2009-05-22 14:03:28 -0700707 LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700708 rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700709}
710
711static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700712nAdapter1DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsd19f10d2009-05-22 14:03:28 -0700713{
Jason Samsd19f10d2009-05-22 14:03:28 -0700714 LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700715 rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
Jason Samsd19f10d2009-05-22 14:03:28 -0700716}
717
718static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700719nAdapter1DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700720{
Jason Samsd19f10d2009-05-22 14:03:28 -0700721 jint len = _env->GetArrayLength(data);
722 LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
723 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700724 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700725 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
726}
727
728static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700729nAdapter1DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700730{
Jason Samsd19f10d2009-05-22 14:03:28 -0700731 jint len = _env->GetArrayLength(data);
732 LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
733 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700734 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700735 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
736}
737
738static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700739nAdapter1DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700740{
Jason Samsd19f10d2009-05-22 14:03:28 -0700741 jint len = _env->GetArrayLength(data);
742 LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
743 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700744 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700745 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
746}
747
748static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700749nAdapter1DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700750{
Jason Samsd19f10d2009-05-22 14:03:28 -0700751 jint len = _env->GetArrayLength(data);
752 LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
753 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700754 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700755 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
756}
757
758static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700759nAdapter1DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700760{
Jason Samsd19f10d2009-05-22 14:03:28 -0700761 LOG_API("nAdapter1DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700762 return (jint)rsAdapter1DCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700763}
764
765// -----------------------------------
766
767static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700768nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700769{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700770 LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700771 rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700772}
773
774static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700775nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700776{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700777 LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700778 rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700779}
780
781static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700782nAdapter2DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700783{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700784 jint len = _env->GetArrayLength(data);
785 LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
786 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700787 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700788 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
789}
790
791static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700792nAdapter2DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700793{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700794 jint len = _env->GetArrayLength(data);
795 LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
796 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700797 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700798 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
799}
800
801static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700802nAdapter2DSubData_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 -0700803{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700804 jint len = _env->GetArrayLength(data);
805 LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
806 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
807 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700808 rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700809 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
810}
811
812static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700813nAdapter2DSubData_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 -0700814{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700815 jint len = _env->GetArrayLength(data);
816 LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
817 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
818 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700819 rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700820 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
821}
822
823static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700824nAdapter2DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700825{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700826 LOG_API("nAdapter2DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700827 return (jint)rsAdapter2DCreate(con);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700828}
829
830// -----------------------------------
831
832static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700833nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700834{
Jason Samsd19f10d2009-05-22 14:03:28 -0700835 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700836 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700837}
838
839static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700840nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700841{
Jason Samscfc04362010-09-14 14:59:03 -0700842 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700843 rsScriptSetVarI(con, (RsScript)script, slot, val);
844}
845
846static void
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800847nScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
848{
849 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
850 rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
851}
852
853static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700854nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
855{
856 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
857 rsScriptSetVarJ(con, (RsScript)script, slot, val);
858}
859
860static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700861nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700862{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700863 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700864 rsScriptSetVarF(con, (RsScript)script, slot, val);
865}
866
867static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700868nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
869{
870 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
871 rsScriptSetVarD(con, (RsScript)script, slot, val);
872}
873
874static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700875nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700876{
Jason Sams4d339932010-05-11 14:03:58 -0700877 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
878 jint len = _env->GetArrayLength(data);
879 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
880 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
881 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
882}
883
Jason Samsd19f10d2009-05-22 14:03:28 -0700884
885static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700886nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700887{
Jason Sams07ae4062009-08-27 20:23:34 -0700888 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700889
890 jint length = _env->GetArrayLength(timeZone);
891 jbyte* timeZone_ptr;
892 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
893
Jason Samsbc948de2009-08-17 18:35:48 -0700894 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700895
896 if (timeZone_ptr) {
897 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
898 }
899}
900
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700901static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700902nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700903{
Jason Samsbe2e8412009-09-16 15:04:38 -0700904 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
905 rsScriptInvoke(con, (RsScript)obj, slot);
906}
907
908static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700909nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700910{
Jason Sams4d339932010-05-11 14:03:58 -0700911 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
912 jint len = _env->GetArrayLength(data);
913 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
914 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
915 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
916}
917
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700918
Jason Sams22534172009-08-04 16:58:20 -0700919// -----------------------------------
920
921static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700922nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700923{
Jason Sams22534172009-08-04 16:58:20 -0700924 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700925 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700926}
927
Romain Guy584a3752009-07-30 18:45:01 -0700928static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700929nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700930 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700931{
Jason Samsd19f10d2009-05-22 14:03:28 -0700932 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700933 jint _exception = 0;
934 jint remaining;
935 jbyte* script_base = 0;
936 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700937 if (!scriptRef) {
938 _exception = 1;
939 //_env->ThrowNew(IAEClass, "script == null");
940 goto exit;
941 }
942 if (offset < 0) {
943 _exception = 1;
944 //_env->ThrowNew(IAEClass, "offset < 0");
945 goto exit;
946 }
947 if (length < 0) {
948 _exception = 1;
949 //_env->ThrowNew(IAEClass, "length < 0");
950 goto exit;
951 }
952 remaining = _env->GetArrayLength(scriptRef) - offset;
953 if (remaining < length) {
954 _exception = 1;
955 //_env->ThrowNew(IAEClass, "length > script.length - offset");
956 goto exit;
957 }
958 script_base = (jbyte *)
959 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
960 script_ptr = script_base + offset;
961
Jason Samsbc948de2009-08-17 18:35:48 -0700962 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700963
Jack Palevich43702d82009-05-28 13:38:16 -0700964exit:
965 if (script_base) {
966 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
967 _exception ? JNI_ABORT: 0);
968 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700969}
970
971static jint
Shih-wei Liaoa914f342010-11-08 01:33:59 -0800972nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con, jstring resName)
Jason Samsd19f10d2009-05-22 14:03:28 -0700973{
Jason Samsd19f10d2009-05-22 14:03:28 -0700974 LOG_API("nScriptCCreate, con(%p)", con);
Shih-wei Liaoa914f342010-11-08 01:33:59 -0800975 const char* resNameUTF = _env->GetStringUTFChars(resName, NULL);
976 return (jint)rsScriptCCreate(con, resNameUTF);
Jason Samsd19f10d2009-05-22 14:03:28 -0700977}
978
979// ---------------------------------------------------------------------------
980
981static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700982nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700983{
Jason Sams54db59c2010-05-13 18:30:11 -0700984 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
985 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700986}
987
988static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700989nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700990{
Jason Sams54db59c2010-05-13 18:30:11 -0700991 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
992 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700993}
994
995static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700996nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700997{
Jason Sams54db59c2010-05-13 18:30:11 -0700998 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
999 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -07001000}
1001
1002static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001003nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -07001004{
Jason Sams54db59c2010-05-13 18:30:11 -07001005 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
1006 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -07001007}
1008
1009static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001010nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -07001011{
Jason Sams54db59c2010-05-13 18:30:11 -07001012 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
1013 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -07001014}
1015
1016static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001017nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -07001018{
Jason Sams54db59c2010-05-13 18:30:11 -07001019 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
1020 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -07001021}
1022
1023static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001024nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -07001025{
Jason Sams54db59c2010-05-13 18:30:11 -07001026 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -07001027 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -07001028}
1029
Jason Sams0011bcf2009-12-15 12:58:36 -08001030// ---------------------------------------------------------------------------
1031
1032static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001033nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001034{
Jason Sams0011bcf2009-12-15 12:58:36 -08001035 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1036 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
1037}
Jason Sams54c0ec12009-11-30 14:49:55 -08001038
Jason Sams68afd012009-12-17 16:55:08 -08001039static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001040nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001041{
Jason Sams68afd012009-12-17 16:55:08 -08001042 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1043 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1044}
1045
1046static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001047nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001048{
Jason Sams68afd012009-12-17 16:55:08 -08001049 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1050 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1051}
1052
Jason Samsd19f10d2009-05-22 14:03:28 -07001053// ---------------------------------------------------------------------------
1054
Jason Samsd19f10d2009-05-22 14:03:28 -07001055static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001056nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001057{
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001058 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1059 jint shaderLen = _env->GetStringUTFLength(shader);
1060 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1061 jint paramLen = _env->GetArrayLength(params);
1062
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001063 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001064
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001065 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001066 _env->ReleaseStringUTFChars(shader, shaderUTF);
1067 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1068 return ret;
1069}
1070
1071
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001072// ---------------------------------------------------------------------------
1073
Jason Sams0011bcf2009-12-15 12:58:36 -08001074static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001075nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001076{
Jason Sams0011bcf2009-12-15 12:58:36 -08001077 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1078 jint shaderLen = _env->GetStringUTFLength(shader);
1079 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1080 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001081
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001082 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001083
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001084 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001085 _env->ReleaseStringUTFChars(shader, shaderUTF);
1086 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1087 return ret;
1088}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001089
Jason Samsebfb4362009-09-23 13:57:02 -07001090// ---------------------------------------------------------------------------
1091
1092static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001093nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001094{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001095 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1096 con, pointSmooth, lineSmooth, pointSprite);
1097 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001098}
1099
1100static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001101nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001102{
Jason Samsebfb4362009-09-23 13:57:02 -07001103 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001104 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1105}
1106
1107static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001108nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001109{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001110 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1111 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001112}
1113
Jason Samsd19f10d2009-05-22 14:03:28 -07001114
1115// ---------------------------------------------------------------------------
1116
1117static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001118nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001119{
Jason Samsd19f10d2009-05-22 14:03:28 -07001120 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001121 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001122}
1123
1124static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001125nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001126{
Jason Sams54db59c2010-05-13 18:30:11 -07001127 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1128 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001129}
1130
1131static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001132nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001133{
Jason Samsd19f10d2009-05-22 14:03:28 -07001134 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001135 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001136}
1137
Jason Sams0826a6f2009-06-15 19:04:56 -07001138static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001139nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001140{
Jason Sams0826a6f2009-06-15 19:04:56 -07001141 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001142 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001143}
1144
Joe Onoratod7b37742009-08-09 22:57:44 -07001145static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001146nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001147{
Jason Samsebfb4362009-09-23 13:57:02 -07001148 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1149 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1150}
1151
Joe Onoratod7b37742009-08-09 22:57:44 -07001152
Jason Sams02fb2cb2009-05-28 15:37:57 -07001153// ---------------------------------------------------------------------------
1154
1155static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001156nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001157{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001158 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001159 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001160}
1161
1162static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001163nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001164{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001165 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001166 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001167}
1168
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001169static void
1170nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1171{
1172 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1173 rsSamplerSet2(con, (RsSamplerParam)p, v);
1174}
1175
Jason Sams02fb2cb2009-05-28 15:37:57 -07001176static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001177nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001178{
Jason Samsbba134c2009-06-22 15:49:21 -07001179 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001180 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001181}
1182
Jason Samsbba134c2009-06-22 15:49:21 -07001183// ---------------------------------------------------------------------------
1184
Jason Samsbba134c2009-06-22 15:49:21 -07001185static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001186nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001187{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001188 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1189 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1190 return id;
1191}
1192
1193static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001194nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001195{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001196 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1197 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001198}
1199
1200static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001201nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001202{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001203 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1204 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1205}
1206
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001207static void
1208nMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
1209{
1210 LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1211 rsMeshInitVertexAttribs(con, (RsMesh)mesh);
1212}
1213
1214
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001215static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001216nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001217{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001218 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1219 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001220 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001221 return vtxCount;
1222}
1223
1224static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001225nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001226{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001227 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1228 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001229 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001230 return idxCount;
1231}
1232
1233static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001234nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001235{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001236 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1237
1238 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001239 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001240
1241 for(jint i = 0; i < numVtxIDs; i ++) {
1242 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1243 }
1244
1245 free(allocs);
1246}
1247
1248static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001249nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001250{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001251 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1252
1253 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1254 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1255
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001256 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001257
1258 for(jint i = 0; i < numIndices; i ++) {
1259 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1260 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1261 }
1262
1263 free(allocs);
1264 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001265}
1266
1267// ---------------------------------------------------------------------------
1268
Jason Samsd19f10d2009-05-22 14:03:28 -07001269
Jason Sams94d8e90a2009-06-10 16:09:05 -07001270static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001271
1272static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001273{"_nInit", "()V", (void*)_nInit },
1274{"nInitElements", "(IIII)V", (void*)nInitElements },
Jason Samsea84a7c2009-09-04 14:42:41 -07001275
Jason Sams1c415172010-11-08 17:06:46 -08001276{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1277{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
1278{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
1279{"nContextGetUserMessage", "(I[I)V", (void*)nContextGetUserMessage },
1280{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1281{"nContextPeekMessage", "(I[IZ)I", (void*)nContextPeekMessage },
1282
1283{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1284{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001285
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001286
Jason Sams2e1872f2010-08-17 16:25:41 -07001287// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001288{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001289{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001290{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1291{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1292{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001293{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001294{"rsnContextDump", "(II)V", (void*)nContextDump },
1295{"rsnContextPause", "(I)V", (void*)nContextPause },
1296{"rsnContextResume", "(I)V", (void*)nContextResume },
1297{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001298{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001299{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001300
Jason Sams2e1872f2010-08-17 16:25:41 -07001301{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1302{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001303{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001304{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001305
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001306{"rsnFontCreateFromFile", "(ILjava/lang/String;II)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001307
Jason Sams2e1872f2010-08-17 16:25:41 -07001308{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001309{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001310{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001311{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001312
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001313{"rsnTypeCreate", "(IIIIIZZ)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001314{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001315
Jason Sams2e1872f2010-08-17 16:25:41 -07001316{"rsnAllocationCreateTyped", "(II)I", (void*)nAllocationCreateTyped },
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -07001317{"rsnAllocationUpdateFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationUpdateFromBitmap },
Jason Sams2e1872f2010-08-17 16:25:41 -07001318{"rsnAllocationCreateFromBitmap", "(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmap },
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -08001319{"rsnAllocationCubeCreateFromBitmap","(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams2e1872f2010-08-17 16:25:41 -07001320{"rsnAllocationCreateBitmapRef", "(IILandroid/graphics/Bitmap;)I", (void*)nAllocationCreateBitmapRef },
Jason Sams2e1872f2010-08-17 16:25:41 -07001321{"rsnAllocationCreateFromAssetStream","(IIZI)I", (void*)nAllocationCreateFromAssetStream },
1322{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
1323{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
1324{"rsnAllocationSubData1D", "(IIII[II)V", (void*)nAllocationSubData1D_i },
1325{"rsnAllocationSubData1D", "(IIII[SI)V", (void*)nAllocationSubData1D_s },
1326{"rsnAllocationSubData1D", "(IIII[BI)V", (void*)nAllocationSubData1D_b },
1327{"rsnAllocationSubData1D", "(IIII[FI)V", (void*)nAllocationSubData1D_f },
Jason Sams49bdaf02010-08-31 13:50:42 -07001328{"rsnAllocationSubElementData1D", "(IIII[BI)V", (void*)nAllocationSubElementData1D },
Jason Sams2e1872f2010-08-17 16:25:41 -07001329{"rsnAllocationSubData2D", "(IIIIII[II)V", (void*)nAllocationSubData2D_i },
1330{"rsnAllocationSubData2D", "(IIIIII[FI)V", (void*)nAllocationSubData2D_f },
1331{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1332{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001333{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001334{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1335{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001336
Jason Sams2e1872f2010-08-17 16:25:41 -07001337{"rsnAdapter1DBindAllocation", "(III)V", (void*)nAdapter1DBindAllocation },
1338{"rsnAdapter1DSetConstraint", "(IIII)V", (void*)nAdapter1DSetConstraint },
1339{"rsnAdapter1DData", "(II[I)V", (void*)nAdapter1DData_i },
1340{"rsnAdapter1DData", "(II[F)V", (void*)nAdapter1DData_f },
1341{"rsnAdapter1DSubData", "(IIII[I)V", (void*)nAdapter1DSubData_i },
1342{"rsnAdapter1DSubData", "(IIII[F)V", (void*)nAdapter1DSubData_f },
1343{"rsnAdapter1DCreate", "(I)I", (void*)nAdapter1DCreate },
Jason Sams22534172009-08-04 16:58:20 -07001344
Jason Sams2e1872f2010-08-17 16:25:41 -07001345{"rsnAdapter2DBindAllocation", "(III)V", (void*)nAdapter2DBindAllocation },
1346{"rsnAdapter2DSetConstraint", "(IIII)V", (void*)nAdapter2DSetConstraint },
1347{"rsnAdapter2DData", "(II[I)V", (void*)nAdapter2DData_i },
1348{"rsnAdapter2DData", "(II[F)V", (void*)nAdapter2DData_f },
1349{"rsnAdapter2DSubData", "(IIIIII[I)V", (void*)nAdapter2DSubData_i },
1350{"rsnAdapter2DSubData", "(IIIIII[F)V", (void*)nAdapter2DSubData_f },
1351{"rsnAdapter2DCreate", "(I)I", (void*)nAdapter2DCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001352
Jason Sams2e1872f2010-08-17 16:25:41 -07001353{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1354{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1355{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1356{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1357{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001358{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001359{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001360{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001361{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001362{"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001363
Jason Sams2e1872f2010-08-17 16:25:41 -07001364{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1365{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
Shih-wei Liaoa914f342010-11-08 01:33:59 -08001366{"rsnScriptCCreate", "(ILjava/lang/String;)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001367
Jason Sams2e1872f2010-08-17 16:25:41 -07001368{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1369{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1370{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1371{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1372{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1373{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1374{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001375
Jason Sams2e1872f2010-08-17 16:25:41 -07001376{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1377{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1378{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001379
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001380{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001381
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001382{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001383{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1384{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001385
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001386{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001387
Jason Sams2e1872f2010-08-17 16:25:41 -07001388{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001389{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001390{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1391{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1392{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001393
Jason Sams2e1872f2010-08-17 16:25:41 -07001394{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1395{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001396{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001397{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001398
Jason Sams2e1872f2010-08-17 16:25:41 -07001399{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1400{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1401{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001402{"rsnMeshInitVertexAttribs", "(II)V", (void*)nMeshInitVertexAttribs },
Jason Sams2e1872f2010-08-17 16:25:41 -07001403
1404{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1405{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001406{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001407{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001408
Jason Samsd19f10d2009-05-22 14:03:28 -07001409};
1410
1411static int registerFuncs(JNIEnv *_env)
1412{
1413 return android::AndroidRuntime::registerNativeMethods(
1414 _env, classPathName, methods, NELEM(methods));
1415}
1416
1417// ---------------------------------------------------------------------------
1418
1419jint JNI_OnLoad(JavaVM* vm, void* reserved)
1420{
1421 JNIEnv* env = NULL;
1422 jint result = -1;
1423
Jason Samsd19f10d2009-05-22 14:03:28 -07001424 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1425 LOGE("ERROR: GetEnv failed\n");
1426 goto bail;
1427 }
1428 assert(env != NULL);
1429
1430 if (registerFuncs(env) < 0) {
1431 LOGE("ERROR: MediaPlayer native registration failed\n");
1432 goto bail;
1433 }
1434
1435 /* success -- return valid version number */
1436 result = JNI_VERSION_1_4;
1437
1438bail:
1439 return result;
1440}
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001441