blob: 16d5bfe8ba0deae1a22e915be4c2736a53185027 [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);
Jason Sams9c25aee2010-10-14 17:57:30 -0700115 rsObjDestroy(con, (void *)obj);
Jason Sams7ce033d2009-08-18 14:14:24 -0700116}
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
Jason Sams3b9c52a2010-10-14 17:48:46 -0700339static int
340nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid, jintArray _dims, jintArray _dimValues)
Jason Samsd19f10d2009-05-22 14:03:28 -0700341{
Jason Sams3b9c52a2010-10-14 17:48:46 -0700342 int count = _env->GetArrayLength(_dims);
Jason Samsd19f10d2009-05-22 14:03:28 -0700343 LOG_API("nTypeCreate, con(%p)", con);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700344
345 jint *dimPtr = _env->GetIntArrayElements(_dims, NULL);
346 jint *dimValPtr = _env->GetIntArrayElements(_dimValues, NULL);
347
348 jint id = (jint)rsaTypeCreate(con, (RsElement)eid, count,
349 (RsDimension *)dimPtr, (uint32_t *)dimValPtr);
350
351 _env->ReleaseIntArrayElements(_dims, dimPtr, JNI_ABORT);
352 _env->ReleaseIntArrayElements(_dimValues, dimValPtr, JNI_ABORT);
353 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700354}
355
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700356static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700357nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700358{
359 // We are packing 6 items: mDimX; mDimY; mDimZ;
360 // mDimLOD; mDimFaces; mElement; into typeData
361 int elementCount = _env->GetArrayLength(_typeData);
362
363 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700364 LOG_API("nTypeCreate, con(%p)", con);
365
366 uint32_t typeData[6];
367 rsTypeGetNativeData(con, (RsType)id, typeData, 6);
368
369 for(jint i = 0; i < elementCount; i ++) {
370 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
371 }
372}
373
Jason Samsd19f10d2009-05-22 14:03:28 -0700374// -----------------------------------
375
376static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700377nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint e)
Jason Samsd19f10d2009-05-22 14:03:28 -0700378{
Jason Samsd19f10d2009-05-22 14:03:28 -0700379 LOG_API("nAllocationCreateTyped, con(%p), e(%p)", con, (RsElement)e);
Jason Samsbc948de2009-08-17 18:35:48 -0700380 return (jint) rsAllocationCreateTyped(con, (RsElement)e);
Jason Samsd19f10d2009-05-22 14:03:28 -0700381}
382
Jason Samsd19f10d2009-05-22 14:03:28 -0700383static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700384nAllocationUploadToTexture(JNIEnv *_env, jobject _this, RsContext con, jint a, jboolean genMip, jint mip)
Jason Samsd19f10d2009-05-22 14:03:28 -0700385{
Jason Samsc2908e62010-02-23 17:44:28 -0800386 LOG_API("nAllocationUploadToTexture, con(%p), a(%p), genMip(%i), mip(%i)", con, (RsAllocation)a, genMip, mip);
387 rsAllocationUploadToTexture(con, (RsAllocation)a, genMip, mip);
Jason Samsd19f10d2009-05-22 14:03:28 -0700388}
389
Jason Sams07ae4062009-08-27 20:23:34 -0700390static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700391nAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, RsContext con, jint a)
Jason Sams07ae4062009-08-27 20:23:34 -0700392{
Jason Sams07ae4062009-08-27 20:23:34 -0700393 LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
394 rsAllocationUploadToBufferObject(con, (RsAllocation)a);
395}
396
Jason Samsea84a7c2009-09-04 14:42:41 -0700397static RsElement SkBitmapToPredefined(SkBitmap::Config cfg)
Jason Samsfe08d992009-05-27 14:45:32 -0700398{
Jason Samsffe9f482009-06-01 17:45:53 -0700399 switch (cfg) {
400 case SkBitmap::kA8_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700401 return g_A_8;
Jason Samsffe9f482009-06-01 17:45:53 -0700402 case SkBitmap::kARGB_4444_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700403 return g_RGBA_4444;
Jason Samsffe9f482009-06-01 17:45:53 -0700404 case SkBitmap::kARGB_8888_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700405 return g_RGBA_8888;
Jason Samsffe9f482009-06-01 17:45:53 -0700406 case SkBitmap::kRGB_565_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700407 return g_RGB_565;
Jason Samsfe08d992009-05-27 14:45:32 -0700408
Jason Samsffe9f482009-06-01 17:45:53 -0700409 default:
410 break;
411 }
412 // If we don't have a conversion mark it as a user type.
413 LOGE("Unsupported bitmap type");
Jason Samsea84a7c2009-09-04 14:42:41 -0700414 return NULL;
Jason Samsfe08d992009-05-27 14:45:32 -0700415}
416
Jason Samsffe9f482009-06-01 17:45:53 -0700417static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700418nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
Jason Samsffe9f482009-06-01 17:45:53 -0700419{
Jason Samsffe9f482009-06-01 17:45:53 -0700420 SkBitmap const * nativeBitmap =
421 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
422 const SkBitmap& bitmap(*nativeBitmap);
423 SkBitmap::Config config = bitmap.getConfig();
424
Jason Samsea84a7c2009-09-04 14:42:41 -0700425 RsElement e = SkBitmapToPredefined(config);
426 if (e) {
Jason Samsffe9f482009-06-01 17:45:53 -0700427 bitmap.lockPixels();
428 const int w = bitmap.width();
429 const int h = bitmap.height();
430 const void* ptr = bitmap.getPixels();
Jason Samsea84a7c2009-09-04 14:42:41 -0700431 jint id = (jint)rsAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Jason Samsffe9f482009-06-01 17:45:53 -0700432 bitmap.unlockPixels();
433 return id;
434 }
435 return 0;
436}
Jason Samsfe08d992009-05-27 14:45:32 -0700437
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700438static void
439nAllocationUpdateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
440{
441 SkBitmap const * nativeBitmap =
442 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
443 const SkBitmap& bitmap(*nativeBitmap);
444 SkBitmap::Config config = bitmap.getConfig();
445
446 RsElement e = SkBitmapToPredefined(config);
447 if (e) {
448 bitmap.lockPixels();
449 const void* ptr = bitmap.getPixels();
450 rsAllocationUpdateFromBitmap(con, (RsAllocation)alloc, e, ptr);
451 bitmap.unlockPixels();
452 }
453}
454
Jason Sams8a647432010-03-01 15:31:04 -0800455static void ReleaseBitmapCallback(void *bmp)
456{
457 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
458 nativeBitmap->unlockPixels();
459}
460
461static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700462nAllocationCreateBitmapRef(JNIEnv *_env, jobject _this, RsContext con, jint type, jobject jbitmap)
Jason Sams8a647432010-03-01 15:31:04 -0800463{
Jason Sams8a647432010-03-01 15:31:04 -0800464 SkBitmap * nativeBitmap =
465 (SkBitmap *)_env->GetIntField(jbitmap, gNativeBitmapID);
466
467
468 nativeBitmap->lockPixels();
469 void* ptr = nativeBitmap->getPixels();
470 jint id = (jint)rsAllocationCreateBitmapRef(con, (RsType)type, ptr, nativeBitmap, ReleaseBitmapCallback);
471 return id;
472}
473
Jason Samsb0ec1b42009-07-28 12:02:16 -0700474static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700475nAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jint native_asset)
Romain Guy650a3eb2009-08-31 14:06:43 -0700476{
Romain Guy650a3eb2009-08-31 14:06:43 -0700477 Asset* asset = reinterpret_cast<Asset*>(native_asset);
478 SkBitmap bitmap;
479 SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
480 &bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
481
482 SkBitmap::Config config = bitmap.getConfig();
483
Jason Samsea84a7c2009-09-04 14:42:41 -0700484 RsElement e = SkBitmapToPredefined(config);
Romain Guy650a3eb2009-08-31 14:06:43 -0700485
Jason Samsea84a7c2009-09-04 14:42:41 -0700486 if (e) {
Romain Guy650a3eb2009-08-31 14:06:43 -0700487 bitmap.lockPixels();
488 const int w = bitmap.width();
489 const int h = bitmap.height();
490 const void* ptr = bitmap.getPixels();
Jason Samsea84a7c2009-09-04 14:42:41 -0700491 jint id = (jint)rsAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Romain Guy650a3eb2009-08-31 14:06:43 -0700492 bitmap.unlockPixels();
493 return id;
494 }
495 return 0;
496}
497
Jason Samsd19f10d2009-05-22 14:03:28 -0700498static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700499nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700500{
Jason Samsd19f10d2009-05-22 14:03:28 -0700501 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700502 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 -0700503 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700504 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700505 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
506}
507
508static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700509nAllocationSubData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700510{
Jason Sams768bc022009-09-21 19:41:04 -0700511 jint len = _env->GetArrayLength(data);
512 LOG_API("nAllocation1DSubData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
513 jshort *ptr = _env->GetShortArrayElements(data, NULL);
514 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
515 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
516}
517
518static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700519nAllocationSubData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700520{
Jason Sams768bc022009-09-21 19:41:04 -0700521 jint len = _env->GetArrayLength(data);
522 LOG_API("nAllocation1DSubData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
523 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
524 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
525 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
526}
527
528static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700529nAllocationSubData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700530{
Jason Samsd19f10d2009-05-22 14:03:28 -0700531 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700532 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 -0700533 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700534 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700535 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
536}
537
538static void
Jason Sams49bdaf02010-08-31 13:50:42 -0700539// native void rsnAllocationSubElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
540nAllocationSubElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint compIdx, jbyteArray data, int sizeBytes)
541{
542 jint len = _env->GetArrayLength(data);
543 LOG_API("nAllocationSubElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
544 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
545 rsAllocation1DSubElementData(con, (RsAllocation)alloc, offset, ptr, compIdx, sizeBytes);
546 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
547}
548
549static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700550nAllocationSubData2D_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 -0700551{
Jason Samsd19f10d2009-05-22 14:03:28 -0700552 jint len = _env->GetArrayLength(data);
553 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);
554 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700555 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700556 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
557}
558
559static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700560nAllocationSubData2D_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 -0700561{
Jason Samsd19f10d2009-05-22 14:03:28 -0700562 jint len = _env->GetArrayLength(data);
563 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);
564 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700565 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700566 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
567}
568
Jason Sams40a29e82009-08-10 14:55:26 -0700569static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700570nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700571{
Jason Sams40a29e82009-08-10 14:55:26 -0700572 jint len = _env->GetArrayLength(data);
573 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
574 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700575 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700576 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700577}
578
579static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700580nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700581{
Jason Sams40a29e82009-08-10 14:55:26 -0700582 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700583 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700584 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700585 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700586 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700587}
Jason Samsd19f10d2009-05-22 14:03:28 -0700588
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700589static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700590nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700591{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700592 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
593 return (jint) rsAllocationGetType(con, (RsAllocation)a);
594}
595
Jason Sams5edc6082010-10-05 13:32:49 -0700596static void
597nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
598{
599 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
600 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
601}
602
603static void
604nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
605{
606 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
607 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
608}
609
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700610// -----------------------------------
611
612static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700613nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700614{
615 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700616
617 Asset* asset = reinterpret_cast<Asset*>(native_asset);
618
619 jint id = (jint)rsFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
620 return id;
621}
622
623static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700624nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700625{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700626 int32_t numEntries = 0;
627 rsFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700628 return numEntries;
629}
630
631static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700632nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700633{
634 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700635 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
636
637 rsFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
638
639 for(jint i = 0; i < numEntries; i ++) {
640 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
641 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
642 }
643
644 free(fileEntries);
645}
646
647static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700648nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700649{
650 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700651 jint id = (jint)rsFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
652 return id;
653}
Jason Samsd19f10d2009-05-22 14:03:28 -0700654
655// -----------------------------------
656
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700657static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700658nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jint fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700659{
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700660 const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
661
662 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
663 return id;
664}
665
666
667// -----------------------------------
668
Jason Samsd19f10d2009-05-22 14:03:28 -0700669static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700670nAdapter1DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700671{
Jason Samsd19f10d2009-05-22 14:03:28 -0700672 LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700673 rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700674}
675
676static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700677nAdapter1DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsd19f10d2009-05-22 14:03:28 -0700678{
Jason Samsd19f10d2009-05-22 14:03:28 -0700679 LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700680 rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
Jason Samsd19f10d2009-05-22 14:03:28 -0700681}
682
683static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700684nAdapter1DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700685{
Jason Samsd19f10d2009-05-22 14:03:28 -0700686 jint len = _env->GetArrayLength(data);
687 LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
688 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700689 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700690 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
691}
692
693static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700694nAdapter1DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700695{
Jason Samsd19f10d2009-05-22 14:03:28 -0700696 jint len = _env->GetArrayLength(data);
697 LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
698 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700699 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700700 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
701}
702
703static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700704nAdapter1DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700705{
Jason Samsd19f10d2009-05-22 14:03:28 -0700706 jint len = _env->GetArrayLength(data);
707 LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
708 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700709 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700710 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
711}
712
713static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700714nAdapter1DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700715{
Jason Samsd19f10d2009-05-22 14:03:28 -0700716 jint len = _env->GetArrayLength(data);
717 LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
718 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700719 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700720 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
721}
722
723static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700724nAdapter1DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700725{
Jason Samsd19f10d2009-05-22 14:03:28 -0700726 LOG_API("nAdapter1DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700727 return (jint)rsAdapter1DCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700728}
729
730// -----------------------------------
731
732static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700733nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700734{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700735 LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700736 rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700737}
738
739static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700740nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700741{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700742 LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700743 rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700744}
745
746static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700747nAdapter2DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700748{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700749 jint len = _env->GetArrayLength(data);
750 LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
751 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700752 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700753 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
754}
755
756static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700757nAdapter2DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700758{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700759 jint len = _env->GetArrayLength(data);
760 LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
761 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700762 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700763 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
764}
765
766static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700767nAdapter2DSubData_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 -0700768{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700769 jint len = _env->GetArrayLength(data);
770 LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
771 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
772 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700773 rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700774 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
775}
776
777static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700778nAdapter2DSubData_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 -0700779{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700780 jint len = _env->GetArrayLength(data);
781 LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
782 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
783 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700784 rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700785 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
786}
787
788static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700789nAdapter2DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700790{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700791 LOG_API("nAdapter2DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700792 return (jint)rsAdapter2DCreate(con);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700793}
794
795// -----------------------------------
796
797static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700798nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700799{
Jason Samsd19f10d2009-05-22 14:03:28 -0700800 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700801 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700802}
803
804static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700805nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700806{
Jason Samscfc04362010-09-14 14:59:03 -0700807 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700808 rsScriptSetVarI(con, (RsScript)script, slot, val);
809}
810
811static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700812nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
813{
814 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
815 rsScriptSetVarJ(con, (RsScript)script, slot, val);
816}
817
818static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700819nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700820{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700821 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700822 rsScriptSetVarF(con, (RsScript)script, slot, val);
823}
824
825static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700826nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
827{
828 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
829 rsScriptSetVarD(con, (RsScript)script, slot, val);
830}
831
832static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700833nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700834{
Jason Sams4d339932010-05-11 14:03:58 -0700835 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
836 jint len = _env->GetArrayLength(data);
837 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
838 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
839 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
840}
841
Jason Samsd19f10d2009-05-22 14:03:28 -0700842
843static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700844nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700845{
Jason Sams07ae4062009-08-27 20:23:34 -0700846 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700847
848 jint length = _env->GetArrayLength(timeZone);
849 jbyte* timeZone_ptr;
850 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
851
Jason Samsbc948de2009-08-17 18:35:48 -0700852 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700853
854 if (timeZone_ptr) {
855 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
856 }
857}
858
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700859static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700860nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700861{
Jason Samsbe2e8412009-09-16 15:04:38 -0700862 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
863 rsScriptInvoke(con, (RsScript)obj, slot);
864}
865
866static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700867nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700868{
Jason Sams4d339932010-05-11 14:03:58 -0700869 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
870 jint len = _env->GetArrayLength(data);
871 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
872 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
873 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
874}
875
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700876
Jason Sams22534172009-08-04 16:58:20 -0700877// -----------------------------------
878
879static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700880nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700881{
Jason Sams22534172009-08-04 16:58:20 -0700882 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700883 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700884}
885
Romain Guy584a3752009-07-30 18:45:01 -0700886static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700887nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700888 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700889{
Jason Samsd19f10d2009-05-22 14:03:28 -0700890 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700891 jint _exception = 0;
892 jint remaining;
893 jbyte* script_base = 0;
894 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700895 if (!scriptRef) {
896 _exception = 1;
897 //_env->ThrowNew(IAEClass, "script == null");
898 goto exit;
899 }
900 if (offset < 0) {
901 _exception = 1;
902 //_env->ThrowNew(IAEClass, "offset < 0");
903 goto exit;
904 }
905 if (length < 0) {
906 _exception = 1;
907 //_env->ThrowNew(IAEClass, "length < 0");
908 goto exit;
909 }
910 remaining = _env->GetArrayLength(scriptRef) - offset;
911 if (remaining < length) {
912 _exception = 1;
913 //_env->ThrowNew(IAEClass, "length > script.length - offset");
914 goto exit;
915 }
916 script_base = (jbyte *)
917 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
918 script_ptr = script_base + offset;
919
Jason Samsbc948de2009-08-17 18:35:48 -0700920 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700921
Jack Palevich43702d82009-05-28 13:38:16 -0700922exit:
923 if (script_base) {
924 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
925 _exception ? JNI_ABORT: 0);
926 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700927}
928
929static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700930nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700931{
Jason Samsd19f10d2009-05-22 14:03:28 -0700932 LOG_API("nScriptCCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700933 return (jint)rsScriptCCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700934}
935
936// ---------------------------------------------------------------------------
937
938static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700939nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700940{
Jason Sams54db59c2010-05-13 18:30:11 -0700941 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
942 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700943}
944
945static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700946nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700947{
Jason Sams54db59c2010-05-13 18:30:11 -0700948 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
949 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700950}
951
952static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700953nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700954{
Jason Sams54db59c2010-05-13 18:30:11 -0700955 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
956 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700957}
958
959static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700960nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700961{
Jason Sams54db59c2010-05-13 18:30:11 -0700962 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
963 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700964}
965
966static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700967nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -0700968{
Jason Sams54db59c2010-05-13 18:30:11 -0700969 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
970 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700971}
972
973static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700974nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700975{
Jason Sams54db59c2010-05-13 18:30:11 -0700976 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
977 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700978}
979
980static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700981nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700982{
Jason Sams54db59c2010-05-13 18:30:11 -0700983 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -0700984 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700985}
986
Jason Sams0011bcf2009-12-15 12:58:36 -0800987// ---------------------------------------------------------------------------
988
989static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700990nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -0800991{
Jason Sams0011bcf2009-12-15 12:58:36 -0800992 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
993 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
994}
Jason Sams54c0ec12009-11-30 14:49:55 -0800995
Jason Sams68afd012009-12-17 16:55:08 -0800996static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700997nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800998{
Jason Sams68afd012009-12-17 16:55:08 -0800999 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1000 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1001}
1002
1003static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001004nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001005{
Jason Sams68afd012009-12-17 16:55:08 -08001006 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1007 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1008}
1009
Jason Samsd19f10d2009-05-22 14:03:28 -07001010// ---------------------------------------------------------------------------
1011
Jason Samsd19f10d2009-05-22 14:03:28 -07001012static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001013nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001014{
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001015 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1016 jint shaderLen = _env->GetStringUTFLength(shader);
1017 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1018 jint paramLen = _env->GetArrayLength(params);
1019
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001020 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001021
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001022 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001023 _env->ReleaseStringUTFChars(shader, shaderUTF);
1024 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1025 return ret;
1026}
1027
1028
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001029// ---------------------------------------------------------------------------
1030
Jason Sams0011bcf2009-12-15 12:58:36 -08001031static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001032nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001033{
Jason Sams0011bcf2009-12-15 12:58:36 -08001034 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1035 jint shaderLen = _env->GetStringUTFLength(shader);
1036 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1037 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001038
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001039 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001040
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001041 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001042 _env->ReleaseStringUTFChars(shader, shaderUTF);
1043 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1044 return ret;
1045}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001046
Jason Samsebfb4362009-09-23 13:57:02 -07001047// ---------------------------------------------------------------------------
1048
1049static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001050nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001051{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001052 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1053 con, pointSmooth, lineSmooth, pointSprite);
1054 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001055}
1056
1057static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001058nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001059{
Jason Samsebfb4362009-09-23 13:57:02 -07001060 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001061 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1062}
1063
1064static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001065nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001066{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001067 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1068 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001069}
1070
Jason Samsd19f10d2009-05-22 14:03:28 -07001071
1072// ---------------------------------------------------------------------------
1073
1074static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001075nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001076{
Jason Samsd19f10d2009-05-22 14:03:28 -07001077 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001078 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001079}
1080
1081static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001082nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001083{
Jason Sams54db59c2010-05-13 18:30:11 -07001084 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1085 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001086}
1087
1088static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001089nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001090{
Jason Samsd19f10d2009-05-22 14:03:28 -07001091 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001092 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001093}
1094
Jason Sams0826a6f2009-06-15 19:04:56 -07001095static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001096nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001097{
Jason Sams0826a6f2009-06-15 19:04:56 -07001098 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001099 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001100}
1101
Joe Onoratod7b37742009-08-09 22:57:44 -07001102static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001103nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001104{
Jason Samsebfb4362009-09-23 13:57:02 -07001105 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1106 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1107}
1108
Joe Onoratod7b37742009-08-09 22:57:44 -07001109
Jason Sams02fb2cb2009-05-28 15:37:57 -07001110// ---------------------------------------------------------------------------
1111
1112static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001113nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001114{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001115 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001116 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001117}
1118
1119static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001120nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001121{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001122 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001123 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001124}
1125
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001126static void
1127nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1128{
1129 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1130 rsSamplerSet2(con, (RsSamplerParam)p, v);
1131}
1132
Jason Sams02fb2cb2009-05-28 15:37:57 -07001133static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001134nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001135{
Jason Samsbba134c2009-06-22 15:49:21 -07001136 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001137 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001138}
1139
Jason Samsbba134c2009-06-22 15:49:21 -07001140// ---------------------------------------------------------------------------
1141
Jason Samsbba134c2009-06-22 15:49:21 -07001142static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001143nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001144{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001145 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1146 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1147 return id;
1148}
1149
1150static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001151nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001152{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001153 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1154 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001155}
1156
1157static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001158nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001159{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001160 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1161 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1162}
1163
1164static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001165nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001166{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001167 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1168 jint vtxCount = 0;
1169 rsMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
1170 return vtxCount;
1171}
1172
1173static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001174nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001175{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001176 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1177 jint idxCount = 0;
1178 rsMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
1179 return idxCount;
1180}
1181
1182static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001183nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001184{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001185 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1186
1187 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1188 rsMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
1189
1190 for(jint i = 0; i < numVtxIDs; i ++) {
1191 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1192 }
1193
1194 free(allocs);
1195}
1196
1197static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001198nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001199{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001200 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1201
1202 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1203 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1204
1205 rsMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
1206
1207 for(jint i = 0; i < numIndices; i ++) {
1208 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1209 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1210 }
1211
1212 free(allocs);
1213 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001214}
1215
1216// ---------------------------------------------------------------------------
1217
Jason Samsd19f10d2009-05-22 14:03:28 -07001218
Jason Sams94d8e90a2009-06-10 16:09:05 -07001219static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001220
1221static JNINativeMethod methods[] = {
1222{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001223{"nInitElements", "(IIII)V", (void*)nInitElements },
1224
Jason Samsd19f10d2009-05-22 14:03:28 -07001225{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1226{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
Jason Samsebfb4362009-09-23 13:57:02 -07001227{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
Jason Sams2e1872f2010-08-17 16:25:41 -07001228{"nContextGetMessage", "(I[IZ)I", (void*)nContextGetMessage },
1229{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1230{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001231
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001232
Jason Sams2e1872f2010-08-17 16:25:41 -07001233// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001234{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001235{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001236{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1237{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1238{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001239{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001240{"rsnContextDump", "(II)V", (void*)nContextDump },
1241{"rsnContextPause", "(I)V", (void*)nContextPause },
1242{"rsnContextResume", "(I)V", (void*)nContextResume },
1243{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001244{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001245{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001246
Jason Sams2e1872f2010-08-17 16:25:41 -07001247{"rsnFileOpen", "(I[B)I", (void*)nFileOpen },
1248{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1249{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001250{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001251{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001252
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001253{"rsnFontCreateFromFile", "(ILjava/lang/String;II)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001254
Jason Sams2e1872f2010-08-17 16:25:41 -07001255{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001256{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001257{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001258{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001259
Jason Sams3b9c52a2010-10-14 17:48:46 -07001260{"rsnTypeCreate", "(II[I[I)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001261{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001262
Jason Sams2e1872f2010-08-17 16:25:41 -07001263{"rsnAllocationCreateTyped", "(II)I", (void*)nAllocationCreateTyped },
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -07001264{"rsnAllocationUpdateFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationUpdateFromBitmap },
Jason Sams2e1872f2010-08-17 16:25:41 -07001265{"rsnAllocationCreateFromBitmap", "(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmap },
1266{"rsnAllocationCreateBitmapRef", "(IILandroid/graphics/Bitmap;)I", (void*)nAllocationCreateBitmapRef },
Jason Sams2e1872f2010-08-17 16:25:41 -07001267{"rsnAllocationCreateFromAssetStream","(IIZI)I", (void*)nAllocationCreateFromAssetStream },
1268{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
1269{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
1270{"rsnAllocationSubData1D", "(IIII[II)V", (void*)nAllocationSubData1D_i },
1271{"rsnAllocationSubData1D", "(IIII[SI)V", (void*)nAllocationSubData1D_s },
1272{"rsnAllocationSubData1D", "(IIII[BI)V", (void*)nAllocationSubData1D_b },
1273{"rsnAllocationSubData1D", "(IIII[FI)V", (void*)nAllocationSubData1D_f },
Jason Sams49bdaf02010-08-31 13:50:42 -07001274{"rsnAllocationSubElementData1D", "(IIII[BI)V", (void*)nAllocationSubElementData1D },
Jason Sams2e1872f2010-08-17 16:25:41 -07001275{"rsnAllocationSubData2D", "(IIIIII[II)V", (void*)nAllocationSubData2D_i },
1276{"rsnAllocationSubData2D", "(IIIIII[FI)V", (void*)nAllocationSubData2D_f },
1277{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1278{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001279{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001280{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1281{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001282
Jason Sams2e1872f2010-08-17 16:25:41 -07001283{"rsnAdapter1DBindAllocation", "(III)V", (void*)nAdapter1DBindAllocation },
1284{"rsnAdapter1DSetConstraint", "(IIII)V", (void*)nAdapter1DSetConstraint },
1285{"rsnAdapter1DData", "(II[I)V", (void*)nAdapter1DData_i },
1286{"rsnAdapter1DData", "(II[F)V", (void*)nAdapter1DData_f },
1287{"rsnAdapter1DSubData", "(IIII[I)V", (void*)nAdapter1DSubData_i },
1288{"rsnAdapter1DSubData", "(IIII[F)V", (void*)nAdapter1DSubData_f },
1289{"rsnAdapter1DCreate", "(I)I", (void*)nAdapter1DCreate },
Jason Sams22534172009-08-04 16:58:20 -07001290
Jason Sams2e1872f2010-08-17 16:25:41 -07001291{"rsnAdapter2DBindAllocation", "(III)V", (void*)nAdapter2DBindAllocation },
1292{"rsnAdapter2DSetConstraint", "(IIII)V", (void*)nAdapter2DSetConstraint },
1293{"rsnAdapter2DData", "(II[I)V", (void*)nAdapter2DData_i },
1294{"rsnAdapter2DData", "(II[F)V", (void*)nAdapter2DData_f },
1295{"rsnAdapter2DSubData", "(IIIIII[I)V", (void*)nAdapter2DSubData_i },
1296{"rsnAdapter2DSubData", "(IIIIII[F)V", (void*)nAdapter2DSubData_f },
1297{"rsnAdapter2DCreate", "(I)I", (void*)nAdapter2DCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001298
Jason Sams2e1872f2010-08-17 16:25:41 -07001299{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1300{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1301{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1302{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1303{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001304{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001305{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001306{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001307{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Samsd19f10d2009-05-22 14:03:28 -07001308
Jason Sams2e1872f2010-08-17 16:25:41 -07001309{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1310{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
1311{"rsnScriptCCreate", "(I)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001312
Jason Sams2e1872f2010-08-17 16:25:41 -07001313{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1314{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1315{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1316{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1317{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1318{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1319{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001320
Jason Sams2e1872f2010-08-17 16:25:41 -07001321{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1322{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1323{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001324
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001325{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001326
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001327{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001328{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1329{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001330
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001331{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001332
Jason Sams2e1872f2010-08-17 16:25:41 -07001333{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001334{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001335{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1336{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1337{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001338
Jason Sams2e1872f2010-08-17 16:25:41 -07001339{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1340{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001341{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001342{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001343
Jason Sams2e1872f2010-08-17 16:25:41 -07001344{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1345{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1346{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
1347
1348{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1349{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001350{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001351{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001352
Jason Samsd19f10d2009-05-22 14:03:28 -07001353};
1354
1355static int registerFuncs(JNIEnv *_env)
1356{
1357 return android::AndroidRuntime::registerNativeMethods(
1358 _env, classPathName, methods, NELEM(methods));
1359}
1360
1361// ---------------------------------------------------------------------------
1362
1363jint JNI_OnLoad(JavaVM* vm, void* reserved)
1364{
1365 JNIEnv* env = NULL;
1366 jint result = -1;
1367
Jason Samsd19f10d2009-05-22 14:03:28 -07001368 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1369 LOGE("ERROR: GetEnv failed\n");
1370 goto bail;
1371 }
1372 assert(env != NULL);
1373
1374 if (registerFuncs(env) < 0) {
1375 LOGE("ERROR: MediaPlayer native registration failed\n");
1376 goto bail;
1377 }
1378
1379 /* success -- return valid version number */
1380 result = JNI_VERSION_1_4;
1381
1382bail:
1383 return result;
1384}
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001385