blob: ce2a40c24de8b5446a4a78a118009bdac90ca75f [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;
107 rsGetName(con, (void *)obj, &name);
108 return _env->NewStringUTF(name);
109}
110
Jason Sams7ce033d2009-08-18 14:14:24 -0700111static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700112nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Jason Sams7ce033d2009-08-18 14:14:24 -0700113{
Jason Sams7ce033d2009-08-18 14:14:24 -0700114 LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
115 rsObjDestroy(con, (void *)obj);
116}
117
Jason Sams3eaa338e2009-06-10 15:04:38 -0700118
Jason Sams64676f32009-07-08 18:01:53 -0700119static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700120nFileOpen(JNIEnv *_env, jobject _this, RsContext con, jbyteArray str)
Jason Sams64676f32009-07-08 18:01:53 -0700121{
Jason Sams64676f32009-07-08 18:01:53 -0700122 LOG_API("nFileOpen, con(%p)", con);
Jason Sams64676f32009-07-08 18:01:53 -0700123 jint len = _env->GetArrayLength(str);
124 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -0700125 jint ret = (jint)rsFileOpen(con, (const char *)cptr, len);
Jason Sams64676f32009-07-08 18:01:53 -0700126 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
127 return ret;
128}
129
Jason Sams3eaa338e2009-06-10 15:04:38 -0700130// ---------------------------------------------------------------------------
131
Jason Samsd19f10d2009-05-22 14:03:28 -0700132static jint
133nDeviceCreate(JNIEnv *_env, jobject _this)
134{
135 LOG_API("nDeviceCreate");
136 return (jint)rsDeviceCreate();
137}
138
139static void
140nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
141{
142 LOG_API("nDeviceDestroy");
143 return rsDeviceDestroy((RsDevice)dev);
144}
145
Jason Samsebfb4362009-09-23 13:57:02 -0700146static void
147nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
148{
149 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
150 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
151}
152
Jason Samsd19f10d2009-05-22 14:03:28 -0700153static jint
Jason Sams704ff642010-02-09 16:05:07 -0800154nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
Jason Samsd19f10d2009-05-22 14:03:28 -0700155{
156 LOG_API("nContextCreate");
Jason Sams704ff642010-02-09 16:05:07 -0800157 return (jint)rsContextCreate((RsDevice)dev, ver);
158}
159
160static jint
Jason Sams11c8af92010-10-13 15:31:10 -0700161nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
162 int colorMin, int colorPref,
163 int alphaMin, int alphaPref,
164 int depthMin, int depthPref,
165 int stencilMin, int stencilPref,
166 int samplesMin, int samplesPref, float samplesQ)
Jason Sams704ff642010-02-09 16:05:07 -0800167{
Jason Sams11c8af92010-10-13 15:31:10 -0700168 RsSurfaceConfig sc;
169 sc.alphaMin = alphaMin;
170 sc.alphaPref = alphaPref;
171 sc.colorMin = colorMin;
172 sc.colorPref = colorPref;
173 sc.depthMin = depthMin;
174 sc.depthPref = depthPref;
175 sc.samplesMin = samplesMin;
176 sc.samplesPref = samplesPref;
177 sc.samplesQ = samplesQ;
178
Jason Sams704ff642010-02-09 16:05:07 -0800179 LOG_API("nContextCreateGL");
Jason Sams11c8af92010-10-13 15:31:10 -0700180 return (jint)rsContextCreateGL((RsDevice)dev, ver, sc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700181}
182
183static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700184nContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800185{
Jason Sams7d787b42009-11-15 12:14:26 -0800186 LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
187 rsContextSetPriority(con, p);
188}
189
190
191
192static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700193nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800194{
Jason Sams3bc47d42009-11-12 15:10:25 -0800195 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800196
197 Surface * window = NULL;
198 if (wnd == NULL) {
199
200 } else {
Jim Milleree956052010-08-19 18:56:00 -0700201 window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800202 }
203
Jason Sams3bc47d42009-11-12 15:10:25 -0800204 rsContextSetSurface(con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800205}
206
207static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700208nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700209{
Jason Sams2e1872f2010-08-17 16:25:41 -0700210 LOG_API("nContextDestroy, con(%p)", con);
211 rsContextDestroy(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700212}
213
Jason Sams715333b2009-11-17 17:26:46 -0800214static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700215nContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800216{
Jason Sams715333b2009-11-17 17:26:46 -0800217 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
218 rsContextDump((RsContext)con, bits);
219}
Jason Samsd19f10d2009-05-22 14:03:28 -0700220
221static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700222nContextPause(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700223{
Jason Sams65e7aa52009-09-24 17:38:20 -0700224 LOG_API("nContextPause, con(%p)", con);
225 rsContextPause(con);
226}
227
228static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700229nContextResume(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700230{
Jason Sams65e7aa52009-09-24 17:38:20 -0700231 LOG_API("nContextResume, con(%p)", con);
232 rsContextResume(con);
233}
234
Jason Sams516c3192009-10-06 13:58:47 -0700235static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700236nContextGetMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data, jboolean wait)
Jason Sams516c3192009-10-06 13:58:47 -0700237{
Jason Sams516c3192009-10-06 13:58:47 -0700238 jint len = _env->GetArrayLength(data);
239 LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
240 jint *ptr = _env->GetIntArrayElements(data, NULL);
241 size_t receiveLen;
242 int id = rsContextGetMessage(con, ptr, &receiveLen, len * 4, wait);
243 if (!id && receiveLen) {
Jason Sams1d45c472010-08-25 14:31:48 -0700244 LOGV("message receive buffer too small. %i", receiveLen);
245 *ptr = (jint)receiveLen;
Jason Sams516c3192009-10-06 13:58:47 -0700246 }
247 _env->ReleaseIntArrayElements(data, ptr, 0);
248 return id;
249}
250
Jason Sams2e1872f2010-08-17 16:25:41 -0700251static void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700252{
Jason Sams516c3192009-10-06 13:58:47 -0700253 LOG_API("nContextInitToClient, con(%p)", con);
254 rsContextInitToClient(con);
255}
256
Jason Sams2e1872f2010-08-17 16:25:41 -0700257static void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700258{
Jason Sams516c3192009-10-06 13:58:47 -0700259 LOG_API("nContextDeinitToClient, con(%p)", con);
260 rsContextDeinitToClient(con);
261}
262
263
Jason Sams718cd1f2009-12-23 14:35:29 -0800264static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700265nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700266{
Jason Sams718cd1f2009-12-23 14:35:29 -0800267 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
268 return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700269}
270
271static jint
Jason Sams70d4e502010-09-02 17:35:23 -0700272nElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700273{
Jason Sams718cd1f2009-12-23 14:35:29 -0800274 int fieldCount = _env->GetArrayLength(_ids);
Jason Sams704ff642010-02-09 16:05:07 -0800275 LOG_API("nElementCreate2, con(%p)", con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800276
277 jint *ids = _env->GetIntArrayElements(_ids, NULL);
Jason Sams70d4e502010-09-02 17:35:23 -0700278 jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
Jason Sams718cd1f2009-12-23 14:35:29 -0800279 const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
280 size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
281
282 for (int ct=0; ct < fieldCount; ct++) {
283 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
284 nameArray[ct] = _env->GetStringUTFChars(s, NULL);
285 sizeArray[ct] = _env->GetStringUTFLength(s);
286 }
Jason Sams70d4e502010-09-02 17:35:23 -0700287 jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
Jason Sams718cd1f2009-12-23 14:35:29 -0800288 for (int ct=0; ct < fieldCount; ct++) {
289 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
290 _env->ReleaseStringUTFChars(s, nameArray[ct]);
291 }
292 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
Jason Sams70d4e502010-09-02 17:35:23 -0700293 _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
Jason Sams718cd1f2009-12-23 14:35:29 -0800294 free(nameArray);
295 free(sizeArray);
296 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700297}
298
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700299static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700300nElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700301{
302 int dataSize = _env->GetArrayLength(_elementData);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700303 LOG_API("nElementGetNativeData, con(%p)", con);
304
305 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
306 assert(dataSize == 5);
307
308 uint32_t elementData[5];
309 rsElementGetNativeData(con, (RsElement)id, elementData, dataSize);
310
311 for(jint i = 0; i < dataSize; i ++) {
312 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
313 }
314}
315
316
317static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700318nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700319{
320 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700321 LOG_API("nElementGetSubElements, con(%p)", con);
322
323 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
324 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
325
326 rsElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
327
Jason Sams11c8af92010-10-13 15:31:10 -0700328 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700329 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
330 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
331 }
332
333 free(ids);
334 free(names);
335}
336
Jason Samsd19f10d2009-05-22 14:03:28 -0700337// -----------------------------------
338
339static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700340nTypeBegin(JNIEnv *_env, jobject _this, RsContext con, jint eID)
Jason Samsd19f10d2009-05-22 14:03:28 -0700341{
Jason Samsd19f10d2009-05-22 14:03:28 -0700342 LOG_API("nTypeBegin, con(%p) e(%p)", con, (RsElement)eID);
Jason Samsbc948de2009-08-17 18:35:48 -0700343 rsTypeBegin(con, (RsElement)eID);
Jason Samsd19f10d2009-05-22 14:03:28 -0700344}
345
346static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700347nTypeAdd(JNIEnv *_env, jobject _this, RsContext con, jint dim, jint val)
Jason Samsd19f10d2009-05-22 14:03:28 -0700348{
Jason Samsd19f10d2009-05-22 14:03:28 -0700349 LOG_API("nTypeAdd, con(%p) dim(%i), val(%i)", con, dim, val);
Jason Samsbc948de2009-08-17 18:35:48 -0700350 rsTypeAdd(con, (RsDimension)dim, val);
Jason Samsd19f10d2009-05-22 14:03:28 -0700351}
352
353static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700354nTypeCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700355{
Jason Samsd19f10d2009-05-22 14:03:28 -0700356 LOG_API("nTypeCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700357 return (jint)rsTypeCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700358}
359
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700360static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700361nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700362{
363 // We are packing 6 items: mDimX; mDimY; mDimZ;
364 // mDimLOD; mDimFaces; mElement; into typeData
365 int elementCount = _env->GetArrayLength(_typeData);
366
367 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700368 LOG_API("nTypeCreate, con(%p)", con);
369
370 uint32_t typeData[6];
371 rsTypeGetNativeData(con, (RsType)id, typeData, 6);
372
373 for(jint i = 0; i < elementCount; i ++) {
374 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
375 }
376}
377
Jason Samsd19f10d2009-05-22 14:03:28 -0700378// -----------------------------------
379
380static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700381nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint e)
Jason Samsd19f10d2009-05-22 14:03:28 -0700382{
Jason Samsd19f10d2009-05-22 14:03:28 -0700383 LOG_API("nAllocationCreateTyped, con(%p), e(%p)", con, (RsElement)e);
Jason Samsbc948de2009-08-17 18:35:48 -0700384 return (jint) rsAllocationCreateTyped(con, (RsElement)e);
Jason Samsd19f10d2009-05-22 14:03:28 -0700385}
386
Jason Samsd19f10d2009-05-22 14:03:28 -0700387static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700388nAllocationUploadToTexture(JNIEnv *_env, jobject _this, RsContext con, jint a, jboolean genMip, jint mip)
Jason Samsd19f10d2009-05-22 14:03:28 -0700389{
Jason Samsc2908e62010-02-23 17:44:28 -0800390 LOG_API("nAllocationUploadToTexture, con(%p), a(%p), genMip(%i), mip(%i)", con, (RsAllocation)a, genMip, mip);
391 rsAllocationUploadToTexture(con, (RsAllocation)a, genMip, mip);
Jason Samsd19f10d2009-05-22 14:03:28 -0700392}
393
Jason Sams07ae4062009-08-27 20:23:34 -0700394static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700395nAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, RsContext con, jint a)
Jason Sams07ae4062009-08-27 20:23:34 -0700396{
Jason Sams07ae4062009-08-27 20:23:34 -0700397 LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
398 rsAllocationUploadToBufferObject(con, (RsAllocation)a);
399}
400
Jason Samsea84a7c2009-09-04 14:42:41 -0700401static RsElement SkBitmapToPredefined(SkBitmap::Config cfg)
Jason Samsfe08d992009-05-27 14:45:32 -0700402{
Jason Samsffe9f482009-06-01 17:45:53 -0700403 switch (cfg) {
404 case SkBitmap::kA8_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700405 return g_A_8;
Jason Samsffe9f482009-06-01 17:45:53 -0700406 case SkBitmap::kARGB_4444_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700407 return g_RGBA_4444;
Jason Samsffe9f482009-06-01 17:45:53 -0700408 case SkBitmap::kARGB_8888_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700409 return g_RGBA_8888;
Jason Samsffe9f482009-06-01 17:45:53 -0700410 case SkBitmap::kRGB_565_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700411 return g_RGB_565;
Jason Samsfe08d992009-05-27 14:45:32 -0700412
Jason Samsffe9f482009-06-01 17:45:53 -0700413 default:
414 break;
415 }
416 // If we don't have a conversion mark it as a user type.
417 LOGE("Unsupported bitmap type");
Jason Samsea84a7c2009-09-04 14:42:41 -0700418 return NULL;
Jason Samsfe08d992009-05-27 14:45:32 -0700419}
420
Jason Samsffe9f482009-06-01 17:45:53 -0700421static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700422nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
Jason Samsffe9f482009-06-01 17:45:53 -0700423{
Jason Samsffe9f482009-06-01 17:45:53 -0700424 SkBitmap const * nativeBitmap =
425 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
426 const SkBitmap& bitmap(*nativeBitmap);
427 SkBitmap::Config config = bitmap.getConfig();
428
Jason Samsea84a7c2009-09-04 14:42:41 -0700429 RsElement e = SkBitmapToPredefined(config);
430 if (e) {
Jason Samsffe9f482009-06-01 17:45:53 -0700431 bitmap.lockPixels();
432 const int w = bitmap.width();
433 const int h = bitmap.height();
434 const void* ptr = bitmap.getPixels();
Jason Samsea84a7c2009-09-04 14:42:41 -0700435 jint id = (jint)rsAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Jason Samsffe9f482009-06-01 17:45:53 -0700436 bitmap.unlockPixels();
437 return id;
438 }
439 return 0;
440}
Jason Samsfe08d992009-05-27 14:45:32 -0700441
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700442static void
443nAllocationUpdateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
444{
445 SkBitmap const * nativeBitmap =
446 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
447 const SkBitmap& bitmap(*nativeBitmap);
448 SkBitmap::Config config = bitmap.getConfig();
449
450 RsElement e = SkBitmapToPredefined(config);
451 if (e) {
452 bitmap.lockPixels();
453 const void* ptr = bitmap.getPixels();
454 rsAllocationUpdateFromBitmap(con, (RsAllocation)alloc, e, ptr);
455 bitmap.unlockPixels();
456 }
457}
458
Jason Sams8a647432010-03-01 15:31:04 -0800459static void ReleaseBitmapCallback(void *bmp)
460{
461 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
462 nativeBitmap->unlockPixels();
463}
464
465static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700466nAllocationCreateBitmapRef(JNIEnv *_env, jobject _this, RsContext con, jint type, jobject jbitmap)
Jason Sams8a647432010-03-01 15:31:04 -0800467{
Jason Sams8a647432010-03-01 15:31:04 -0800468 SkBitmap * nativeBitmap =
469 (SkBitmap *)_env->GetIntField(jbitmap, gNativeBitmapID);
470
471
472 nativeBitmap->lockPixels();
473 void* ptr = nativeBitmap->getPixels();
474 jint id = (jint)rsAllocationCreateBitmapRef(con, (RsType)type, ptr, nativeBitmap, ReleaseBitmapCallback);
475 return id;
476}
477
Jason Samsb0ec1b42009-07-28 12:02:16 -0700478static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700479nAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jint native_asset)
Romain Guy650a3eb2009-08-31 14:06:43 -0700480{
Romain Guy650a3eb2009-08-31 14:06:43 -0700481 Asset* asset = reinterpret_cast<Asset*>(native_asset);
482 SkBitmap bitmap;
483 SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
484 &bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
485
486 SkBitmap::Config config = bitmap.getConfig();
487
Jason Samsea84a7c2009-09-04 14:42:41 -0700488 RsElement e = SkBitmapToPredefined(config);
Romain Guy650a3eb2009-08-31 14:06:43 -0700489
Jason Samsea84a7c2009-09-04 14:42:41 -0700490 if (e) {
Romain Guy650a3eb2009-08-31 14:06:43 -0700491 bitmap.lockPixels();
492 const int w = bitmap.width();
493 const int h = bitmap.height();
494 const void* ptr = bitmap.getPixels();
Jason Samsea84a7c2009-09-04 14:42:41 -0700495 jint id = (jint)rsAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Romain Guy650a3eb2009-08-31 14:06:43 -0700496 bitmap.unlockPixels();
497 return id;
498 }
499 return 0;
500}
501
Jason Samsd19f10d2009-05-22 14:03:28 -0700502static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700503nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700504{
Jason Samsd19f10d2009-05-22 14:03:28 -0700505 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700506 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 -0700507 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700508 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700509 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
510}
511
512static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700513nAllocationSubData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700514{
Jason Sams768bc022009-09-21 19:41:04 -0700515 jint len = _env->GetArrayLength(data);
516 LOG_API("nAllocation1DSubData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
517 jshort *ptr = _env->GetShortArrayElements(data, NULL);
518 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
519 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
520}
521
522static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700523nAllocationSubData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700524{
Jason Sams768bc022009-09-21 19:41:04 -0700525 jint len = _env->GetArrayLength(data);
526 LOG_API("nAllocation1DSubData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
527 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
528 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
529 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
530}
531
532static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700533nAllocationSubData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700534{
Jason Samsd19f10d2009-05-22 14:03:28 -0700535 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700536 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 -0700537 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700538 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700539 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
540}
541
542static void
Jason Sams49bdaf02010-08-31 13:50:42 -0700543// native void rsnAllocationSubElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
544nAllocationSubElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint compIdx, jbyteArray data, int sizeBytes)
545{
546 jint len = _env->GetArrayLength(data);
547 LOG_API("nAllocationSubElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
548 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
549 rsAllocation1DSubElementData(con, (RsAllocation)alloc, offset, ptr, compIdx, sizeBytes);
550 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
551}
552
553static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700554nAllocationSubData2D_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 -0700555{
Jason Samsd19f10d2009-05-22 14:03:28 -0700556 jint len = _env->GetArrayLength(data);
557 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);
558 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700559 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700560 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
561}
562
563static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700564nAllocationSubData2D_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 -0700565{
Jason Samsd19f10d2009-05-22 14:03:28 -0700566 jint len = _env->GetArrayLength(data);
567 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);
568 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700569 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700570 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
571}
572
Jason Sams40a29e82009-08-10 14:55:26 -0700573static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700574nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700575{
Jason Sams40a29e82009-08-10 14:55:26 -0700576 jint len = _env->GetArrayLength(data);
577 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
578 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700579 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700580 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700581}
582
583static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700584nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700585{
Jason Sams40a29e82009-08-10 14:55:26 -0700586 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700587 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700588 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700589 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700590 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700591}
Jason Samsd19f10d2009-05-22 14:03:28 -0700592
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700593static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700594nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700595{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700596 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
597 return (jint) rsAllocationGetType(con, (RsAllocation)a);
598}
599
Jason Sams5edc6082010-10-05 13:32:49 -0700600static void
601nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
602{
603 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
604 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
605}
606
607static void
608nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
609{
610 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
611 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
612}
613
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700614// -----------------------------------
615
616static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700617nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700618{
619 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700620
621 Asset* asset = reinterpret_cast<Asset*>(native_asset);
622
623 jint id = (jint)rsFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
624 return id;
625}
626
627static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700628nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700629{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700630 int32_t numEntries = 0;
631 rsFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700632 return numEntries;
633}
634
635static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700636nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700637{
638 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700639 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
640
641 rsFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
642
643 for(jint i = 0; i < numEntries; i ++) {
644 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
645 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
646 }
647
648 free(fileEntries);
649}
650
651static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700652nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700653{
654 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700655 jint id = (jint)rsFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
656 return id;
657}
Jason Samsd19f10d2009-05-22 14:03:28 -0700658
659// -----------------------------------
660
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700661static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700662nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jint fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700663{
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700664 const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
665
666 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
667 return id;
668}
669
670
671// -----------------------------------
672
Jason Samsd19f10d2009-05-22 14:03:28 -0700673static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700674nAdapter1DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700675{
Jason Samsd19f10d2009-05-22 14:03:28 -0700676 LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700677 rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700678}
679
680static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700681nAdapter1DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsd19f10d2009-05-22 14:03:28 -0700682{
Jason Samsd19f10d2009-05-22 14:03:28 -0700683 LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700684 rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
Jason Samsd19f10d2009-05-22 14:03:28 -0700685}
686
687static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700688nAdapter1DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700689{
Jason Samsd19f10d2009-05-22 14:03:28 -0700690 jint len = _env->GetArrayLength(data);
691 LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
692 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700693 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700694 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
695}
696
697static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700698nAdapter1DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700699{
Jason Samsd19f10d2009-05-22 14:03:28 -0700700 jint len = _env->GetArrayLength(data);
701 LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
702 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700703 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700704 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
705}
706
707static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700708nAdapter1DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700709{
Jason Samsd19f10d2009-05-22 14:03:28 -0700710 jint len = _env->GetArrayLength(data);
711 LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
712 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700713 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700714 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
715}
716
717static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700718nAdapter1DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700719{
Jason Samsd19f10d2009-05-22 14:03:28 -0700720 jint len = _env->GetArrayLength(data);
721 LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
722 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700723 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700724 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
725}
726
727static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700728nAdapter1DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700729{
Jason Samsd19f10d2009-05-22 14:03:28 -0700730 LOG_API("nAdapter1DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700731 return (jint)rsAdapter1DCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700732}
733
734// -----------------------------------
735
736static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700737nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700738{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700739 LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700740 rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700741}
742
743static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700744nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700745{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700746 LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700747 rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700748}
749
750static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700751nAdapter2DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700752{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700753 jint len = _env->GetArrayLength(data);
754 LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
755 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700756 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700757 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
758}
759
760static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700761nAdapter2DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700762{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700763 jint len = _env->GetArrayLength(data);
764 LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
765 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700766 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700767 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
768}
769
770static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700771nAdapter2DSubData_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 -0700772{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700773 jint len = _env->GetArrayLength(data);
774 LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
775 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
776 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700777 rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700778 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
779}
780
781static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700782nAdapter2DSubData_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 -0700783{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700784 jint len = _env->GetArrayLength(data);
785 LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
786 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
787 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700788 rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700789 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
790}
791
792static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700793nAdapter2DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700794{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700795 LOG_API("nAdapter2DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700796 return (jint)rsAdapter2DCreate(con);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700797}
798
799// -----------------------------------
800
801static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700802nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700803{
Jason Samsd19f10d2009-05-22 14:03:28 -0700804 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700805 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700806}
807
808static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700809nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700810{
Jason Samscfc04362010-09-14 14:59:03 -0700811 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700812 rsScriptSetVarI(con, (RsScript)script, slot, val);
813}
814
815static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700816nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
817{
818 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
819 rsScriptSetVarJ(con, (RsScript)script, slot, val);
820}
821
822static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700823nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700824{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700825 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700826 rsScriptSetVarF(con, (RsScript)script, slot, val);
827}
828
829static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700830nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
831{
832 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
833 rsScriptSetVarD(con, (RsScript)script, slot, val);
834}
835
836static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700837nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700838{
Jason Sams4d339932010-05-11 14:03:58 -0700839 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
840 jint len = _env->GetArrayLength(data);
841 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
842 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
843 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
844}
845
Jason Samsd19f10d2009-05-22 14:03:28 -0700846
847static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700848nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700849{
Jason Sams07ae4062009-08-27 20:23:34 -0700850 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700851
852 jint length = _env->GetArrayLength(timeZone);
853 jbyte* timeZone_ptr;
854 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
855
Jason Samsbc948de2009-08-17 18:35:48 -0700856 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700857
858 if (timeZone_ptr) {
859 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
860 }
861}
862
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700863static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700864nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700865{
Jason Samsbe2e8412009-09-16 15:04:38 -0700866 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
867 rsScriptInvoke(con, (RsScript)obj, slot);
868}
869
870static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700871nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700872{
Jason Sams4d339932010-05-11 14:03:58 -0700873 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
874 jint len = _env->GetArrayLength(data);
875 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
876 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
877 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
878}
879
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700880
Jason Sams22534172009-08-04 16:58:20 -0700881// -----------------------------------
882
883static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700884nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700885{
Jason Sams22534172009-08-04 16:58:20 -0700886 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700887 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700888}
889
Romain Guy584a3752009-07-30 18:45:01 -0700890static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700891nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700892 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700893{
Jason Samsd19f10d2009-05-22 14:03:28 -0700894 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700895 jint _exception = 0;
896 jint remaining;
897 jbyte* script_base = 0;
898 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700899 if (!scriptRef) {
900 _exception = 1;
901 //_env->ThrowNew(IAEClass, "script == null");
902 goto exit;
903 }
904 if (offset < 0) {
905 _exception = 1;
906 //_env->ThrowNew(IAEClass, "offset < 0");
907 goto exit;
908 }
909 if (length < 0) {
910 _exception = 1;
911 //_env->ThrowNew(IAEClass, "length < 0");
912 goto exit;
913 }
914 remaining = _env->GetArrayLength(scriptRef) - offset;
915 if (remaining < length) {
916 _exception = 1;
917 //_env->ThrowNew(IAEClass, "length > script.length - offset");
918 goto exit;
919 }
920 script_base = (jbyte *)
921 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
922 script_ptr = script_base + offset;
923
Jason Samsbc948de2009-08-17 18:35:48 -0700924 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700925
Jack Palevich43702d82009-05-28 13:38:16 -0700926exit:
927 if (script_base) {
928 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
929 _exception ? JNI_ABORT: 0);
930 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700931}
932
933static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700934nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700935{
Jason Samsd19f10d2009-05-22 14:03:28 -0700936 LOG_API("nScriptCCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700937 return (jint)rsScriptCCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700938}
939
940// ---------------------------------------------------------------------------
941
942static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700943nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700944{
Jason Sams54db59c2010-05-13 18:30:11 -0700945 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
946 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700947}
948
949static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700950nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700951{
Jason Sams54db59c2010-05-13 18:30:11 -0700952 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
953 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700954}
955
956static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700957nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700958{
Jason Sams54db59c2010-05-13 18:30:11 -0700959 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
960 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700961}
962
963static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700964nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700965{
Jason Sams54db59c2010-05-13 18:30:11 -0700966 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
967 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700968}
969
970static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700971nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -0700972{
Jason Sams54db59c2010-05-13 18:30:11 -0700973 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
974 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700975}
976
977static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700978nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700979{
Jason Sams54db59c2010-05-13 18:30:11 -0700980 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
981 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700982}
983
984static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700985nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700986{
Jason Sams54db59c2010-05-13 18:30:11 -0700987 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -0700988 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700989}
990
Jason Sams0011bcf2009-12-15 12:58:36 -0800991// ---------------------------------------------------------------------------
992
993static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700994nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -0800995{
Jason Sams0011bcf2009-12-15 12:58:36 -0800996 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
997 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
998}
Jason Sams54c0ec12009-11-30 14:49:55 -0800999
Jason Sams68afd012009-12-17 16:55:08 -08001000static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001001nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001002{
Jason Sams68afd012009-12-17 16:55:08 -08001003 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1004 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1005}
1006
1007static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001008nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001009{
Jason Sams68afd012009-12-17 16:55:08 -08001010 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1011 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1012}
1013
Jason Samsd19f10d2009-05-22 14:03:28 -07001014// ---------------------------------------------------------------------------
1015
Jason Samsd19f10d2009-05-22 14:03:28 -07001016static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001017nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001018{
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001019 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1020 jint shaderLen = _env->GetStringUTFLength(shader);
1021 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1022 jint paramLen = _env->GetArrayLength(params);
1023
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001024 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001025
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001026 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001027 _env->ReleaseStringUTFChars(shader, shaderUTF);
1028 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1029 return ret;
1030}
1031
1032
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001033// ---------------------------------------------------------------------------
1034
Jason Sams0011bcf2009-12-15 12:58:36 -08001035static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001036nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001037{
Jason Sams0011bcf2009-12-15 12:58:36 -08001038 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1039 jint shaderLen = _env->GetStringUTFLength(shader);
1040 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1041 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001042
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001043 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001044
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001045 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001046 _env->ReleaseStringUTFChars(shader, shaderUTF);
1047 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1048 return ret;
1049}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001050
Jason Samsebfb4362009-09-23 13:57:02 -07001051// ---------------------------------------------------------------------------
1052
1053static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001054nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001055{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001056 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1057 con, pointSmooth, lineSmooth, pointSprite);
1058 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001059}
1060
1061static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001062nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001063{
Jason Samsebfb4362009-09-23 13:57:02 -07001064 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001065 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1066}
1067
1068static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001069nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001070{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001071 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1072 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001073}
1074
Jason Samsd19f10d2009-05-22 14:03:28 -07001075
1076// ---------------------------------------------------------------------------
1077
1078static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001079nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001080{
Jason Samsd19f10d2009-05-22 14:03:28 -07001081 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001082 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001083}
1084
1085static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001086nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001087{
Jason Sams54db59c2010-05-13 18:30:11 -07001088 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1089 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001090}
1091
1092static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001093nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001094{
Jason Samsd19f10d2009-05-22 14:03:28 -07001095 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001096 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001097}
1098
Jason Sams0826a6f2009-06-15 19:04:56 -07001099static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001100nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001101{
Jason Sams0826a6f2009-06-15 19:04:56 -07001102 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001103 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001104}
1105
Joe Onoratod7b37742009-08-09 22:57:44 -07001106static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001107nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001108{
Jason Samsebfb4362009-09-23 13:57:02 -07001109 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1110 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1111}
1112
Joe Onoratod7b37742009-08-09 22:57:44 -07001113
Jason Sams02fb2cb2009-05-28 15:37:57 -07001114// ---------------------------------------------------------------------------
1115
1116static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001117nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001118{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001119 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001120 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001121}
1122
1123static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001124nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001125{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001126 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001127 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001128}
1129
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001130static void
1131nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1132{
1133 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1134 rsSamplerSet2(con, (RsSamplerParam)p, v);
1135}
1136
Jason Sams02fb2cb2009-05-28 15:37:57 -07001137static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001138nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001139{
Jason Samsbba134c2009-06-22 15:49:21 -07001140 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001141 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001142}
1143
Jason Samsbba134c2009-06-22 15:49:21 -07001144// ---------------------------------------------------------------------------
1145
Jason Samsbba134c2009-06-22 15:49:21 -07001146static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001147nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001148{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001149 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1150 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1151 return id;
1152}
1153
1154static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001155nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001156{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001157 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1158 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001159}
1160
1161static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001162nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001163{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001164 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1165 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1166}
1167
1168static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001169nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001170{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001171 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1172 jint vtxCount = 0;
1173 rsMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
1174 return vtxCount;
1175}
1176
1177static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001178nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001179{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001180 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1181 jint idxCount = 0;
1182 rsMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
1183 return idxCount;
1184}
1185
1186static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001187nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001188{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001189 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1190
1191 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1192 rsMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
1193
1194 for(jint i = 0; i < numVtxIDs; i ++) {
1195 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1196 }
1197
1198 free(allocs);
1199}
1200
1201static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001202nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001203{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001204 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1205
1206 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1207 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1208
1209 rsMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
1210
1211 for(jint i = 0; i < numIndices; i ++) {
1212 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1213 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1214 }
1215
1216 free(allocs);
1217 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001218}
1219
1220// ---------------------------------------------------------------------------
1221
Jason Samsd19f10d2009-05-22 14:03:28 -07001222
Jason Sams94d8e90a2009-06-10 16:09:05 -07001223static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001224
1225static JNINativeMethod methods[] = {
1226{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001227{"nInitElements", "(IIII)V", (void*)nInitElements },
1228
Jason Samsd19f10d2009-05-22 14:03:28 -07001229{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1230{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
Jason Samsebfb4362009-09-23 13:57:02 -07001231{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
Jason Sams2e1872f2010-08-17 16:25:41 -07001232{"nContextGetMessage", "(I[IZ)I", (void*)nContextGetMessage },
1233{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1234{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001235
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001236
Jason Sams2e1872f2010-08-17 16:25:41 -07001237// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001238{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001239{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001240{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1241{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1242{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001243{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001244{"rsnContextDump", "(II)V", (void*)nContextDump },
1245{"rsnContextPause", "(I)V", (void*)nContextPause },
1246{"rsnContextResume", "(I)V", (void*)nContextResume },
1247{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001248{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001249{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001250
Jason Sams2e1872f2010-08-17 16:25:41 -07001251{"rsnFileOpen", "(I[B)I", (void*)nFileOpen },
1252{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1253{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001254{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001255{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001256
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001257{"rsnFontCreateFromFile", "(ILjava/lang/String;II)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001258
Jason Sams2e1872f2010-08-17 16:25:41 -07001259{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001260{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001261{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001262{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001263
Jason Sams2e1872f2010-08-17 16:25:41 -07001264{"rsnTypeBegin", "(II)V", (void*)nTypeBegin },
1265{"rsnTypeAdd", "(III)V", (void*)nTypeAdd },
1266{"rsnTypeCreate", "(I)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001267{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001268
Jason Sams2e1872f2010-08-17 16:25:41 -07001269{"rsnAllocationCreateTyped", "(II)I", (void*)nAllocationCreateTyped },
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -07001270{"rsnAllocationUpdateFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationUpdateFromBitmap },
Jason Sams2e1872f2010-08-17 16:25:41 -07001271{"rsnAllocationCreateFromBitmap", "(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmap },
1272{"rsnAllocationCreateBitmapRef", "(IILandroid/graphics/Bitmap;)I", (void*)nAllocationCreateBitmapRef },
Jason Sams2e1872f2010-08-17 16:25:41 -07001273{"rsnAllocationCreateFromAssetStream","(IIZI)I", (void*)nAllocationCreateFromAssetStream },
1274{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
1275{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
1276{"rsnAllocationSubData1D", "(IIII[II)V", (void*)nAllocationSubData1D_i },
1277{"rsnAllocationSubData1D", "(IIII[SI)V", (void*)nAllocationSubData1D_s },
1278{"rsnAllocationSubData1D", "(IIII[BI)V", (void*)nAllocationSubData1D_b },
1279{"rsnAllocationSubData1D", "(IIII[FI)V", (void*)nAllocationSubData1D_f },
Jason Sams49bdaf02010-08-31 13:50:42 -07001280{"rsnAllocationSubElementData1D", "(IIII[BI)V", (void*)nAllocationSubElementData1D },
Jason Sams2e1872f2010-08-17 16:25:41 -07001281{"rsnAllocationSubData2D", "(IIIIII[II)V", (void*)nAllocationSubData2D_i },
1282{"rsnAllocationSubData2D", "(IIIIII[FI)V", (void*)nAllocationSubData2D_f },
1283{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1284{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001285{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001286{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1287{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001288
Jason Sams2e1872f2010-08-17 16:25:41 -07001289{"rsnAdapter1DBindAllocation", "(III)V", (void*)nAdapter1DBindAllocation },
1290{"rsnAdapter1DSetConstraint", "(IIII)V", (void*)nAdapter1DSetConstraint },
1291{"rsnAdapter1DData", "(II[I)V", (void*)nAdapter1DData_i },
1292{"rsnAdapter1DData", "(II[F)V", (void*)nAdapter1DData_f },
1293{"rsnAdapter1DSubData", "(IIII[I)V", (void*)nAdapter1DSubData_i },
1294{"rsnAdapter1DSubData", "(IIII[F)V", (void*)nAdapter1DSubData_f },
1295{"rsnAdapter1DCreate", "(I)I", (void*)nAdapter1DCreate },
Jason Sams22534172009-08-04 16:58:20 -07001296
Jason Sams2e1872f2010-08-17 16:25:41 -07001297{"rsnAdapter2DBindAllocation", "(III)V", (void*)nAdapter2DBindAllocation },
1298{"rsnAdapter2DSetConstraint", "(IIII)V", (void*)nAdapter2DSetConstraint },
1299{"rsnAdapter2DData", "(II[I)V", (void*)nAdapter2DData_i },
1300{"rsnAdapter2DData", "(II[F)V", (void*)nAdapter2DData_f },
1301{"rsnAdapter2DSubData", "(IIIIII[I)V", (void*)nAdapter2DSubData_i },
1302{"rsnAdapter2DSubData", "(IIIIII[F)V", (void*)nAdapter2DSubData_f },
1303{"rsnAdapter2DCreate", "(I)I", (void*)nAdapter2DCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001304
Jason Sams2e1872f2010-08-17 16:25:41 -07001305{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1306{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1307{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1308{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1309{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001310{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001311{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001312{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001313{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Samsd19f10d2009-05-22 14:03:28 -07001314
Jason Sams2e1872f2010-08-17 16:25:41 -07001315{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1316{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
1317{"rsnScriptCCreate", "(I)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001318
Jason Sams2e1872f2010-08-17 16:25:41 -07001319{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1320{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1321{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1322{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1323{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1324{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1325{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001326
Jason Sams2e1872f2010-08-17 16:25:41 -07001327{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1328{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1329{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001330
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001331{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001332
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001333{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001334{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1335{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001336
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001337{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001338
Jason Sams2e1872f2010-08-17 16:25:41 -07001339{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001340{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001341{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1342{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1343{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001344
Jason Sams2e1872f2010-08-17 16:25:41 -07001345{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1346{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001347{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001348{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001349
Jason Sams2e1872f2010-08-17 16:25:41 -07001350{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1351{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1352{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
1353
1354{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1355{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001356{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001357{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001358
Jason Samsd19f10d2009-05-22 14:03:28 -07001359};
1360
1361static int registerFuncs(JNIEnv *_env)
1362{
1363 return android::AndroidRuntime::registerNativeMethods(
1364 _env, classPathName, methods, NELEM(methods));
1365}
1366
1367// ---------------------------------------------------------------------------
1368
1369jint JNI_OnLoad(JavaVM* vm, void* reserved)
1370{
1371 JNIEnv* env = NULL;
1372 jint result = -1;
1373
Jason Samsd19f10d2009-05-22 14:03:28 -07001374 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1375 LOGE("ERROR: GetEnv failed\n");
1376 goto bail;
1377 }
1378 assert(env != NULL);
1379
1380 if (registerFuncs(env) < 0) {
1381 LOGE("ERROR: MediaPlayer native registration failed\n");
1382 goto bail;
1383 }
1384
1385 /* success -- return valid version number */
1386 result = JNI_VERSION_1_4;
1387
1388bail:
1389 return result;
1390}
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001391