blob: dd848482f7187717c8820cedec0a9b8c72f8135c [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
360nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid, jintArray _dims, jintArray _dimValues)
Jason Samsd19f10d2009-05-22 14:03:28 -0700361{
Jason Sams3b9c52a2010-10-14 17:48:46 -0700362 int count = _env->GetArrayLength(_dims);
Jason Samsd19f10d2009-05-22 14:03:28 -0700363 LOG_API("nTypeCreate, con(%p)", con);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700364
365 jint *dimPtr = _env->GetIntArrayElements(_dims, NULL);
366 jint *dimValPtr = _env->GetIntArrayElements(_dimValues, NULL);
367
368 jint id = (jint)rsaTypeCreate(con, (RsElement)eid, count,
369 (RsDimension *)dimPtr, (uint32_t *)dimValPtr);
370
371 _env->ReleaseIntArrayElements(_dims, dimPtr, JNI_ABORT);
372 _env->ReleaseIntArrayElements(_dimValues, dimValPtr, JNI_ABORT);
373 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700374}
375
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700376static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700377nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700378{
379 // We are packing 6 items: mDimX; mDimY; mDimZ;
380 // mDimLOD; mDimFaces; mElement; into typeData
381 int elementCount = _env->GetArrayLength(_typeData);
382
383 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700384 LOG_API("nTypeCreate, con(%p)", con);
385
386 uint32_t typeData[6];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700387 rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700388
389 for(jint i = 0; i < elementCount; i ++) {
390 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
391 }
392}
393
Jason Samsd19f10d2009-05-22 14:03:28 -0700394// -----------------------------------
395
396static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700397nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint e)
Jason Samsd19f10d2009-05-22 14:03:28 -0700398{
Jason Samsd19f10d2009-05-22 14:03:28 -0700399 LOG_API("nAllocationCreateTyped, con(%p), e(%p)", con, (RsElement)e);
Jason Sams31a7e422010-10-26 13:09:17 -0700400 return (jint) rsaAllocationCreateTyped(con, (RsElement)e);
Jason Samsd19f10d2009-05-22 14:03:28 -0700401}
402
Jason Samsd19f10d2009-05-22 14:03:28 -0700403static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700404nAllocationUploadToTexture(JNIEnv *_env, jobject _this, RsContext con, jint a, jboolean genMip, jint mip)
Jason Samsd19f10d2009-05-22 14:03:28 -0700405{
Jason Samsc2908e62010-02-23 17:44:28 -0800406 LOG_API("nAllocationUploadToTexture, con(%p), a(%p), genMip(%i), mip(%i)", con, (RsAllocation)a, genMip, mip);
407 rsAllocationUploadToTexture(con, (RsAllocation)a, genMip, mip);
Jason Samsd19f10d2009-05-22 14:03:28 -0700408}
409
Jason Sams07ae4062009-08-27 20:23:34 -0700410static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700411nAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, RsContext con, jint a)
Jason Sams07ae4062009-08-27 20:23:34 -0700412{
Jason Sams07ae4062009-08-27 20:23:34 -0700413 LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
414 rsAllocationUploadToBufferObject(con, (RsAllocation)a);
415}
416
Jason Samsea84a7c2009-09-04 14:42:41 -0700417static RsElement SkBitmapToPredefined(SkBitmap::Config cfg)
Jason Samsfe08d992009-05-27 14:45:32 -0700418{
Jason Samsffe9f482009-06-01 17:45:53 -0700419 switch (cfg) {
420 case SkBitmap::kA8_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700421 return g_A_8;
Jason Samsffe9f482009-06-01 17:45:53 -0700422 case SkBitmap::kARGB_4444_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700423 return g_RGBA_4444;
Jason Samsffe9f482009-06-01 17:45:53 -0700424 case SkBitmap::kARGB_8888_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700425 return g_RGBA_8888;
Jason Samsffe9f482009-06-01 17:45:53 -0700426 case SkBitmap::kRGB_565_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700427 return g_RGB_565;
Jason Samsfe08d992009-05-27 14:45:32 -0700428
Jason Samsffe9f482009-06-01 17:45:53 -0700429 default:
430 break;
431 }
432 // If we don't have a conversion mark it as a user type.
433 LOGE("Unsupported bitmap type");
Jason Samsea84a7c2009-09-04 14:42:41 -0700434 return NULL;
Jason Samsfe08d992009-05-27 14:45:32 -0700435}
436
Jason Samsffe9f482009-06-01 17:45:53 -0700437static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700438nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
Jason Samsffe9f482009-06-01 17:45:53 -0700439{
Jason Samsffe9f482009-06-01 17:45:53 -0700440 SkBitmap const * nativeBitmap =
441 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
442 const SkBitmap& bitmap(*nativeBitmap);
443 SkBitmap::Config config = bitmap.getConfig();
444
Jason Samsea84a7c2009-09-04 14:42:41 -0700445 RsElement e = SkBitmapToPredefined(config);
446 if (e) {
Jason Samsffe9f482009-06-01 17:45:53 -0700447 bitmap.lockPixels();
448 const int w = bitmap.width();
449 const int h = bitmap.height();
450 const void* ptr = bitmap.getPixels();
Jason Sams31a7e422010-10-26 13:09:17 -0700451 jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Jason Samsffe9f482009-06-01 17:45:53 -0700452 bitmap.unlockPixels();
453 return id;
454 }
455 return 0;
456}
Jason Samsfe08d992009-05-27 14:45:32 -0700457
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700458static void
459nAllocationUpdateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
460{
461 SkBitmap const * nativeBitmap =
462 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
463 const SkBitmap& bitmap(*nativeBitmap);
464 SkBitmap::Config config = bitmap.getConfig();
465
466 RsElement e = SkBitmapToPredefined(config);
467 if (e) {
468 bitmap.lockPixels();
469 const void* ptr = bitmap.getPixels();
470 rsAllocationUpdateFromBitmap(con, (RsAllocation)alloc, e, ptr);
471 bitmap.unlockPixels();
472 }
473}
474
Jason Sams8a647432010-03-01 15:31:04 -0800475static void ReleaseBitmapCallback(void *bmp)
476{
477 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
478 nativeBitmap->unlockPixels();
479}
480
481static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700482nAllocationCreateBitmapRef(JNIEnv *_env, jobject _this, RsContext con, jint type, jobject jbitmap)
Jason Sams8a647432010-03-01 15:31:04 -0800483{
Jason Sams8a647432010-03-01 15:31:04 -0800484 SkBitmap * nativeBitmap =
485 (SkBitmap *)_env->GetIntField(jbitmap, gNativeBitmapID);
486
487
488 nativeBitmap->lockPixels();
489 void* ptr = nativeBitmap->getPixels();
490 jint id = (jint)rsAllocationCreateBitmapRef(con, (RsType)type, ptr, nativeBitmap, ReleaseBitmapCallback);
491 return id;
492}
493
Jason Samsb0ec1b42009-07-28 12:02:16 -0700494static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700495nAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jint native_asset)
Romain Guy650a3eb2009-08-31 14:06:43 -0700496{
Romain Guy650a3eb2009-08-31 14:06:43 -0700497 Asset* asset = reinterpret_cast<Asset*>(native_asset);
498 SkBitmap bitmap;
499 SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
500 &bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
501
502 SkBitmap::Config config = bitmap.getConfig();
503
Jason Samsea84a7c2009-09-04 14:42:41 -0700504 RsElement e = SkBitmapToPredefined(config);
Romain Guy650a3eb2009-08-31 14:06:43 -0700505
Jason Samsea84a7c2009-09-04 14:42:41 -0700506 if (e) {
Romain Guy650a3eb2009-08-31 14:06:43 -0700507 bitmap.lockPixels();
508 const int w = bitmap.width();
509 const int h = bitmap.height();
510 const void* ptr = bitmap.getPixels();
Jason Sams31a7e422010-10-26 13:09:17 -0700511 jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Romain Guy650a3eb2009-08-31 14:06:43 -0700512 bitmap.unlockPixels();
513 return id;
514 }
515 return 0;
516}
517
Jason Samsd19f10d2009-05-22 14:03:28 -0700518static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700519nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700520{
Jason Samsd19f10d2009-05-22 14:03:28 -0700521 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700522 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 -0700523 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700524 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700525 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
526}
527
528static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700529nAllocationSubData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700530{
Jason Sams768bc022009-09-21 19:41:04 -0700531 jint len = _env->GetArrayLength(data);
532 LOG_API("nAllocation1DSubData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
533 jshort *ptr = _env->GetShortArrayElements(data, NULL);
534 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
535 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
536}
537
538static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700539nAllocationSubData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700540{
Jason Sams768bc022009-09-21 19:41:04 -0700541 jint len = _env->GetArrayLength(data);
542 LOG_API("nAllocation1DSubData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
543 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
544 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
545 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
546}
547
548static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700549nAllocationSubData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700550{
Jason Samsd19f10d2009-05-22 14:03:28 -0700551 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700552 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 -0700553 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700554 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700555 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
556}
557
558static void
Jason Sams49bdaf02010-08-31 13:50:42 -0700559// native void rsnAllocationSubElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
560nAllocationSubElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint compIdx, jbyteArray data, int sizeBytes)
561{
562 jint len = _env->GetArrayLength(data);
563 LOG_API("nAllocationSubElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
564 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
565 rsAllocation1DSubElementData(con, (RsAllocation)alloc, offset, ptr, compIdx, sizeBytes);
566 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
567}
568
569static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700570nAllocationSubData2D_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 -0700571{
Jason Samsd19f10d2009-05-22 14:03:28 -0700572 jint len = _env->GetArrayLength(data);
573 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);
574 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700575 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700576 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
577}
578
579static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700580nAllocationSubData2D_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 -0700581{
Jason Samsd19f10d2009-05-22 14:03:28 -0700582 jint len = _env->GetArrayLength(data);
583 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);
584 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700585 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700586 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
587}
588
Jason Sams40a29e82009-08-10 14:55:26 -0700589static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700590nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700591{
Jason Sams40a29e82009-08-10 14:55:26 -0700592 jint len = _env->GetArrayLength(data);
593 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
594 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700595 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700596 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700597}
598
599static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700600nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700601{
Jason Sams40a29e82009-08-10 14:55:26 -0700602 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700603 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700604 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700605 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700606 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700607}
Jason Samsd19f10d2009-05-22 14:03:28 -0700608
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700609static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700610nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700611{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700612 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700613 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700614}
615
Jason Sams5edc6082010-10-05 13:32:49 -0700616static void
617nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
618{
619 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
620 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
621}
622
623static void
624nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
625{
626 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
627 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
628}
629
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700630// -----------------------------------
631
632static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700633nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700634{
635 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700636
637 Asset* asset = reinterpret_cast<Asset*>(native_asset);
638
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700639 jint id = (jint)rsaFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700640 return id;
641}
642
643static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700644nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700645{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700646 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700647 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700648 return numEntries;
649}
650
651static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700652nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700653{
654 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700655 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
656
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700657 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700658
659 for(jint i = 0; i < numEntries; i ++) {
660 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
661 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
662 }
663
664 free(fileEntries);
665}
666
667static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700668nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700669{
670 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700671 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700672 return id;
673}
Jason Samsd19f10d2009-05-22 14:03:28 -0700674
675// -----------------------------------
676
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700677static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700678nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jint fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700679{
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700680 const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
681
682 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
683 return id;
684}
685
686
687// -----------------------------------
688
Jason Samsd19f10d2009-05-22 14:03:28 -0700689static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700690nAdapter1DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700691{
Jason Samsd19f10d2009-05-22 14:03:28 -0700692 LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700693 rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700694}
695
696static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700697nAdapter1DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsd19f10d2009-05-22 14:03:28 -0700698{
Jason Samsd19f10d2009-05-22 14:03:28 -0700699 LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700700 rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
Jason Samsd19f10d2009-05-22 14:03:28 -0700701}
702
703static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700704nAdapter1DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700705{
Jason Samsd19f10d2009-05-22 14:03:28 -0700706 jint len = _env->GetArrayLength(data);
707 LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
708 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700709 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700710 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
711}
712
713static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700714nAdapter1DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700715{
Jason Samsd19f10d2009-05-22 14:03:28 -0700716 jint len = _env->GetArrayLength(data);
717 LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
718 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700719 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700720 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
721}
722
723static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700724nAdapter1DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700725{
Jason Samsd19f10d2009-05-22 14:03:28 -0700726 jint len = _env->GetArrayLength(data);
727 LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
728 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700729 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700730 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
731}
732
733static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700734nAdapter1DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700735{
Jason Samsd19f10d2009-05-22 14:03:28 -0700736 jint len = _env->GetArrayLength(data);
737 LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
738 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700739 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700740 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
741}
742
743static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700744nAdapter1DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700745{
Jason Samsd19f10d2009-05-22 14:03:28 -0700746 LOG_API("nAdapter1DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700747 return (jint)rsAdapter1DCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700748}
749
750// -----------------------------------
751
752static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700753nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700754{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700755 LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700756 rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700757}
758
759static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700760nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700761{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700762 LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700763 rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700764}
765
766static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700767nAdapter2DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700768{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700769 jint len = _env->GetArrayLength(data);
770 LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
771 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700772 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700773 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
774}
775
776static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700777nAdapter2DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700778{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700779 jint len = _env->GetArrayLength(data);
780 LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
781 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700782 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700783 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
784}
785
786static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700787nAdapter2DSubData_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 -0700788{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700789 jint len = _env->GetArrayLength(data);
790 LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
791 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
792 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700793 rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700794 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
795}
796
797static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700798nAdapter2DSubData_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 -0700799{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700800 jint len = _env->GetArrayLength(data);
801 LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
802 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
803 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700804 rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700805 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
806}
807
808static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700809nAdapter2DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700810{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700811 LOG_API("nAdapter2DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700812 return (jint)rsAdapter2DCreate(con);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700813}
814
815// -----------------------------------
816
817static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700818nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700819{
Jason Samsd19f10d2009-05-22 14:03:28 -0700820 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700821 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700822}
823
824static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700825nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700826{
Jason Samscfc04362010-09-14 14:59:03 -0700827 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700828 rsScriptSetVarI(con, (RsScript)script, slot, val);
829}
830
831static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700832nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
833{
834 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
835 rsScriptSetVarJ(con, (RsScript)script, slot, val);
836}
837
838static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700839nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700840{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700841 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700842 rsScriptSetVarF(con, (RsScript)script, slot, val);
843}
844
845static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700846nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
847{
848 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
849 rsScriptSetVarD(con, (RsScript)script, slot, val);
850}
851
852static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700853nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700854{
Jason Sams4d339932010-05-11 14:03:58 -0700855 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
856 jint len = _env->GetArrayLength(data);
857 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
858 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
859 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
860}
861
Jason Samsd19f10d2009-05-22 14:03:28 -0700862
863static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700864nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700865{
Jason Sams07ae4062009-08-27 20:23:34 -0700866 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700867
868 jint length = _env->GetArrayLength(timeZone);
869 jbyte* timeZone_ptr;
870 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
871
Jason Samsbc948de2009-08-17 18:35:48 -0700872 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700873
874 if (timeZone_ptr) {
875 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
876 }
877}
878
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700879static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700880nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700881{
Jason Samsbe2e8412009-09-16 15:04:38 -0700882 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
883 rsScriptInvoke(con, (RsScript)obj, slot);
884}
885
886static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700887nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700888{
Jason Sams4d339932010-05-11 14:03:58 -0700889 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
890 jint len = _env->GetArrayLength(data);
891 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
892 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
893 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
894}
895
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700896
Jason Sams22534172009-08-04 16:58:20 -0700897// -----------------------------------
898
899static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700900nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700901{
Jason Sams22534172009-08-04 16:58:20 -0700902 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700903 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700904}
905
Romain Guy584a3752009-07-30 18:45:01 -0700906static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700907nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700908 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700909{
Jason Samsd19f10d2009-05-22 14:03:28 -0700910 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700911 jint _exception = 0;
912 jint remaining;
913 jbyte* script_base = 0;
914 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700915 if (!scriptRef) {
916 _exception = 1;
917 //_env->ThrowNew(IAEClass, "script == null");
918 goto exit;
919 }
920 if (offset < 0) {
921 _exception = 1;
922 //_env->ThrowNew(IAEClass, "offset < 0");
923 goto exit;
924 }
925 if (length < 0) {
926 _exception = 1;
927 //_env->ThrowNew(IAEClass, "length < 0");
928 goto exit;
929 }
930 remaining = _env->GetArrayLength(scriptRef) - offset;
931 if (remaining < length) {
932 _exception = 1;
933 //_env->ThrowNew(IAEClass, "length > script.length - offset");
934 goto exit;
935 }
936 script_base = (jbyte *)
937 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
938 script_ptr = script_base + offset;
939
Jason Samsbc948de2009-08-17 18:35:48 -0700940 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700941
Jack Palevich43702d82009-05-28 13:38:16 -0700942exit:
943 if (script_base) {
944 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
945 _exception ? JNI_ABORT: 0);
946 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700947}
948
949static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700950nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700951{
Jason Samsd19f10d2009-05-22 14:03:28 -0700952 LOG_API("nScriptCCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700953 return (jint)rsScriptCCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700954}
955
956// ---------------------------------------------------------------------------
957
958static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700959nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700960{
Jason Sams54db59c2010-05-13 18:30:11 -0700961 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
962 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700963}
964
965static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700966nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700967{
Jason Sams54db59c2010-05-13 18:30:11 -0700968 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
969 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700970}
971
972static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700973nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700974{
Jason Sams54db59c2010-05-13 18:30:11 -0700975 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
976 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700977}
978
979static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700980nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700981{
Jason Sams54db59c2010-05-13 18:30:11 -0700982 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
983 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700984}
985
986static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700987nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -0700988{
Jason Sams54db59c2010-05-13 18:30:11 -0700989 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
990 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700991}
992
993static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700994nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700995{
Jason Sams54db59c2010-05-13 18:30:11 -0700996 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
997 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700998}
999
1000static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001001nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -07001002{
Jason Sams54db59c2010-05-13 18:30:11 -07001003 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -07001004 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -07001005}
1006
Jason Sams0011bcf2009-12-15 12:58:36 -08001007// ---------------------------------------------------------------------------
1008
1009static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001010nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001011{
Jason Sams0011bcf2009-12-15 12:58:36 -08001012 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1013 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
1014}
Jason Sams54c0ec12009-11-30 14:49:55 -08001015
Jason Sams68afd012009-12-17 16:55:08 -08001016static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001017nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001018{
Jason Sams68afd012009-12-17 16:55:08 -08001019 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1020 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1021}
1022
1023static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001024nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001025{
Jason Sams68afd012009-12-17 16:55:08 -08001026 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1027 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1028}
1029
Jason Samsd19f10d2009-05-22 14:03:28 -07001030// ---------------------------------------------------------------------------
1031
Jason Samsd19f10d2009-05-22 14:03:28 -07001032static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001033nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001034{
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001035 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1036 jint shaderLen = _env->GetStringUTFLength(shader);
1037 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1038 jint paramLen = _env->GetArrayLength(params);
1039
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001040 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001041
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001042 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001043 _env->ReleaseStringUTFChars(shader, shaderUTF);
1044 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1045 return ret;
1046}
1047
1048
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001049// ---------------------------------------------------------------------------
1050
Jason Sams0011bcf2009-12-15 12:58:36 -08001051static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001052nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001053{
Jason Sams0011bcf2009-12-15 12:58:36 -08001054 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1055 jint shaderLen = _env->GetStringUTFLength(shader);
1056 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1057 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001058
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001059 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001060
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001061 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001062 _env->ReleaseStringUTFChars(shader, shaderUTF);
1063 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1064 return ret;
1065}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001066
Jason Samsebfb4362009-09-23 13:57:02 -07001067// ---------------------------------------------------------------------------
1068
1069static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001070nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001071{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001072 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1073 con, pointSmooth, lineSmooth, pointSprite);
1074 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001075}
1076
1077static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001078nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001079{
Jason Samsebfb4362009-09-23 13:57:02 -07001080 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001081 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1082}
1083
1084static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001085nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001086{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001087 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1088 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001089}
1090
Jason Samsd19f10d2009-05-22 14:03:28 -07001091
1092// ---------------------------------------------------------------------------
1093
1094static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001095nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001096{
Jason Samsd19f10d2009-05-22 14:03:28 -07001097 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001098 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001099}
1100
1101static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001102nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001103{
Jason Sams54db59c2010-05-13 18:30:11 -07001104 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1105 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001106}
1107
1108static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001109nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001110{
Jason Samsd19f10d2009-05-22 14:03:28 -07001111 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001112 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001113}
1114
Jason Sams0826a6f2009-06-15 19:04:56 -07001115static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001116nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001117{
Jason Sams0826a6f2009-06-15 19:04:56 -07001118 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001119 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001120}
1121
Joe Onoratod7b37742009-08-09 22:57:44 -07001122static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001123nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001124{
Jason Samsebfb4362009-09-23 13:57:02 -07001125 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1126 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1127}
1128
Joe Onoratod7b37742009-08-09 22:57:44 -07001129
Jason Sams02fb2cb2009-05-28 15:37:57 -07001130// ---------------------------------------------------------------------------
1131
1132static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001133nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001134{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001135 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001136 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001137}
1138
1139static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001140nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001141{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001142 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001143 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001144}
1145
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001146static void
1147nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1148{
1149 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1150 rsSamplerSet2(con, (RsSamplerParam)p, v);
1151}
1152
Jason Sams02fb2cb2009-05-28 15:37:57 -07001153static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001154nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001155{
Jason Samsbba134c2009-06-22 15:49:21 -07001156 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001157 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001158}
1159
Jason Samsbba134c2009-06-22 15:49:21 -07001160// ---------------------------------------------------------------------------
1161
Jason Samsbba134c2009-06-22 15:49:21 -07001162static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001163nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001164{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001165 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1166 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1167 return id;
1168}
1169
1170static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001171nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001172{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001173 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1174 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001175}
1176
1177static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001178nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001179{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001180 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1181 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1182}
1183
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001184static void
1185nMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
1186{
1187 LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1188 rsMeshInitVertexAttribs(con, (RsMesh)mesh);
1189}
1190
1191
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001192static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001193nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001194{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001195 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1196 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001197 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001198 return vtxCount;
1199}
1200
1201static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001202nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001203{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001204 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1205 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001206 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001207 return idxCount;
1208}
1209
1210static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001211nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001212{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001213 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1214
1215 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001216 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001217
1218 for(jint i = 0; i < numVtxIDs; i ++) {
1219 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1220 }
1221
1222 free(allocs);
1223}
1224
1225static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001226nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001227{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001228 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1229
1230 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1231 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1232
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001233 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001234
1235 for(jint i = 0; i < numIndices; i ++) {
1236 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1237 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1238 }
1239
1240 free(allocs);
1241 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001242}
1243
1244// ---------------------------------------------------------------------------
1245
Jason Samsd19f10d2009-05-22 14:03:28 -07001246
Jason Sams94d8e90a2009-06-10 16:09:05 -07001247static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001248
1249static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001250{"_nInit", "()V", (void*)_nInit },
1251{"nInitElements", "(IIII)V", (void*)nInitElements },
Jason Samsea84a7c2009-09-04 14:42:41 -07001252
Jason Sams1c415172010-11-08 17:06:46 -08001253{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1254{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
1255{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
1256{"nContextGetUserMessage", "(I[I)V", (void*)nContextGetUserMessage },
1257{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1258{"nContextPeekMessage", "(I[IZ)I", (void*)nContextPeekMessage },
1259
1260{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1261{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001262
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001263
Jason Sams2e1872f2010-08-17 16:25:41 -07001264// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001265{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001266{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001267{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1268{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1269{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001270{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001271{"rsnContextDump", "(II)V", (void*)nContextDump },
1272{"rsnContextPause", "(I)V", (void*)nContextPause },
1273{"rsnContextResume", "(I)V", (void*)nContextResume },
1274{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001275{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001276{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001277
Jason Sams2e1872f2010-08-17 16:25:41 -07001278{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1279{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001280{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001281{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001282
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001283{"rsnFontCreateFromFile", "(ILjava/lang/String;II)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001284
Jason Sams2e1872f2010-08-17 16:25:41 -07001285{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001286{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001287{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001288{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001289
Jason Sams3b9c52a2010-10-14 17:48:46 -07001290{"rsnTypeCreate", "(II[I[I)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001291{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001292
Jason Sams2e1872f2010-08-17 16:25:41 -07001293{"rsnAllocationCreateTyped", "(II)I", (void*)nAllocationCreateTyped },
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -07001294{"rsnAllocationUpdateFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationUpdateFromBitmap },
Jason Sams2e1872f2010-08-17 16:25:41 -07001295{"rsnAllocationCreateFromBitmap", "(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmap },
1296{"rsnAllocationCreateBitmapRef", "(IILandroid/graphics/Bitmap;)I", (void*)nAllocationCreateBitmapRef },
Jason Sams2e1872f2010-08-17 16:25:41 -07001297{"rsnAllocationCreateFromAssetStream","(IIZI)I", (void*)nAllocationCreateFromAssetStream },
1298{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
1299{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
1300{"rsnAllocationSubData1D", "(IIII[II)V", (void*)nAllocationSubData1D_i },
1301{"rsnAllocationSubData1D", "(IIII[SI)V", (void*)nAllocationSubData1D_s },
1302{"rsnAllocationSubData1D", "(IIII[BI)V", (void*)nAllocationSubData1D_b },
1303{"rsnAllocationSubData1D", "(IIII[FI)V", (void*)nAllocationSubData1D_f },
Jason Sams49bdaf02010-08-31 13:50:42 -07001304{"rsnAllocationSubElementData1D", "(IIII[BI)V", (void*)nAllocationSubElementData1D },
Jason Sams2e1872f2010-08-17 16:25:41 -07001305{"rsnAllocationSubData2D", "(IIIIII[II)V", (void*)nAllocationSubData2D_i },
1306{"rsnAllocationSubData2D", "(IIIIII[FI)V", (void*)nAllocationSubData2D_f },
1307{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1308{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001309{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001310{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1311{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001312
Jason Sams2e1872f2010-08-17 16:25:41 -07001313{"rsnAdapter1DBindAllocation", "(III)V", (void*)nAdapter1DBindAllocation },
1314{"rsnAdapter1DSetConstraint", "(IIII)V", (void*)nAdapter1DSetConstraint },
1315{"rsnAdapter1DData", "(II[I)V", (void*)nAdapter1DData_i },
1316{"rsnAdapter1DData", "(II[F)V", (void*)nAdapter1DData_f },
1317{"rsnAdapter1DSubData", "(IIII[I)V", (void*)nAdapter1DSubData_i },
1318{"rsnAdapter1DSubData", "(IIII[F)V", (void*)nAdapter1DSubData_f },
1319{"rsnAdapter1DCreate", "(I)I", (void*)nAdapter1DCreate },
Jason Sams22534172009-08-04 16:58:20 -07001320
Jason Sams2e1872f2010-08-17 16:25:41 -07001321{"rsnAdapter2DBindAllocation", "(III)V", (void*)nAdapter2DBindAllocation },
1322{"rsnAdapter2DSetConstraint", "(IIII)V", (void*)nAdapter2DSetConstraint },
1323{"rsnAdapter2DData", "(II[I)V", (void*)nAdapter2DData_i },
1324{"rsnAdapter2DData", "(II[F)V", (void*)nAdapter2DData_f },
1325{"rsnAdapter2DSubData", "(IIIIII[I)V", (void*)nAdapter2DSubData_i },
1326{"rsnAdapter2DSubData", "(IIIIII[F)V", (void*)nAdapter2DSubData_f },
1327{"rsnAdapter2DCreate", "(I)I", (void*)nAdapter2DCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001328
Jason Sams2e1872f2010-08-17 16:25:41 -07001329{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1330{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1331{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1332{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1333{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001334{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001335{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001336{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001337{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Samsd19f10d2009-05-22 14:03:28 -07001338
Jason Sams2e1872f2010-08-17 16:25:41 -07001339{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1340{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
1341{"rsnScriptCCreate", "(I)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001342
Jason Sams2e1872f2010-08-17 16:25:41 -07001343{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1344{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1345{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1346{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1347{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1348{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1349{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001350
Jason Sams2e1872f2010-08-17 16:25:41 -07001351{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1352{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1353{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001354
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001355{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001356
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001357{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001358{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1359{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001360
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001361{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001362
Jason Sams2e1872f2010-08-17 16:25:41 -07001363{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001364{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001365{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1366{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1367{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001368
Jason Sams2e1872f2010-08-17 16:25:41 -07001369{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1370{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001371{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001372{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001373
Jason Sams2e1872f2010-08-17 16:25:41 -07001374{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1375{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1376{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001377{"rsnMeshInitVertexAttribs", "(II)V", (void*)nMeshInitVertexAttribs },
Jason Sams2e1872f2010-08-17 16:25:41 -07001378
1379{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1380{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001381{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001382{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001383
Jason Samsd19f10d2009-05-22 14:03:28 -07001384};
1385
1386static int registerFuncs(JNIEnv *_env)
1387{
1388 return android::AndroidRuntime::registerNativeMethods(
1389 _env, classPathName, methods, NELEM(methods));
1390}
1391
1392// ---------------------------------------------------------------------------
1393
1394jint JNI_OnLoad(JavaVM* vm, void* reserved)
1395{
1396 JNIEnv* env = NULL;
1397 jint result = -1;
1398
Jason Samsd19f10d2009-05-22 14:03:28 -07001399 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1400 LOGE("ERROR: GetEnv failed\n");
1401 goto bail;
1402 }
1403 assert(env != NULL);
1404
1405 if (registerFuncs(env) < 0) {
1406 LOGE("ERROR: MediaPlayer native registration failed\n");
1407 goto bail;
1408 }
1409
1410 /* success -- return valid version number */
1411 result = JNI_VERSION_1_4;
1412
1413bail:
1414 return result;
1415}
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001416