blob: b0faaccc657a7d47b58140002d329867ed2bd469 [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
Jason Sams64676f32009-07-08 18:01:53 -0700122static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700123nFileOpen(JNIEnv *_env, jobject _this, RsContext con, jbyteArray str)
Jason Sams64676f32009-07-08 18:01:53 -0700124{
Jason Sams64676f32009-07-08 18:01:53 -0700125 LOG_API("nFileOpen, con(%p)", con);
Jason Sams64676f32009-07-08 18:01:53 -0700126 jint len = _env->GetArrayLength(str);
127 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -0700128 jint ret = (jint)rsFileOpen(con, (const char *)cptr, len);
Jason Sams64676f32009-07-08 18:01:53 -0700129 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
130 return ret;
131}
132
Jason Sams3eaa338e2009-06-10 15:04:38 -0700133// ---------------------------------------------------------------------------
134
Jason Samsd19f10d2009-05-22 14:03:28 -0700135static jint
136nDeviceCreate(JNIEnv *_env, jobject _this)
137{
138 LOG_API("nDeviceCreate");
139 return (jint)rsDeviceCreate();
140}
141
142static void
143nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
144{
145 LOG_API("nDeviceDestroy");
146 return rsDeviceDestroy((RsDevice)dev);
147}
148
Jason Samsebfb4362009-09-23 13:57:02 -0700149static void
150nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
151{
152 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
153 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
154}
155
Jason Samsd19f10d2009-05-22 14:03:28 -0700156static jint
Jason Sams704ff642010-02-09 16:05:07 -0800157nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
Jason Samsd19f10d2009-05-22 14:03:28 -0700158{
159 LOG_API("nContextCreate");
Jason Sams704ff642010-02-09 16:05:07 -0800160 return (jint)rsContextCreate((RsDevice)dev, ver);
161}
162
163static jint
Jason Sams11c8af92010-10-13 15:31:10 -0700164nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
165 int colorMin, int colorPref,
166 int alphaMin, int alphaPref,
167 int depthMin, int depthPref,
168 int stencilMin, int stencilPref,
169 int samplesMin, int samplesPref, float samplesQ)
Jason Sams704ff642010-02-09 16:05:07 -0800170{
Jason Sams11c8af92010-10-13 15:31:10 -0700171 RsSurfaceConfig sc;
172 sc.alphaMin = alphaMin;
173 sc.alphaPref = alphaPref;
174 sc.colorMin = colorMin;
175 sc.colorPref = colorPref;
176 sc.depthMin = depthMin;
177 sc.depthPref = depthPref;
178 sc.samplesMin = samplesMin;
179 sc.samplesPref = samplesPref;
180 sc.samplesQ = samplesQ;
181
Jason Sams704ff642010-02-09 16:05:07 -0800182 LOG_API("nContextCreateGL");
Jason Sams11c8af92010-10-13 15:31:10 -0700183 return (jint)rsContextCreateGL((RsDevice)dev, ver, sc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700184}
185
186static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700187nContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800188{
Jason Sams7d787b42009-11-15 12:14:26 -0800189 LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
190 rsContextSetPriority(con, p);
191}
192
193
194
195static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700196nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800197{
Jason Sams3bc47d42009-11-12 15:10:25 -0800198 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800199
200 Surface * window = NULL;
201 if (wnd == NULL) {
202
203 } else {
Jim Milleree956052010-08-19 18:56:00 -0700204 window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800205 }
206
Jason Sams3bc47d42009-11-12 15:10:25 -0800207 rsContextSetSurface(con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800208}
209
210static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700211nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700212{
Jason Sams2e1872f2010-08-17 16:25:41 -0700213 LOG_API("nContextDestroy, con(%p)", con);
214 rsContextDestroy(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700215}
216
Jason Sams715333b2009-11-17 17:26:46 -0800217static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700218nContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800219{
Jason Sams715333b2009-11-17 17:26:46 -0800220 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
221 rsContextDump((RsContext)con, bits);
222}
Jason Samsd19f10d2009-05-22 14:03:28 -0700223
224static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700225nContextPause(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700226{
Jason Sams65e7aa52009-09-24 17:38:20 -0700227 LOG_API("nContextPause, con(%p)", con);
228 rsContextPause(con);
229}
230
231static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700232nContextResume(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700233{
Jason Sams65e7aa52009-09-24 17:38:20 -0700234 LOG_API("nContextResume, con(%p)", con);
235 rsContextResume(con);
236}
237
Jason Sams516c3192009-10-06 13:58:47 -0700238static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700239nContextGetMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data, jboolean wait)
Jason Sams516c3192009-10-06 13:58:47 -0700240{
Jason Sams516c3192009-10-06 13:58:47 -0700241 jint len = _env->GetArrayLength(data);
242 LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
243 jint *ptr = _env->GetIntArrayElements(data, NULL);
244 size_t receiveLen;
245 int id = rsContextGetMessage(con, ptr, &receiveLen, len * 4, wait);
246 if (!id && receiveLen) {
Jason Sams1d45c472010-08-25 14:31:48 -0700247 LOGV("message receive buffer too small. %i", receiveLen);
248 *ptr = (jint)receiveLen;
Jason Sams516c3192009-10-06 13:58:47 -0700249 }
250 _env->ReleaseIntArrayElements(data, ptr, 0);
251 return id;
252}
253
Jason Sams2e1872f2010-08-17 16:25:41 -0700254static void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700255{
Jason Sams516c3192009-10-06 13:58:47 -0700256 LOG_API("nContextInitToClient, con(%p)", con);
257 rsContextInitToClient(con);
258}
259
Jason Sams2e1872f2010-08-17 16:25:41 -0700260static void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700261{
Jason Sams516c3192009-10-06 13:58:47 -0700262 LOG_API("nContextDeinitToClient, con(%p)", con);
263 rsContextDeinitToClient(con);
264}
265
266
Jason Sams718cd1f2009-12-23 14:35:29 -0800267static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700268nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700269{
Jason Sams718cd1f2009-12-23 14:35:29 -0800270 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
271 return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700272}
273
274static jint
Jason Sams70d4e502010-09-02 17:35:23 -0700275nElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700276{
Jason Sams718cd1f2009-12-23 14:35:29 -0800277 int fieldCount = _env->GetArrayLength(_ids);
Jason Sams704ff642010-02-09 16:05:07 -0800278 LOG_API("nElementCreate2, con(%p)", con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800279
280 jint *ids = _env->GetIntArrayElements(_ids, NULL);
Jason Sams70d4e502010-09-02 17:35:23 -0700281 jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
Jason Sams718cd1f2009-12-23 14:35:29 -0800282 const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
283 size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
284
285 for (int ct=0; ct < fieldCount; ct++) {
286 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
287 nameArray[ct] = _env->GetStringUTFChars(s, NULL);
288 sizeArray[ct] = _env->GetStringUTFLength(s);
289 }
Jason Sams70d4e502010-09-02 17:35:23 -0700290 jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
Jason Sams718cd1f2009-12-23 14:35:29 -0800291 for (int ct=0; ct < fieldCount; ct++) {
292 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
293 _env->ReleaseStringUTFChars(s, nameArray[ct]);
294 }
295 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
Jason Sams70d4e502010-09-02 17:35:23 -0700296 _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
Jason Sams718cd1f2009-12-23 14:35:29 -0800297 free(nameArray);
298 free(sizeArray);
299 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700300}
301
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700302static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700303nElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700304{
305 int dataSize = _env->GetArrayLength(_elementData);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700306 LOG_API("nElementGetNativeData, con(%p)", con);
307
308 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
309 assert(dataSize == 5);
310
311 uint32_t elementData[5];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700312 rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700313
314 for(jint i = 0; i < dataSize; i ++) {
315 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
316 }
317}
318
319
320static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700321nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700322{
323 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700324 LOG_API("nElementGetSubElements, con(%p)", con);
325
326 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
327 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
328
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700329 rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700330
Jason Sams11c8af92010-10-13 15:31:10 -0700331 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700332 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
333 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
334 }
335
336 free(ids);
337 free(names);
338}
339
Jason Samsd19f10d2009-05-22 14:03:28 -0700340// -----------------------------------
341
Jason Sams3b9c52a2010-10-14 17:48:46 -0700342static int
343nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid, jintArray _dims, jintArray _dimValues)
Jason Samsd19f10d2009-05-22 14:03:28 -0700344{
Jason Sams3b9c52a2010-10-14 17:48:46 -0700345 int count = _env->GetArrayLength(_dims);
Jason Samsd19f10d2009-05-22 14:03:28 -0700346 LOG_API("nTypeCreate, con(%p)", con);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700347
348 jint *dimPtr = _env->GetIntArrayElements(_dims, NULL);
349 jint *dimValPtr = _env->GetIntArrayElements(_dimValues, NULL);
350
351 jint id = (jint)rsaTypeCreate(con, (RsElement)eid, count,
352 (RsDimension *)dimPtr, (uint32_t *)dimValPtr);
353
354 _env->ReleaseIntArrayElements(_dims, dimPtr, JNI_ABORT);
355 _env->ReleaseIntArrayElements(_dimValues, dimValPtr, JNI_ABORT);
356 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700357}
358
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700359static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700360nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700361{
362 // We are packing 6 items: mDimX; mDimY; mDimZ;
363 // mDimLOD; mDimFaces; mElement; into typeData
364 int elementCount = _env->GetArrayLength(_typeData);
365
366 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700367 LOG_API("nTypeCreate, con(%p)", con);
368
369 uint32_t typeData[6];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700370 rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700371
372 for(jint i = 0; i < elementCount; i ++) {
373 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
374 }
375}
376
Jason Samsd19f10d2009-05-22 14:03:28 -0700377// -----------------------------------
378
379static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700380nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint e)
Jason Samsd19f10d2009-05-22 14:03:28 -0700381{
Jason Samsd19f10d2009-05-22 14:03:28 -0700382 LOG_API("nAllocationCreateTyped, con(%p), e(%p)", con, (RsElement)e);
Jason Sams31a7e422010-10-26 13:09:17 -0700383 return (jint) rsaAllocationCreateTyped(con, (RsElement)e);
Jason Samsd19f10d2009-05-22 14:03:28 -0700384}
385
Jason Samsd19f10d2009-05-22 14:03:28 -0700386static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700387nAllocationUploadToTexture(JNIEnv *_env, jobject _this, RsContext con, jint a, jboolean genMip, jint mip)
Jason Samsd19f10d2009-05-22 14:03:28 -0700388{
Jason Samsc2908e62010-02-23 17:44:28 -0800389 LOG_API("nAllocationUploadToTexture, con(%p), a(%p), genMip(%i), mip(%i)", con, (RsAllocation)a, genMip, mip);
390 rsAllocationUploadToTexture(con, (RsAllocation)a, genMip, mip);
Jason Samsd19f10d2009-05-22 14:03:28 -0700391}
392
Jason Sams07ae4062009-08-27 20:23:34 -0700393static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700394nAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, RsContext con, jint a)
Jason Sams07ae4062009-08-27 20:23:34 -0700395{
Jason Sams07ae4062009-08-27 20:23:34 -0700396 LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
397 rsAllocationUploadToBufferObject(con, (RsAllocation)a);
398}
399
Jason Samsea84a7c2009-09-04 14:42:41 -0700400static RsElement SkBitmapToPredefined(SkBitmap::Config cfg)
Jason Samsfe08d992009-05-27 14:45:32 -0700401{
Jason Samsffe9f482009-06-01 17:45:53 -0700402 switch (cfg) {
403 case SkBitmap::kA8_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700404 return g_A_8;
Jason Samsffe9f482009-06-01 17:45:53 -0700405 case SkBitmap::kARGB_4444_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700406 return g_RGBA_4444;
Jason Samsffe9f482009-06-01 17:45:53 -0700407 case SkBitmap::kARGB_8888_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700408 return g_RGBA_8888;
Jason Samsffe9f482009-06-01 17:45:53 -0700409 case SkBitmap::kRGB_565_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700410 return g_RGB_565;
Jason Samsfe08d992009-05-27 14:45:32 -0700411
Jason Samsffe9f482009-06-01 17:45:53 -0700412 default:
413 break;
414 }
415 // If we don't have a conversion mark it as a user type.
416 LOGE("Unsupported bitmap type");
Jason Samsea84a7c2009-09-04 14:42:41 -0700417 return NULL;
Jason Samsfe08d992009-05-27 14:45:32 -0700418}
419
Jason Samsffe9f482009-06-01 17:45:53 -0700420static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700421nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
Jason Samsffe9f482009-06-01 17:45:53 -0700422{
Jason Samsffe9f482009-06-01 17:45:53 -0700423 SkBitmap const * nativeBitmap =
424 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
425 const SkBitmap& bitmap(*nativeBitmap);
426 SkBitmap::Config config = bitmap.getConfig();
427
Jason Samsea84a7c2009-09-04 14:42:41 -0700428 RsElement e = SkBitmapToPredefined(config);
429 if (e) {
Jason Samsffe9f482009-06-01 17:45:53 -0700430 bitmap.lockPixels();
431 const int w = bitmap.width();
432 const int h = bitmap.height();
433 const void* ptr = bitmap.getPixels();
Jason Sams31a7e422010-10-26 13:09:17 -0700434 jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Jason Samsffe9f482009-06-01 17:45:53 -0700435 bitmap.unlockPixels();
436 return id;
437 }
438 return 0;
439}
Jason Samsfe08d992009-05-27 14:45:32 -0700440
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700441static void
442nAllocationUpdateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
443{
444 SkBitmap const * nativeBitmap =
445 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
446 const SkBitmap& bitmap(*nativeBitmap);
447 SkBitmap::Config config = bitmap.getConfig();
448
449 RsElement e = SkBitmapToPredefined(config);
450 if (e) {
451 bitmap.lockPixels();
452 const void* ptr = bitmap.getPixels();
453 rsAllocationUpdateFromBitmap(con, (RsAllocation)alloc, e, ptr);
454 bitmap.unlockPixels();
455 }
456}
457
Jason Sams8a647432010-03-01 15:31:04 -0800458static void ReleaseBitmapCallback(void *bmp)
459{
460 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
461 nativeBitmap->unlockPixels();
462}
463
464static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700465nAllocationCreateBitmapRef(JNIEnv *_env, jobject _this, RsContext con, jint type, jobject jbitmap)
Jason Sams8a647432010-03-01 15:31:04 -0800466{
Jason Sams8a647432010-03-01 15:31:04 -0800467 SkBitmap * nativeBitmap =
468 (SkBitmap *)_env->GetIntField(jbitmap, gNativeBitmapID);
469
470
471 nativeBitmap->lockPixels();
472 void* ptr = nativeBitmap->getPixels();
473 jint id = (jint)rsAllocationCreateBitmapRef(con, (RsType)type, ptr, nativeBitmap, ReleaseBitmapCallback);
474 return id;
475}
476
Jason Samsb0ec1b42009-07-28 12:02:16 -0700477static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700478nAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jint native_asset)
Romain Guy650a3eb2009-08-31 14:06:43 -0700479{
Romain Guy650a3eb2009-08-31 14:06:43 -0700480 Asset* asset = reinterpret_cast<Asset*>(native_asset);
481 SkBitmap bitmap;
482 SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
483 &bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
484
485 SkBitmap::Config config = bitmap.getConfig();
486
Jason Samsea84a7c2009-09-04 14:42:41 -0700487 RsElement e = SkBitmapToPredefined(config);
Romain Guy650a3eb2009-08-31 14:06:43 -0700488
Jason Samsea84a7c2009-09-04 14:42:41 -0700489 if (e) {
Romain Guy650a3eb2009-08-31 14:06:43 -0700490 bitmap.lockPixels();
491 const int w = bitmap.width();
492 const int h = bitmap.height();
493 const void* ptr = bitmap.getPixels();
Jason Sams31a7e422010-10-26 13:09:17 -0700494 jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Romain Guy650a3eb2009-08-31 14:06:43 -0700495 bitmap.unlockPixels();
496 return id;
497 }
498 return 0;
499}
500
Jason Samsd19f10d2009-05-22 14:03:28 -0700501static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700502nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700503{
Jason Samsd19f10d2009-05-22 14:03:28 -0700504 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700505 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 -0700506 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700507 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700508 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
509}
510
511static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700512nAllocationSubData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700513{
Jason Sams768bc022009-09-21 19:41:04 -0700514 jint len = _env->GetArrayLength(data);
515 LOG_API("nAllocation1DSubData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
516 jshort *ptr = _env->GetShortArrayElements(data, NULL);
517 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
518 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
519}
520
521static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700522nAllocationSubData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700523{
Jason Sams768bc022009-09-21 19:41:04 -0700524 jint len = _env->GetArrayLength(data);
525 LOG_API("nAllocation1DSubData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
526 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
527 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
528 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
529}
530
531static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700532nAllocationSubData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700533{
Jason Samsd19f10d2009-05-22 14:03:28 -0700534 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700535 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 -0700536 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700537 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700538 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
539}
540
541static void
Jason Sams49bdaf02010-08-31 13:50:42 -0700542// native void rsnAllocationSubElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
543nAllocationSubElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint compIdx, jbyteArray data, int sizeBytes)
544{
545 jint len = _env->GetArrayLength(data);
546 LOG_API("nAllocationSubElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
547 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
548 rsAllocation1DSubElementData(con, (RsAllocation)alloc, offset, ptr, compIdx, sizeBytes);
549 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
550}
551
552static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700553nAllocationSubData2D_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 -0700554{
Jason Samsd19f10d2009-05-22 14:03:28 -0700555 jint len = _env->GetArrayLength(data);
556 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);
557 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700558 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700559 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
560}
561
562static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700563nAllocationSubData2D_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 -0700564{
Jason Samsd19f10d2009-05-22 14:03:28 -0700565 jint len = _env->GetArrayLength(data);
566 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);
567 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700568 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700569 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
570}
571
Jason Sams40a29e82009-08-10 14:55:26 -0700572static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700573nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700574{
Jason Sams40a29e82009-08-10 14:55:26 -0700575 jint len = _env->GetArrayLength(data);
576 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
577 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700578 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700579 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700580}
581
582static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700583nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700584{
Jason Sams40a29e82009-08-10 14:55:26 -0700585 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700586 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700587 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700588 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700589 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700590}
Jason Samsd19f10d2009-05-22 14:03:28 -0700591
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700592static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700593nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700594{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700595 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700596 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700597}
598
Jason Sams5edc6082010-10-05 13:32:49 -0700599static void
600nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
601{
602 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
603 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
604}
605
606static void
607nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
608{
609 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
610 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
611}
612
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700613// -----------------------------------
614
615static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700616nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700617{
618 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700619
620 Asset* asset = reinterpret_cast<Asset*>(native_asset);
621
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700622 jint id = (jint)rsaFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700623 return id;
624}
625
626static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700627nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700628{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700629 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700630 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700631 return numEntries;
632}
633
634static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700635nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700636{
637 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700638 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
639
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700640 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700641
642 for(jint i = 0; i < numEntries; i ++) {
643 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
644 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
645 }
646
647 free(fileEntries);
648}
649
650static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700651nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700652{
653 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700654 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700655 return id;
656}
Jason Samsd19f10d2009-05-22 14:03:28 -0700657
658// -----------------------------------
659
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700660static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700661nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jint fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700662{
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700663 const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
664
665 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
666 return id;
667}
668
669
670// -----------------------------------
671
Jason Samsd19f10d2009-05-22 14:03:28 -0700672static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700673nAdapter1DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700674{
Jason Samsd19f10d2009-05-22 14:03:28 -0700675 LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700676 rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700677}
678
679static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700680nAdapter1DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsd19f10d2009-05-22 14:03:28 -0700681{
Jason Samsd19f10d2009-05-22 14:03:28 -0700682 LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700683 rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
Jason Samsd19f10d2009-05-22 14:03:28 -0700684}
685
686static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700687nAdapter1DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700688{
Jason Samsd19f10d2009-05-22 14:03:28 -0700689 jint len = _env->GetArrayLength(data);
690 LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
691 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700692 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700693 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
694}
695
696static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700697nAdapter1DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700698{
Jason Samsd19f10d2009-05-22 14:03:28 -0700699 jint len = _env->GetArrayLength(data);
700 LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
701 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700702 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700703 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
704}
705
706static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700707nAdapter1DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700708{
Jason Samsd19f10d2009-05-22 14:03:28 -0700709 jint len = _env->GetArrayLength(data);
710 LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
711 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700712 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700713 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
714}
715
716static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700717nAdapter1DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700718{
Jason Samsd19f10d2009-05-22 14:03:28 -0700719 jint len = _env->GetArrayLength(data);
720 LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
721 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700722 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700723 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
724}
725
726static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700727nAdapter1DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700728{
Jason Samsd19f10d2009-05-22 14:03:28 -0700729 LOG_API("nAdapter1DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700730 return (jint)rsAdapter1DCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700731}
732
733// -----------------------------------
734
735static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700736nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700737{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700738 LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700739 rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700740}
741
742static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700743nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700744{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700745 LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700746 rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700747}
748
749static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700750nAdapter2DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700751{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700752 jint len = _env->GetArrayLength(data);
753 LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
754 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700755 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700756 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
757}
758
759static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700760nAdapter2DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700761{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700762 jint len = _env->GetArrayLength(data);
763 LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
764 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700765 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700766 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
767}
768
769static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700770nAdapter2DSubData_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 -0700771{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700772 jint len = _env->GetArrayLength(data);
773 LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
774 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
775 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700776 rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700777 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
778}
779
780static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700781nAdapter2DSubData_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 -0700782{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700783 jint len = _env->GetArrayLength(data);
784 LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
785 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
786 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700787 rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700788 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
789}
790
791static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700792nAdapter2DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700793{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700794 LOG_API("nAdapter2DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700795 return (jint)rsAdapter2DCreate(con);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700796}
797
798// -----------------------------------
799
800static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700801nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700802{
Jason Samsd19f10d2009-05-22 14:03:28 -0700803 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700804 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700805}
806
807static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700808nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700809{
Jason Samscfc04362010-09-14 14:59:03 -0700810 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700811 rsScriptSetVarI(con, (RsScript)script, slot, val);
812}
813
814static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700815nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
816{
817 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
818 rsScriptSetVarJ(con, (RsScript)script, slot, val);
819}
820
821static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700822nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700823{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700824 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700825 rsScriptSetVarF(con, (RsScript)script, slot, val);
826}
827
828static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700829nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
830{
831 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
832 rsScriptSetVarD(con, (RsScript)script, slot, val);
833}
834
835static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700836nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700837{
Jason Sams4d339932010-05-11 14:03:58 -0700838 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
839 jint len = _env->GetArrayLength(data);
840 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
841 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
842 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
843}
844
Jason Samsd19f10d2009-05-22 14:03:28 -0700845
846static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700847nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700848{
Jason Sams07ae4062009-08-27 20:23:34 -0700849 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700850
851 jint length = _env->GetArrayLength(timeZone);
852 jbyte* timeZone_ptr;
853 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
854
Jason Samsbc948de2009-08-17 18:35:48 -0700855 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700856
857 if (timeZone_ptr) {
858 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
859 }
860}
861
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700862static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700863nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700864{
Jason Samsbe2e8412009-09-16 15:04:38 -0700865 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
866 rsScriptInvoke(con, (RsScript)obj, slot);
867}
868
869static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700870nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700871{
Jason Sams4d339932010-05-11 14:03:58 -0700872 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
873 jint len = _env->GetArrayLength(data);
874 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
875 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
876 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
877}
878
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700879
Jason Sams22534172009-08-04 16:58:20 -0700880// -----------------------------------
881
882static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700883nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700884{
Jason Sams22534172009-08-04 16:58:20 -0700885 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700886 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700887}
888
Romain Guy584a3752009-07-30 18:45:01 -0700889static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700890nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700891 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700892{
Jason Samsd19f10d2009-05-22 14:03:28 -0700893 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700894 jint _exception = 0;
895 jint remaining;
896 jbyte* script_base = 0;
897 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700898 if (!scriptRef) {
899 _exception = 1;
900 //_env->ThrowNew(IAEClass, "script == null");
901 goto exit;
902 }
903 if (offset < 0) {
904 _exception = 1;
905 //_env->ThrowNew(IAEClass, "offset < 0");
906 goto exit;
907 }
908 if (length < 0) {
909 _exception = 1;
910 //_env->ThrowNew(IAEClass, "length < 0");
911 goto exit;
912 }
913 remaining = _env->GetArrayLength(scriptRef) - offset;
914 if (remaining < length) {
915 _exception = 1;
916 //_env->ThrowNew(IAEClass, "length > script.length - offset");
917 goto exit;
918 }
919 script_base = (jbyte *)
920 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
921 script_ptr = script_base + offset;
922
Jason Samsbc948de2009-08-17 18:35:48 -0700923 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700924
Jack Palevich43702d82009-05-28 13:38:16 -0700925exit:
926 if (script_base) {
927 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
928 _exception ? JNI_ABORT: 0);
929 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700930}
931
932static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700933nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700934{
Jason Samsd19f10d2009-05-22 14:03:28 -0700935 LOG_API("nScriptCCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700936 return (jint)rsScriptCCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700937}
938
939// ---------------------------------------------------------------------------
940
941static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700942nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700943{
Jason Sams54db59c2010-05-13 18:30:11 -0700944 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
945 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700946}
947
948static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700949nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700950{
Jason Sams54db59c2010-05-13 18:30:11 -0700951 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
952 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700953}
954
955static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700956nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700957{
Jason Sams54db59c2010-05-13 18:30:11 -0700958 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
959 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700960}
961
962static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700963nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700964{
Jason Sams54db59c2010-05-13 18:30:11 -0700965 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
966 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700967}
968
969static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700970nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -0700971{
Jason Sams54db59c2010-05-13 18:30:11 -0700972 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
973 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700974}
975
976static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700977nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700978{
Jason Sams54db59c2010-05-13 18:30:11 -0700979 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
980 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700981}
982
983static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700984nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700985{
Jason Sams54db59c2010-05-13 18:30:11 -0700986 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -0700987 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700988}
989
Jason Sams0011bcf2009-12-15 12:58:36 -0800990// ---------------------------------------------------------------------------
991
992static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700993nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -0800994{
Jason Sams0011bcf2009-12-15 12:58:36 -0800995 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
996 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
997}
Jason Sams54c0ec12009-11-30 14:49:55 -0800998
Jason Sams68afd012009-12-17 16:55:08 -0800999static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001000nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001001{
Jason Sams68afd012009-12-17 16:55:08 -08001002 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1003 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1004}
1005
1006static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001007nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001008{
Jason Sams68afd012009-12-17 16:55:08 -08001009 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1010 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1011}
1012
Jason Samsd19f10d2009-05-22 14:03:28 -07001013// ---------------------------------------------------------------------------
1014
Jason Samsd19f10d2009-05-22 14:03:28 -07001015static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001016nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001017{
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001018 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1019 jint shaderLen = _env->GetStringUTFLength(shader);
1020 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1021 jint paramLen = _env->GetArrayLength(params);
1022
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001023 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001024
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001025 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001026 _env->ReleaseStringUTFChars(shader, shaderUTF);
1027 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1028 return ret;
1029}
1030
1031
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001032// ---------------------------------------------------------------------------
1033
Jason Sams0011bcf2009-12-15 12:58:36 -08001034static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001035nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001036{
Jason Sams0011bcf2009-12-15 12:58:36 -08001037 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1038 jint shaderLen = _env->GetStringUTFLength(shader);
1039 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1040 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001041
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001042 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001043
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001044 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001045 _env->ReleaseStringUTFChars(shader, shaderUTF);
1046 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1047 return ret;
1048}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001049
Jason Samsebfb4362009-09-23 13:57:02 -07001050// ---------------------------------------------------------------------------
1051
1052static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001053nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001054{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001055 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1056 con, pointSmooth, lineSmooth, pointSprite);
1057 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001058}
1059
1060static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001061nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001062{
Jason Samsebfb4362009-09-23 13:57:02 -07001063 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001064 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1065}
1066
1067static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001068nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001069{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001070 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1071 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001072}
1073
Jason Samsd19f10d2009-05-22 14:03:28 -07001074
1075// ---------------------------------------------------------------------------
1076
1077static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001078nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001079{
Jason Samsd19f10d2009-05-22 14:03:28 -07001080 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001081 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001082}
1083
1084static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001085nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001086{
Jason Sams54db59c2010-05-13 18:30:11 -07001087 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1088 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001089}
1090
1091static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001092nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001093{
Jason Samsd19f10d2009-05-22 14:03:28 -07001094 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001095 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001096}
1097
Jason Sams0826a6f2009-06-15 19:04:56 -07001098static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001099nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001100{
Jason Sams0826a6f2009-06-15 19:04:56 -07001101 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001102 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001103}
1104
Joe Onoratod7b37742009-08-09 22:57:44 -07001105static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001106nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001107{
Jason Samsebfb4362009-09-23 13:57:02 -07001108 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1109 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1110}
1111
Joe Onoratod7b37742009-08-09 22:57:44 -07001112
Jason Sams02fb2cb2009-05-28 15:37:57 -07001113// ---------------------------------------------------------------------------
1114
1115static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001116nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001117{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001118 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001119 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001120}
1121
1122static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001123nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001124{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001125 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001126 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001127}
1128
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001129static void
1130nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1131{
1132 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1133 rsSamplerSet2(con, (RsSamplerParam)p, v);
1134}
1135
Jason Sams02fb2cb2009-05-28 15:37:57 -07001136static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001137nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001138{
Jason Samsbba134c2009-06-22 15:49:21 -07001139 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001140 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001141}
1142
Jason Samsbba134c2009-06-22 15:49:21 -07001143// ---------------------------------------------------------------------------
1144
Jason Samsbba134c2009-06-22 15:49:21 -07001145static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001146nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001147{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001148 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1149 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1150 return id;
1151}
1152
1153static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001154nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001155{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001156 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1157 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001158}
1159
1160static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001161nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001162{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001163 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1164 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1165}
1166
1167static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001168nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001169{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001170 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1171 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001172 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001173 return vtxCount;
1174}
1175
1176static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001177nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001178{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001179 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1180 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001181 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001182 return idxCount;
1183}
1184
1185static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001186nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001187{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001188 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1189
1190 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001191 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001192
1193 for(jint i = 0; i < numVtxIDs; i ++) {
1194 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1195 }
1196
1197 free(allocs);
1198}
1199
1200static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001201nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001202{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001203 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1204
1205 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1206 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1207
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001208 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001209
1210 for(jint i = 0; i < numIndices; i ++) {
1211 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1212 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1213 }
1214
1215 free(allocs);
1216 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001217}
1218
1219// ---------------------------------------------------------------------------
1220
Jason Samsd19f10d2009-05-22 14:03:28 -07001221
Jason Sams94d8e90a2009-06-10 16:09:05 -07001222static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001223
1224static JNINativeMethod methods[] = {
1225{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001226{"nInitElements", "(IIII)V", (void*)nInitElements },
1227
Jason Samsd19f10d2009-05-22 14:03:28 -07001228{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1229{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
Jason Samsebfb4362009-09-23 13:57:02 -07001230{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
Jason Sams2e1872f2010-08-17 16:25:41 -07001231{"nContextGetMessage", "(I[IZ)I", (void*)nContextGetMessage },
1232{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1233{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001234
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001235
Jason Sams2e1872f2010-08-17 16:25:41 -07001236// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001237{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001238{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001239{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1240{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1241{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001242{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001243{"rsnContextDump", "(II)V", (void*)nContextDump },
1244{"rsnContextPause", "(I)V", (void*)nContextPause },
1245{"rsnContextResume", "(I)V", (void*)nContextResume },
1246{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001247{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001248{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001249
Jason Sams2e1872f2010-08-17 16:25:41 -07001250{"rsnFileOpen", "(I[B)I", (void*)nFileOpen },
1251{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1252{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001253{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001254{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001255
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001256{"rsnFontCreateFromFile", "(ILjava/lang/String;II)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001257
Jason Sams2e1872f2010-08-17 16:25:41 -07001258{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001259{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001260{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001261{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001262
Jason Sams3b9c52a2010-10-14 17:48:46 -07001263{"rsnTypeCreate", "(II[I[I)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001264{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001265
Jason Sams2e1872f2010-08-17 16:25:41 -07001266{"rsnAllocationCreateTyped", "(II)I", (void*)nAllocationCreateTyped },
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -07001267{"rsnAllocationUpdateFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationUpdateFromBitmap },
Jason Sams2e1872f2010-08-17 16:25:41 -07001268{"rsnAllocationCreateFromBitmap", "(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmap },
1269{"rsnAllocationCreateBitmapRef", "(IILandroid/graphics/Bitmap;)I", (void*)nAllocationCreateBitmapRef },
Jason Sams2e1872f2010-08-17 16:25:41 -07001270{"rsnAllocationCreateFromAssetStream","(IIZI)I", (void*)nAllocationCreateFromAssetStream },
1271{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
1272{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
1273{"rsnAllocationSubData1D", "(IIII[II)V", (void*)nAllocationSubData1D_i },
1274{"rsnAllocationSubData1D", "(IIII[SI)V", (void*)nAllocationSubData1D_s },
1275{"rsnAllocationSubData1D", "(IIII[BI)V", (void*)nAllocationSubData1D_b },
1276{"rsnAllocationSubData1D", "(IIII[FI)V", (void*)nAllocationSubData1D_f },
Jason Sams49bdaf02010-08-31 13:50:42 -07001277{"rsnAllocationSubElementData1D", "(IIII[BI)V", (void*)nAllocationSubElementData1D },
Jason Sams2e1872f2010-08-17 16:25:41 -07001278{"rsnAllocationSubData2D", "(IIIIII[II)V", (void*)nAllocationSubData2D_i },
1279{"rsnAllocationSubData2D", "(IIIIII[FI)V", (void*)nAllocationSubData2D_f },
1280{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1281{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001282{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001283{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1284{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001285
Jason Sams2e1872f2010-08-17 16:25:41 -07001286{"rsnAdapter1DBindAllocation", "(III)V", (void*)nAdapter1DBindAllocation },
1287{"rsnAdapter1DSetConstraint", "(IIII)V", (void*)nAdapter1DSetConstraint },
1288{"rsnAdapter1DData", "(II[I)V", (void*)nAdapter1DData_i },
1289{"rsnAdapter1DData", "(II[F)V", (void*)nAdapter1DData_f },
1290{"rsnAdapter1DSubData", "(IIII[I)V", (void*)nAdapter1DSubData_i },
1291{"rsnAdapter1DSubData", "(IIII[F)V", (void*)nAdapter1DSubData_f },
1292{"rsnAdapter1DCreate", "(I)I", (void*)nAdapter1DCreate },
Jason Sams22534172009-08-04 16:58:20 -07001293
Jason Sams2e1872f2010-08-17 16:25:41 -07001294{"rsnAdapter2DBindAllocation", "(III)V", (void*)nAdapter2DBindAllocation },
1295{"rsnAdapter2DSetConstraint", "(IIII)V", (void*)nAdapter2DSetConstraint },
1296{"rsnAdapter2DData", "(II[I)V", (void*)nAdapter2DData_i },
1297{"rsnAdapter2DData", "(II[F)V", (void*)nAdapter2DData_f },
1298{"rsnAdapter2DSubData", "(IIIIII[I)V", (void*)nAdapter2DSubData_i },
1299{"rsnAdapter2DSubData", "(IIIIII[F)V", (void*)nAdapter2DSubData_f },
1300{"rsnAdapter2DCreate", "(I)I", (void*)nAdapter2DCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001301
Jason Sams2e1872f2010-08-17 16:25:41 -07001302{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1303{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1304{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1305{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1306{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001307{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001308{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001309{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001310{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Samsd19f10d2009-05-22 14:03:28 -07001311
Jason Sams2e1872f2010-08-17 16:25:41 -07001312{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1313{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
1314{"rsnScriptCCreate", "(I)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001315
Jason Sams2e1872f2010-08-17 16:25:41 -07001316{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1317{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1318{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1319{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1320{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1321{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1322{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001323
Jason Sams2e1872f2010-08-17 16:25:41 -07001324{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1325{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1326{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001327
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001328{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001329
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001330{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001331{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1332{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001333
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001334{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001335
Jason Sams2e1872f2010-08-17 16:25:41 -07001336{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001337{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001338{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1339{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1340{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001341
Jason Sams2e1872f2010-08-17 16:25:41 -07001342{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1343{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001344{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001345{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001346
Jason Sams2e1872f2010-08-17 16:25:41 -07001347{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1348{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1349{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
1350
1351{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1352{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001353{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001354{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001355
Jason Samsd19f10d2009-05-22 14:03:28 -07001356};
1357
1358static int registerFuncs(JNIEnv *_env)
1359{
1360 return android::AndroidRuntime::registerNativeMethods(
1361 _env, classPathName, methods, NELEM(methods));
1362}
1363
1364// ---------------------------------------------------------------------------
1365
1366jint JNI_OnLoad(JavaVM* vm, void* reserved)
1367{
1368 JNIEnv* env = NULL;
1369 jint result = -1;
1370
Jason Samsd19f10d2009-05-22 14:03:28 -07001371 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1372 LOGE("ERROR: GetEnv failed\n");
1373 goto bail;
1374 }
1375 assert(env != NULL);
1376
1377 if (registerFuncs(env) < 0) {
1378 LOGE("ERROR: MediaPlayer native registration failed\n");
1379 goto bail;
1380 }
1381
1382 /* success -- return valid version number */
1383 result = JNI_VERSION_1_4;
1384
1385bail:
1386 return result;
1387}
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001388