blob: 888845990ed658a11872991dd9c1acfedf8c6d87 [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
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800832nScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
833{
834 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
835 rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
836}
837
838static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700839nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
840{
841 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
842 rsScriptSetVarJ(con, (RsScript)script, slot, val);
843}
844
845static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700846nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700847{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700848 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700849 rsScriptSetVarF(con, (RsScript)script, slot, val);
850}
851
852static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700853nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
854{
855 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
856 rsScriptSetVarD(con, (RsScript)script, slot, val);
857}
858
859static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700860nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700861{
Jason Sams4d339932010-05-11 14:03:58 -0700862 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
863 jint len = _env->GetArrayLength(data);
864 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
865 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
866 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
867}
868
Jason Samsd19f10d2009-05-22 14:03:28 -0700869
870static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700871nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700872{
Jason Sams07ae4062009-08-27 20:23:34 -0700873 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700874
875 jint length = _env->GetArrayLength(timeZone);
876 jbyte* timeZone_ptr;
877 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
878
Jason Samsbc948de2009-08-17 18:35:48 -0700879 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700880
881 if (timeZone_ptr) {
882 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
883 }
884}
885
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700886static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700887nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700888{
Jason Samsbe2e8412009-09-16 15:04:38 -0700889 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
890 rsScriptInvoke(con, (RsScript)obj, slot);
891}
892
893static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700894nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700895{
Jason Sams4d339932010-05-11 14:03:58 -0700896 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
897 jint len = _env->GetArrayLength(data);
898 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
899 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
900 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
901}
902
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700903
Jason Sams22534172009-08-04 16:58:20 -0700904// -----------------------------------
905
906static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700907nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700908{
Jason Sams22534172009-08-04 16:58:20 -0700909 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700910 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700911}
912
Romain Guy584a3752009-07-30 18:45:01 -0700913static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700914nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700915 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700916{
Jason Samsd19f10d2009-05-22 14:03:28 -0700917 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700918 jint _exception = 0;
919 jint remaining;
920 jbyte* script_base = 0;
921 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700922 if (!scriptRef) {
923 _exception = 1;
924 //_env->ThrowNew(IAEClass, "script == null");
925 goto exit;
926 }
927 if (offset < 0) {
928 _exception = 1;
929 //_env->ThrowNew(IAEClass, "offset < 0");
930 goto exit;
931 }
932 if (length < 0) {
933 _exception = 1;
934 //_env->ThrowNew(IAEClass, "length < 0");
935 goto exit;
936 }
937 remaining = _env->GetArrayLength(scriptRef) - offset;
938 if (remaining < length) {
939 _exception = 1;
940 //_env->ThrowNew(IAEClass, "length > script.length - offset");
941 goto exit;
942 }
943 script_base = (jbyte *)
944 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
945 script_ptr = script_base + offset;
946
Jason Samsbc948de2009-08-17 18:35:48 -0700947 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700948
Jack Palevich43702d82009-05-28 13:38:16 -0700949exit:
950 if (script_base) {
951 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
952 _exception ? JNI_ABORT: 0);
953 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700954}
955
956static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700957nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700958{
Jason Samsd19f10d2009-05-22 14:03:28 -0700959 LOG_API("nScriptCCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700960 return (jint)rsScriptCCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700961}
962
963// ---------------------------------------------------------------------------
964
965static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700966nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700967{
Jason Sams54db59c2010-05-13 18:30:11 -0700968 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
969 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700970}
971
972static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700973nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700974{
Jason Sams54db59c2010-05-13 18:30:11 -0700975 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
976 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700977}
978
979static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700980nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700981{
Jason Sams54db59c2010-05-13 18:30:11 -0700982 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
983 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700984}
985
986static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700987nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700988{
Jason Sams54db59c2010-05-13 18:30:11 -0700989 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
990 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700991}
992
993static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700994nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -0700995{
Jason Sams54db59c2010-05-13 18:30:11 -0700996 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
997 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700998}
999
1000static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001001nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -07001002{
Jason Sams54db59c2010-05-13 18:30:11 -07001003 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
1004 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -07001005}
1006
1007static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001008nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -07001009{
Jason Sams54db59c2010-05-13 18:30:11 -07001010 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -07001011 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -07001012}
1013
Jason Sams0011bcf2009-12-15 12:58:36 -08001014// ---------------------------------------------------------------------------
1015
1016static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001017nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001018{
Jason Sams0011bcf2009-12-15 12:58:36 -08001019 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1020 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
1021}
Jason Sams54c0ec12009-11-30 14:49:55 -08001022
Jason Sams68afd012009-12-17 16:55:08 -08001023static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001024nProgramBindTexture(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("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1027 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1028}
1029
1030static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001031nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001032{
Jason Sams68afd012009-12-17 16:55:08 -08001033 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1034 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1035}
1036
Jason Samsd19f10d2009-05-22 14:03:28 -07001037// ---------------------------------------------------------------------------
1038
Jason Samsd19f10d2009-05-22 14:03:28 -07001039static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001040nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001041{
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001042 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1043 jint shaderLen = _env->GetStringUTFLength(shader);
1044 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1045 jint paramLen = _env->GetArrayLength(params);
1046
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001047 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001048
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001049 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001050 _env->ReleaseStringUTFChars(shader, shaderUTF);
1051 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1052 return ret;
1053}
1054
1055
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001056// ---------------------------------------------------------------------------
1057
Jason Sams0011bcf2009-12-15 12:58:36 -08001058static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001059nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001060{
Jason Sams0011bcf2009-12-15 12:58:36 -08001061 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1062 jint shaderLen = _env->GetStringUTFLength(shader);
1063 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1064 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001065
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001066 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001067
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001068 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001069 _env->ReleaseStringUTFChars(shader, shaderUTF);
1070 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1071 return ret;
1072}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001073
Jason Samsebfb4362009-09-23 13:57:02 -07001074// ---------------------------------------------------------------------------
1075
1076static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001077nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001078{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001079 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1080 con, pointSmooth, lineSmooth, pointSprite);
1081 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001082}
1083
1084static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001085nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001086{
Jason Samsebfb4362009-09-23 13:57:02 -07001087 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001088 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1089}
1090
1091static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001092nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001093{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001094 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1095 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001096}
1097
Jason Samsd19f10d2009-05-22 14:03:28 -07001098
1099// ---------------------------------------------------------------------------
1100
1101static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001102nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001103{
Jason Samsd19f10d2009-05-22 14:03:28 -07001104 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001105 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001106}
1107
1108static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001109nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001110{
Jason Sams54db59c2010-05-13 18:30:11 -07001111 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1112 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001113}
1114
1115static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001116nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001117{
Jason Samsd19f10d2009-05-22 14:03:28 -07001118 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001119 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001120}
1121
Jason Sams0826a6f2009-06-15 19:04:56 -07001122static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001123nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001124{
Jason Sams0826a6f2009-06-15 19:04:56 -07001125 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001126 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001127}
1128
Joe Onoratod7b37742009-08-09 22:57:44 -07001129static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001130nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001131{
Jason Samsebfb4362009-09-23 13:57:02 -07001132 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1133 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1134}
1135
Joe Onoratod7b37742009-08-09 22:57:44 -07001136
Jason Sams02fb2cb2009-05-28 15:37:57 -07001137// ---------------------------------------------------------------------------
1138
1139static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001140nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001141{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001142 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001143 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001144}
1145
1146static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001147nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001148{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001149 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001150 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001151}
1152
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001153static void
1154nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1155{
1156 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1157 rsSamplerSet2(con, (RsSamplerParam)p, v);
1158}
1159
Jason Sams02fb2cb2009-05-28 15:37:57 -07001160static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001161nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001162{
Jason Samsbba134c2009-06-22 15:49:21 -07001163 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001164 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001165}
1166
Jason Samsbba134c2009-06-22 15:49:21 -07001167// ---------------------------------------------------------------------------
1168
Jason Samsbba134c2009-06-22 15:49:21 -07001169static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001170nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001171{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001172 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1173 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1174 return id;
1175}
1176
1177static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001178nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001179{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001180 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1181 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001182}
1183
1184static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001185nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001186{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001187 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1188 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1189}
1190
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001191static void
1192nMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
1193{
1194 LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1195 rsMeshInitVertexAttribs(con, (RsMesh)mesh);
1196}
1197
1198
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001199static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001200nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001201{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001202 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1203 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001204 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001205 return vtxCount;
1206}
1207
1208static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001209nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001210{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001211 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1212 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001213 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001214 return idxCount;
1215}
1216
1217static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001218nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001219{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001220 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1221
1222 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001223 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001224
1225 for(jint i = 0; i < numVtxIDs; i ++) {
1226 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1227 }
1228
1229 free(allocs);
1230}
1231
1232static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001233nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001234{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001235 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1236
1237 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1238 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1239
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001240 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001241
1242 for(jint i = 0; i < numIndices; i ++) {
1243 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1244 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1245 }
1246
1247 free(allocs);
1248 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001249}
1250
1251// ---------------------------------------------------------------------------
1252
Jason Samsd19f10d2009-05-22 14:03:28 -07001253
Jason Sams94d8e90a2009-06-10 16:09:05 -07001254static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001255
1256static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001257{"_nInit", "()V", (void*)_nInit },
1258{"nInitElements", "(IIII)V", (void*)nInitElements },
Jason Samsea84a7c2009-09-04 14:42:41 -07001259
Jason Sams1c415172010-11-08 17:06:46 -08001260{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1261{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
1262{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
1263{"nContextGetUserMessage", "(I[I)V", (void*)nContextGetUserMessage },
1264{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1265{"nContextPeekMessage", "(I[IZ)I", (void*)nContextPeekMessage },
1266
1267{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1268{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001269
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001270
Jason Sams2e1872f2010-08-17 16:25:41 -07001271// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001272{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001273{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001274{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1275{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1276{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001277{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001278{"rsnContextDump", "(II)V", (void*)nContextDump },
1279{"rsnContextPause", "(I)V", (void*)nContextPause },
1280{"rsnContextResume", "(I)V", (void*)nContextResume },
1281{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001282{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001283{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001284
Jason Sams2e1872f2010-08-17 16:25:41 -07001285{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1286{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001287{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001288{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001289
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001290{"rsnFontCreateFromFile", "(ILjava/lang/String;II)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001291
Jason Sams2e1872f2010-08-17 16:25:41 -07001292{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001293{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001294{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001295{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001296
Jason Sams3b9c52a2010-10-14 17:48:46 -07001297{"rsnTypeCreate", "(II[I[I)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001298{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001299
Jason Sams2e1872f2010-08-17 16:25:41 -07001300{"rsnAllocationCreateTyped", "(II)I", (void*)nAllocationCreateTyped },
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -07001301{"rsnAllocationUpdateFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationUpdateFromBitmap },
Jason Sams2e1872f2010-08-17 16:25:41 -07001302{"rsnAllocationCreateFromBitmap", "(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmap },
1303{"rsnAllocationCreateBitmapRef", "(IILandroid/graphics/Bitmap;)I", (void*)nAllocationCreateBitmapRef },
Jason Sams2e1872f2010-08-17 16:25:41 -07001304{"rsnAllocationCreateFromAssetStream","(IIZI)I", (void*)nAllocationCreateFromAssetStream },
1305{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
1306{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
1307{"rsnAllocationSubData1D", "(IIII[II)V", (void*)nAllocationSubData1D_i },
1308{"rsnAllocationSubData1D", "(IIII[SI)V", (void*)nAllocationSubData1D_s },
1309{"rsnAllocationSubData1D", "(IIII[BI)V", (void*)nAllocationSubData1D_b },
1310{"rsnAllocationSubData1D", "(IIII[FI)V", (void*)nAllocationSubData1D_f },
Jason Sams49bdaf02010-08-31 13:50:42 -07001311{"rsnAllocationSubElementData1D", "(IIII[BI)V", (void*)nAllocationSubElementData1D },
Jason Sams2e1872f2010-08-17 16:25:41 -07001312{"rsnAllocationSubData2D", "(IIIIII[II)V", (void*)nAllocationSubData2D_i },
1313{"rsnAllocationSubData2D", "(IIIIII[FI)V", (void*)nAllocationSubData2D_f },
1314{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1315{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001316{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001317{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1318{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001319
Jason Sams2e1872f2010-08-17 16:25:41 -07001320{"rsnAdapter1DBindAllocation", "(III)V", (void*)nAdapter1DBindAllocation },
1321{"rsnAdapter1DSetConstraint", "(IIII)V", (void*)nAdapter1DSetConstraint },
1322{"rsnAdapter1DData", "(II[I)V", (void*)nAdapter1DData_i },
1323{"rsnAdapter1DData", "(II[F)V", (void*)nAdapter1DData_f },
1324{"rsnAdapter1DSubData", "(IIII[I)V", (void*)nAdapter1DSubData_i },
1325{"rsnAdapter1DSubData", "(IIII[F)V", (void*)nAdapter1DSubData_f },
1326{"rsnAdapter1DCreate", "(I)I", (void*)nAdapter1DCreate },
Jason Sams22534172009-08-04 16:58:20 -07001327
Jason Sams2e1872f2010-08-17 16:25:41 -07001328{"rsnAdapter2DBindAllocation", "(III)V", (void*)nAdapter2DBindAllocation },
1329{"rsnAdapter2DSetConstraint", "(IIII)V", (void*)nAdapter2DSetConstraint },
1330{"rsnAdapter2DData", "(II[I)V", (void*)nAdapter2DData_i },
1331{"rsnAdapter2DData", "(II[F)V", (void*)nAdapter2DData_f },
1332{"rsnAdapter2DSubData", "(IIIIII[I)V", (void*)nAdapter2DSubData_i },
1333{"rsnAdapter2DSubData", "(IIIIII[F)V", (void*)nAdapter2DSubData_f },
1334{"rsnAdapter2DCreate", "(I)I", (void*)nAdapter2DCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001335
Jason Sams2e1872f2010-08-17 16:25:41 -07001336{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1337{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1338{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1339{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1340{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001341{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001342{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001343{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001344{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001345{"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001346
Jason Sams2e1872f2010-08-17 16:25:41 -07001347{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1348{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
1349{"rsnScriptCCreate", "(I)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001350
Jason Sams2e1872f2010-08-17 16:25:41 -07001351{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1352{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1353{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1354{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1355{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1356{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1357{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001358
Jason Sams2e1872f2010-08-17 16:25:41 -07001359{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1360{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1361{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001362
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001363{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001364
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001365{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001366{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1367{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001368
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001369{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001370
Jason Sams2e1872f2010-08-17 16:25:41 -07001371{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001372{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001373{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1374{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1375{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001376
Jason Sams2e1872f2010-08-17 16:25:41 -07001377{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1378{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001379{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001380{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001381
Jason Sams2e1872f2010-08-17 16:25:41 -07001382{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1383{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1384{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001385{"rsnMeshInitVertexAttribs", "(II)V", (void*)nMeshInitVertexAttribs },
Jason Sams2e1872f2010-08-17 16:25:41 -07001386
1387{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1388{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001389{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001390{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001391
Jason Samsd19f10d2009-05-22 14:03:28 -07001392};
1393
1394static int registerFuncs(JNIEnv *_env)
1395{
1396 return android::AndroidRuntime::registerNativeMethods(
1397 _env, classPathName, methods, NELEM(methods));
1398}
1399
1400// ---------------------------------------------------------------------------
1401
1402jint JNI_OnLoad(JavaVM* vm, void* reserved)
1403{
1404 JNIEnv* env = NULL;
1405 jint result = -1;
1406
Jason Samsd19f10d2009-05-22 14:03:28 -07001407 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1408 LOGE("ERROR: GetEnv failed\n");
1409 goto bail;
1410 }
1411 assert(env != NULL);
1412
1413 if (registerFuncs(env) < 0) {
1414 LOGE("ERROR: MediaPlayer native registration failed\n");
1415 goto bail;
1416 }
1417
1418 /* success -- return valid version number */
1419 result = JNI_VERSION_1_4;
1420
1421bail:
1422 return result;
1423}
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001424