blob: 77cbc1007241db19cdc49f2f14cafcbd13af6037 [file] [log] [blame]
Jason Samsd19f10d2009-05-22 14:03:28 -07001/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jason Samsf29ca502009-06-23 12:22:47 -070017#define LOG_TAG "libRS_jni"
18
Jason Samsd19f10d2009-05-22 14:03:28 -070019#include <stdlib.h>
20#include <stdio.h>
21#include <fcntl.h>
22#include <unistd.h>
23#include <math.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070024#include <utils/misc.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070025
Mathias Agopian000479f2010-02-09 17:46:37 -080026#include <surfaceflinger/Surface.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070027
Jason Samsffe9f482009-06-01 17:45:53 -070028#include <core/SkBitmap.h>
Romain Guy650a3eb2009-08-31 14:06:43 -070029#include <core/SkPixelRef.h>
30#include <core/SkStream.h>
31#include <core/SkTemplates.h>
32#include <images/SkImageDecoder.h>
Jason Samsffe9f482009-06-01 17:45:53 -070033
Romain Guy650a3eb2009-08-31 14:06:43 -070034#include <utils/Asset.h>
35#include <utils/ResourceTypes.h>
Jason Samsf29ca502009-06-23 12:22:47 -070036
Jason Samsd19f10d2009-05-22 14:03:28 -070037#include "jni.h"
38#include "JNIHelp.h"
39#include "android_runtime/AndroidRuntime.h"
Jim Milleree956052010-08-19 18:56:00 -070040#include "android_runtime/android_view_Surface.h"
Jason Samsd19f10d2009-05-22 14:03:28 -070041
Jason Samse29d4712009-07-23 15:19:03 -070042#include <RenderScript.h>
43#include <RenderScriptEnv.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070044
45//#define LOG_API LOGE
46#define LOG_API(...)
47
48using namespace android;
49
Jason Samsd19f10d2009-05-22 14:03:28 -070050// ---------------------------------------------------------------------------
51
52static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
53{
54 jclass npeClazz = env->FindClass(exc);
55 env->ThrowNew(npeClazz, msg);
56}
57
Jason Samsffe9f482009-06-01 17:45:53 -070058static jfieldID gContextId = 0;
59static jfieldID gNativeBitmapID = 0;
Jason Sams43ee06852009-08-12 17:54:11 -070060static jfieldID gTypeNativeCache = 0;
Jason Samsd19f10d2009-05-22 14:03:28 -070061
Jason Samsea84a7c2009-09-04 14:42:41 -070062static RsElement g_A_8 = NULL;
63static RsElement g_RGBA_4444 = NULL;
64static RsElement g_RGBA_8888 = NULL;
65static RsElement g_RGB_565 = NULL;
66
Jason Samsd19f10d2009-05-22 14:03:28 -070067static void _nInit(JNIEnv *_env, jclass _this)
68{
Jason Samsd19f10d2009-05-22 14:03:28 -070069 gContextId = _env->GetFieldID(_this, "mContext", "I");
Jason Samsffe9f482009-06-01 17:45:53 -070070
71 jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
72 gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
Jason Samsd19f10d2009-05-22 14:03:28 -070073}
74
Jason Samsea84a7c2009-09-04 14:42:41 -070075static void nInitElements(JNIEnv *_env, jobject _this, jint a8, jint rgba4444, jint rgba8888, jint rgb565)
76{
77 g_A_8 = reinterpret_cast<RsElement>(a8);
78 g_RGBA_4444 = reinterpret_cast<RsElement>(rgba4444);
79 g_RGBA_8888 = reinterpret_cast<RsElement>(rgba8888);
80 g_RGB_565 = reinterpret_cast<RsElement>(rgb565);
81}
Jason Samsd19f10d2009-05-22 14:03:28 -070082
83// ---------------------------------------------------------------------------
84
Jason Sams3eaa338e2009-06-10 15:04:38 -070085static void
Jason Sams2e1872f2010-08-17 16:25:41 -070086nContextFinish(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams96ed4cf2010-06-15 12:15:57 -070087{
Jason Sams96ed4cf2010-06-15 12:15:57 -070088 LOG_API("nContextFinish, con(%p)", con);
89 rsContextFinish(con);
90}
91
92static void
Jason Sams2e1872f2010-08-17 16:25:41 -070093nAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
Jason Sams3eaa338e2009-06-10 15:04:38 -070094{
Jason Sams07ae4062009-08-27 20:23:34 -070095 LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
Jason Sams3eaa338e2009-06-10 15:04:38 -070096 jint len = _env->GetArrayLength(str);
97 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -070098 rsAssignName(con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -070099 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
100}
101
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700102static jstring
Jason Sams2e1872f2010-08-17 16:25:41 -0700103nGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700104{
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700105 LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700106 const char *name = NULL;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700107 rsaGetName(con, (void *)obj, &name);
108 if(name == NULL || strlen(name) == 0) {
109 return NULL;
110 }
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700111 return _env->NewStringUTF(name);
112}
113
Jason Sams7ce033d2009-08-18 14:14:24 -0700114static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700115nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Jason Sams7ce033d2009-08-18 14:14:24 -0700116{
Jason Sams7ce033d2009-08-18 14:14:24 -0700117 LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
Jason Sams9c25aee2010-10-14 17:57:30 -0700118 rsObjDestroy(con, (void *)obj);
Jason Sams7ce033d2009-08-18 14:14:24 -0700119}
120
Jason Sams3eaa338e2009-06-10 15:04:38 -0700121// ---------------------------------------------------------------------------
122
Jason Samsd19f10d2009-05-22 14:03:28 -0700123static jint
124nDeviceCreate(JNIEnv *_env, jobject _this)
125{
126 LOG_API("nDeviceCreate");
127 return (jint)rsDeviceCreate();
128}
129
130static void
131nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
132{
133 LOG_API("nDeviceDestroy");
134 return rsDeviceDestroy((RsDevice)dev);
135}
136
Jason Samsebfb4362009-09-23 13:57:02 -0700137static void
138nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
139{
140 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
141 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
142}
143
Jason Samsd19f10d2009-05-22 14:03:28 -0700144static jint
Jason Sams704ff642010-02-09 16:05:07 -0800145nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
Jason Samsd19f10d2009-05-22 14:03:28 -0700146{
147 LOG_API("nContextCreate");
Jason Sams704ff642010-02-09 16:05:07 -0800148 return (jint)rsContextCreate((RsDevice)dev, ver);
149}
150
151static jint
Jason Sams11c8af92010-10-13 15:31:10 -0700152nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
153 int colorMin, int colorPref,
154 int alphaMin, int alphaPref,
155 int depthMin, int depthPref,
156 int stencilMin, int stencilPref,
157 int samplesMin, int samplesPref, float samplesQ)
Jason Sams704ff642010-02-09 16:05:07 -0800158{
Jason Sams11c8af92010-10-13 15:31:10 -0700159 RsSurfaceConfig sc;
160 sc.alphaMin = alphaMin;
161 sc.alphaPref = alphaPref;
162 sc.colorMin = colorMin;
163 sc.colorPref = colorPref;
164 sc.depthMin = depthMin;
165 sc.depthPref = depthPref;
166 sc.samplesMin = samplesMin;
167 sc.samplesPref = samplesPref;
168 sc.samplesQ = samplesQ;
169
Jason Sams704ff642010-02-09 16:05:07 -0800170 LOG_API("nContextCreateGL");
Jason Sams11c8af92010-10-13 15:31:10 -0700171 return (jint)rsContextCreateGL((RsDevice)dev, ver, sc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700172}
173
174static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700175nContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800176{
Jason Sams7d787b42009-11-15 12:14:26 -0800177 LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
178 rsContextSetPriority(con, p);
179}
180
181
182
183static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700184nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800185{
Jason Sams3bc47d42009-11-12 15:10:25 -0800186 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800187
188 Surface * window = NULL;
189 if (wnd == NULL) {
190
191 } else {
Jim Milleree956052010-08-19 18:56:00 -0700192 window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800193 }
194
Jason Sams3bc47d42009-11-12 15:10:25 -0800195 rsContextSetSurface(con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800196}
197
198static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700199nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700200{
Jason Sams2e1872f2010-08-17 16:25:41 -0700201 LOG_API("nContextDestroy, con(%p)", con);
202 rsContextDestroy(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700203}
204
Jason Sams715333b2009-11-17 17:26:46 -0800205static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700206nContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800207{
Jason Sams715333b2009-11-17 17:26:46 -0800208 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
209 rsContextDump((RsContext)con, bits);
210}
Jason Samsd19f10d2009-05-22 14:03:28 -0700211
212static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700213nContextPause(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700214{
Jason Sams65e7aa52009-09-24 17:38:20 -0700215 LOG_API("nContextPause, con(%p)", con);
216 rsContextPause(con);
217}
218
219static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700220nContextResume(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700221{
Jason Sams65e7aa52009-09-24 17:38:20 -0700222 LOG_API("nContextResume, con(%p)", con);
223 rsContextResume(con);
224}
225
Jason Sams516c3192009-10-06 13:58:47 -0700226static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700227nContextGetMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data, jboolean wait)
Jason Sams516c3192009-10-06 13:58:47 -0700228{
Jason Sams516c3192009-10-06 13:58:47 -0700229 jint len = _env->GetArrayLength(data);
230 LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
231 jint *ptr = _env->GetIntArrayElements(data, NULL);
232 size_t receiveLen;
233 int id = rsContextGetMessage(con, ptr, &receiveLen, len * 4, wait);
234 if (!id && receiveLen) {
Jason Sams1d45c472010-08-25 14:31:48 -0700235 LOGV("message receive buffer too small. %i", receiveLen);
236 *ptr = (jint)receiveLen;
Jason Sams516c3192009-10-06 13:58:47 -0700237 }
238 _env->ReleaseIntArrayElements(data, ptr, 0);
239 return id;
240}
241
Jason Sams2e1872f2010-08-17 16:25:41 -0700242static void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700243{
Jason Sams516c3192009-10-06 13:58:47 -0700244 LOG_API("nContextInitToClient, con(%p)", con);
245 rsContextInitToClient(con);
246}
247
Jason Sams2e1872f2010-08-17 16:25:41 -0700248static void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700249{
Jason Sams516c3192009-10-06 13:58:47 -0700250 LOG_API("nContextDeinitToClient, con(%p)", con);
251 rsContextDeinitToClient(con);
252}
253
254
Jason Sams718cd1f2009-12-23 14:35:29 -0800255static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700256nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700257{
Jason Sams718cd1f2009-12-23 14:35:29 -0800258 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
259 return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700260}
261
262static jint
Jason Sams70d4e502010-09-02 17:35:23 -0700263nElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700264{
Jason Sams718cd1f2009-12-23 14:35:29 -0800265 int fieldCount = _env->GetArrayLength(_ids);
Jason Sams704ff642010-02-09 16:05:07 -0800266 LOG_API("nElementCreate2, con(%p)", con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800267
268 jint *ids = _env->GetIntArrayElements(_ids, NULL);
Jason Sams70d4e502010-09-02 17:35:23 -0700269 jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
Jason Sams718cd1f2009-12-23 14:35:29 -0800270 const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
271 size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
272
273 for (int ct=0; ct < fieldCount; ct++) {
274 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
275 nameArray[ct] = _env->GetStringUTFChars(s, NULL);
276 sizeArray[ct] = _env->GetStringUTFLength(s);
277 }
Jason Sams70d4e502010-09-02 17:35:23 -0700278 jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
Jason Sams718cd1f2009-12-23 14:35:29 -0800279 for (int ct=0; ct < fieldCount; ct++) {
280 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
281 _env->ReleaseStringUTFChars(s, nameArray[ct]);
282 }
283 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
Jason Sams70d4e502010-09-02 17:35:23 -0700284 _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
Jason Sams718cd1f2009-12-23 14:35:29 -0800285 free(nameArray);
286 free(sizeArray);
287 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700288}
289
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700290static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700291nElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700292{
293 int dataSize = _env->GetArrayLength(_elementData);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700294 LOG_API("nElementGetNativeData, con(%p)", con);
295
296 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
297 assert(dataSize == 5);
298
299 uint32_t elementData[5];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700300 rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700301
302 for(jint i = 0; i < dataSize; i ++) {
303 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
304 }
305}
306
307
308static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700309nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700310{
311 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700312 LOG_API("nElementGetSubElements, con(%p)", con);
313
314 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
315 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
316
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700317 rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700318
Jason Sams11c8af92010-10-13 15:31:10 -0700319 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700320 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
321 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
322 }
323
324 free(ids);
325 free(names);
326}
327
Jason Samsd19f10d2009-05-22 14:03:28 -0700328// -----------------------------------
329
Jason Sams3b9c52a2010-10-14 17:48:46 -0700330static int
331nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid, jintArray _dims, jintArray _dimValues)
Jason Samsd19f10d2009-05-22 14:03:28 -0700332{
Jason Sams3b9c52a2010-10-14 17:48:46 -0700333 int count = _env->GetArrayLength(_dims);
Jason Samsd19f10d2009-05-22 14:03:28 -0700334 LOG_API("nTypeCreate, con(%p)", con);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700335
336 jint *dimPtr = _env->GetIntArrayElements(_dims, NULL);
337 jint *dimValPtr = _env->GetIntArrayElements(_dimValues, NULL);
338
339 jint id = (jint)rsaTypeCreate(con, (RsElement)eid, count,
340 (RsDimension *)dimPtr, (uint32_t *)dimValPtr);
341
342 _env->ReleaseIntArrayElements(_dims, dimPtr, JNI_ABORT);
343 _env->ReleaseIntArrayElements(_dimValues, dimValPtr, JNI_ABORT);
344 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700345}
346
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700347static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700348nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700349{
350 // We are packing 6 items: mDimX; mDimY; mDimZ;
351 // mDimLOD; mDimFaces; mElement; into typeData
352 int elementCount = _env->GetArrayLength(_typeData);
353
354 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700355 LOG_API("nTypeCreate, con(%p)", con);
356
357 uint32_t typeData[6];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700358 rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700359
360 for(jint i = 0; i < elementCount; i ++) {
361 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
362 }
363}
364
Jason Samsd19f10d2009-05-22 14:03:28 -0700365// -----------------------------------
366
367static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700368nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint e)
Jason Samsd19f10d2009-05-22 14:03:28 -0700369{
Jason Samsd19f10d2009-05-22 14:03:28 -0700370 LOG_API("nAllocationCreateTyped, con(%p), e(%p)", con, (RsElement)e);
Jason Sams31a7e422010-10-26 13:09:17 -0700371 return (jint) rsaAllocationCreateTyped(con, (RsElement)e);
Jason Samsd19f10d2009-05-22 14:03:28 -0700372}
373
Jason Samsd19f10d2009-05-22 14:03:28 -0700374static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700375nAllocationUploadToTexture(JNIEnv *_env, jobject _this, RsContext con, jint a, jboolean genMip, jint mip)
Jason Samsd19f10d2009-05-22 14:03:28 -0700376{
Jason Samsc2908e62010-02-23 17:44:28 -0800377 LOG_API("nAllocationUploadToTexture, con(%p), a(%p), genMip(%i), mip(%i)", con, (RsAllocation)a, genMip, mip);
378 rsAllocationUploadToTexture(con, (RsAllocation)a, genMip, mip);
Jason Samsd19f10d2009-05-22 14:03:28 -0700379}
380
Jason Sams07ae4062009-08-27 20:23:34 -0700381static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700382nAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, RsContext con, jint a)
Jason Sams07ae4062009-08-27 20:23:34 -0700383{
Jason Sams07ae4062009-08-27 20:23:34 -0700384 LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
385 rsAllocationUploadToBufferObject(con, (RsAllocation)a);
386}
387
Jason Samsea84a7c2009-09-04 14:42:41 -0700388static RsElement SkBitmapToPredefined(SkBitmap::Config cfg)
Jason Samsfe08d992009-05-27 14:45:32 -0700389{
Jason Samsffe9f482009-06-01 17:45:53 -0700390 switch (cfg) {
391 case SkBitmap::kA8_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700392 return g_A_8;
Jason Samsffe9f482009-06-01 17:45:53 -0700393 case SkBitmap::kARGB_4444_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700394 return g_RGBA_4444;
Jason Samsffe9f482009-06-01 17:45:53 -0700395 case SkBitmap::kARGB_8888_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700396 return g_RGBA_8888;
Jason Samsffe9f482009-06-01 17:45:53 -0700397 case SkBitmap::kRGB_565_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700398 return g_RGB_565;
Jason Samsfe08d992009-05-27 14:45:32 -0700399
Jason Samsffe9f482009-06-01 17:45:53 -0700400 default:
401 break;
402 }
403 // If we don't have a conversion mark it as a user type.
404 LOGE("Unsupported bitmap type");
Jason Samsea84a7c2009-09-04 14:42:41 -0700405 return NULL;
Jason Samsfe08d992009-05-27 14:45:32 -0700406}
407
Jason Samsffe9f482009-06-01 17:45:53 -0700408static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700409nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
Jason Samsffe9f482009-06-01 17:45:53 -0700410{
Jason Samsffe9f482009-06-01 17:45:53 -0700411 SkBitmap const * nativeBitmap =
412 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
413 const SkBitmap& bitmap(*nativeBitmap);
414 SkBitmap::Config config = bitmap.getConfig();
415
Jason Samsea84a7c2009-09-04 14:42:41 -0700416 RsElement e = SkBitmapToPredefined(config);
417 if (e) {
Jason Samsffe9f482009-06-01 17:45:53 -0700418 bitmap.lockPixels();
419 const int w = bitmap.width();
420 const int h = bitmap.height();
421 const void* ptr = bitmap.getPixels();
Jason Sams31a7e422010-10-26 13:09:17 -0700422 jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Jason Samsffe9f482009-06-01 17:45:53 -0700423 bitmap.unlockPixels();
424 return id;
425 }
426 return 0;
427}
Jason Samsfe08d992009-05-27 14:45:32 -0700428
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700429static void
430nAllocationUpdateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
431{
432 SkBitmap const * nativeBitmap =
433 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
434 const SkBitmap& bitmap(*nativeBitmap);
435 SkBitmap::Config config = bitmap.getConfig();
436
437 RsElement e = SkBitmapToPredefined(config);
438 if (e) {
439 bitmap.lockPixels();
440 const void* ptr = bitmap.getPixels();
441 rsAllocationUpdateFromBitmap(con, (RsAllocation)alloc, e, ptr);
442 bitmap.unlockPixels();
443 }
444}
445
Jason Sams8a647432010-03-01 15:31:04 -0800446static void ReleaseBitmapCallback(void *bmp)
447{
448 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
449 nativeBitmap->unlockPixels();
450}
451
452static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700453nAllocationCreateBitmapRef(JNIEnv *_env, jobject _this, RsContext con, jint type, jobject jbitmap)
Jason Sams8a647432010-03-01 15:31:04 -0800454{
Jason Sams8a647432010-03-01 15:31:04 -0800455 SkBitmap * nativeBitmap =
456 (SkBitmap *)_env->GetIntField(jbitmap, gNativeBitmapID);
457
458
459 nativeBitmap->lockPixels();
460 void* ptr = nativeBitmap->getPixels();
461 jint id = (jint)rsAllocationCreateBitmapRef(con, (RsType)type, ptr, nativeBitmap, ReleaseBitmapCallback);
462 return id;
463}
464
Jason Samsb0ec1b42009-07-28 12:02:16 -0700465static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700466nAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jint native_asset)
Romain Guy650a3eb2009-08-31 14:06:43 -0700467{
Romain Guy650a3eb2009-08-31 14:06:43 -0700468 Asset* asset = reinterpret_cast<Asset*>(native_asset);
469 SkBitmap bitmap;
470 SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
471 &bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
472
473 SkBitmap::Config config = bitmap.getConfig();
474
Jason Samsea84a7c2009-09-04 14:42:41 -0700475 RsElement e = SkBitmapToPredefined(config);
Romain Guy650a3eb2009-08-31 14:06:43 -0700476
Jason Samsea84a7c2009-09-04 14:42:41 -0700477 if (e) {
Romain Guy650a3eb2009-08-31 14:06:43 -0700478 bitmap.lockPixels();
479 const int w = bitmap.width();
480 const int h = bitmap.height();
481 const void* ptr = bitmap.getPixels();
Jason Sams31a7e422010-10-26 13:09:17 -0700482 jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Romain Guy650a3eb2009-08-31 14:06:43 -0700483 bitmap.unlockPixels();
484 return id;
485 }
486 return 0;
487}
488
Jason Samsd19f10d2009-05-22 14:03:28 -0700489static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700490nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700491{
Jason Samsd19f10d2009-05-22 14:03:28 -0700492 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700493 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 -0700494 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700495 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700496 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
497}
498
499static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700500nAllocationSubData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700501{
Jason Sams768bc022009-09-21 19:41:04 -0700502 jint len = _env->GetArrayLength(data);
503 LOG_API("nAllocation1DSubData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
504 jshort *ptr = _env->GetShortArrayElements(data, NULL);
505 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
506 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
507}
508
509static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700510nAllocationSubData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700511{
Jason Sams768bc022009-09-21 19:41:04 -0700512 jint len = _env->GetArrayLength(data);
513 LOG_API("nAllocation1DSubData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
514 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
515 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
516 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
517}
518
519static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700520nAllocationSubData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700521{
Jason Samsd19f10d2009-05-22 14:03:28 -0700522 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700523 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 -0700524 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700525 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700526 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
527}
528
529static void
Jason Sams49bdaf02010-08-31 13:50:42 -0700530// native void rsnAllocationSubElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
531nAllocationSubElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint compIdx, jbyteArray data, int sizeBytes)
532{
533 jint len = _env->GetArrayLength(data);
534 LOG_API("nAllocationSubElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
535 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
536 rsAllocation1DSubElementData(con, (RsAllocation)alloc, offset, ptr, compIdx, sizeBytes);
537 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
538}
539
540static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700541nAllocationSubData2D_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 -0700542{
Jason Samsd19f10d2009-05-22 14:03:28 -0700543 jint len = _env->GetArrayLength(data);
544 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);
545 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700546 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700547 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
548}
549
550static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700551nAllocationSubData2D_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 -0700552{
Jason Samsd19f10d2009-05-22 14:03:28 -0700553 jint len = _env->GetArrayLength(data);
554 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);
555 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700556 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700557 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
558}
559
Jason Sams40a29e82009-08-10 14:55:26 -0700560static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700561nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700562{
Jason Sams40a29e82009-08-10 14:55:26 -0700563 jint len = _env->GetArrayLength(data);
564 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
565 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700566 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700567 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700568}
569
570static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700571nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700572{
Jason Sams40a29e82009-08-10 14:55:26 -0700573 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700574 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700575 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700576 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700577 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700578}
Jason Samsd19f10d2009-05-22 14:03:28 -0700579
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700580static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700581nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700582{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700583 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700584 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700585}
586
Jason Sams5edc6082010-10-05 13:32:49 -0700587static void
588nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
589{
590 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
591 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
592}
593
594static void
595nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
596{
597 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
598 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
599}
600
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700601// -----------------------------------
602
603static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700604nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700605{
606 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700607
608 Asset* asset = reinterpret_cast<Asset*>(native_asset);
609
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700610 jint id = (jint)rsaFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700611 return id;
612}
613
614static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700615nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700616{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700617 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700618 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700619 return numEntries;
620}
621
622static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700623nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700624{
625 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700626 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
627
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700628 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700629
630 for(jint i = 0; i < numEntries; i ++) {
631 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
632 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
633 }
634
635 free(fileEntries);
636}
637
638static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700639nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700640{
641 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700642 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700643 return id;
644}
Jason Samsd19f10d2009-05-22 14:03:28 -0700645
646// -----------------------------------
647
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700648static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700649nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jint fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700650{
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700651 const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
652
653 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
654 return id;
655}
656
657
658// -----------------------------------
659
Jason Samsd19f10d2009-05-22 14:03:28 -0700660static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700661nAdapter1DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700662{
Jason Samsd19f10d2009-05-22 14:03:28 -0700663 LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700664 rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700665}
666
667static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700668nAdapter1DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsd19f10d2009-05-22 14:03:28 -0700669{
Jason Samsd19f10d2009-05-22 14:03:28 -0700670 LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700671 rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
Jason Samsd19f10d2009-05-22 14:03:28 -0700672}
673
674static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700675nAdapter1DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700676{
Jason Samsd19f10d2009-05-22 14:03:28 -0700677 jint len = _env->GetArrayLength(data);
678 LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
679 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700680 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700681 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
682}
683
684static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700685nAdapter1DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700686{
Jason Samsd19f10d2009-05-22 14:03:28 -0700687 jint len = _env->GetArrayLength(data);
688 LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
689 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700690 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700691 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
692}
693
694static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700695nAdapter1DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700696{
Jason Samsd19f10d2009-05-22 14:03:28 -0700697 jint len = _env->GetArrayLength(data);
698 LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
699 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700700 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700701 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
702}
703
704static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700705nAdapter1DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700706{
Jason Samsd19f10d2009-05-22 14:03:28 -0700707 jint len = _env->GetArrayLength(data);
708 LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
709 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700710 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700711 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
712}
713
714static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700715nAdapter1DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700716{
Jason Samsd19f10d2009-05-22 14:03:28 -0700717 LOG_API("nAdapter1DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700718 return (jint)rsAdapter1DCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700719}
720
721// -----------------------------------
722
723static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700724nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700725{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700726 LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700727 rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700728}
729
730static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700731nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700732{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700733 LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700734 rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700735}
736
737static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700738nAdapter2DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700739{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700740 jint len = _env->GetArrayLength(data);
741 LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
742 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700743 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700744 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
745}
746
747static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700748nAdapter2DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700749{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700750 jint len = _env->GetArrayLength(data);
751 LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
752 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700753 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700754 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
755}
756
757static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700758nAdapter2DSubData_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 -0700759{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700760 jint len = _env->GetArrayLength(data);
761 LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
762 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
763 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700764 rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700765 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
766}
767
768static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700769nAdapter2DSubData_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 -0700770{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700771 jint len = _env->GetArrayLength(data);
772 LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
773 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
774 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700775 rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700776 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
777}
778
779static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700780nAdapter2DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700781{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700782 LOG_API("nAdapter2DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700783 return (jint)rsAdapter2DCreate(con);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700784}
785
786// -----------------------------------
787
788static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700789nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700790{
Jason Samsd19f10d2009-05-22 14:03:28 -0700791 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700792 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700793}
794
795static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700796nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700797{
Jason Samscfc04362010-09-14 14:59:03 -0700798 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700799 rsScriptSetVarI(con, (RsScript)script, slot, val);
800}
801
802static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700803nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
804{
805 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
806 rsScriptSetVarJ(con, (RsScript)script, slot, val);
807}
808
809static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700810nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700811{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700812 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700813 rsScriptSetVarF(con, (RsScript)script, slot, val);
814}
815
816static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700817nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
818{
819 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
820 rsScriptSetVarD(con, (RsScript)script, slot, val);
821}
822
823static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700824nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700825{
Jason Sams4d339932010-05-11 14:03:58 -0700826 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
827 jint len = _env->GetArrayLength(data);
828 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
829 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
830 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
831}
832
Jason Samsd19f10d2009-05-22 14:03:28 -0700833
834static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700835nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700836{
Jason Sams07ae4062009-08-27 20:23:34 -0700837 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700838
839 jint length = _env->GetArrayLength(timeZone);
840 jbyte* timeZone_ptr;
841 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
842
Jason Samsbc948de2009-08-17 18:35:48 -0700843 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700844
845 if (timeZone_ptr) {
846 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
847 }
848}
849
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700850static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700851nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700852{
Jason Samsbe2e8412009-09-16 15:04:38 -0700853 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
854 rsScriptInvoke(con, (RsScript)obj, slot);
855}
856
857static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700858nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700859{
Jason Sams4d339932010-05-11 14:03:58 -0700860 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
861 jint len = _env->GetArrayLength(data);
862 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
863 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
864 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
865}
866
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700867
Jason Sams22534172009-08-04 16:58:20 -0700868// -----------------------------------
869
870static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700871nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700872{
Jason Sams22534172009-08-04 16:58:20 -0700873 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700874 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700875}
876
Romain Guy584a3752009-07-30 18:45:01 -0700877static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700878nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700879 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700880{
Jason Samsd19f10d2009-05-22 14:03:28 -0700881 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700882 jint _exception = 0;
883 jint remaining;
884 jbyte* script_base = 0;
885 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700886 if (!scriptRef) {
887 _exception = 1;
888 //_env->ThrowNew(IAEClass, "script == null");
889 goto exit;
890 }
891 if (offset < 0) {
892 _exception = 1;
893 //_env->ThrowNew(IAEClass, "offset < 0");
894 goto exit;
895 }
896 if (length < 0) {
897 _exception = 1;
898 //_env->ThrowNew(IAEClass, "length < 0");
899 goto exit;
900 }
901 remaining = _env->GetArrayLength(scriptRef) - offset;
902 if (remaining < length) {
903 _exception = 1;
904 //_env->ThrowNew(IAEClass, "length > script.length - offset");
905 goto exit;
906 }
907 script_base = (jbyte *)
908 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
909 script_ptr = script_base + offset;
910
Jason Samsbc948de2009-08-17 18:35:48 -0700911 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700912
Jack Palevich43702d82009-05-28 13:38:16 -0700913exit:
914 if (script_base) {
915 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
916 _exception ? JNI_ABORT: 0);
917 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700918}
919
920static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700921nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700922{
Jason Samsd19f10d2009-05-22 14:03:28 -0700923 LOG_API("nScriptCCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700924 return (jint)rsScriptCCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700925}
926
927// ---------------------------------------------------------------------------
928
929static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700930nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700931{
Jason Sams54db59c2010-05-13 18:30:11 -0700932 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
933 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700934}
935
936static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700937nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700938{
Jason Sams54db59c2010-05-13 18:30:11 -0700939 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
940 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700941}
942
943static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700944nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700945{
Jason Sams54db59c2010-05-13 18:30:11 -0700946 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
947 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700948}
949
950static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700951nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700952{
Jason Sams54db59c2010-05-13 18:30:11 -0700953 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
954 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700955}
956
957static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700958nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -0700959{
Jason Sams54db59c2010-05-13 18:30:11 -0700960 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
961 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700962}
963
964static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700965nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700966{
Jason Sams54db59c2010-05-13 18:30:11 -0700967 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
968 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700969}
970
971static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700972nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700973{
Jason Sams54db59c2010-05-13 18:30:11 -0700974 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -0700975 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700976}
977
Jason Sams0011bcf2009-12-15 12:58:36 -0800978// ---------------------------------------------------------------------------
979
980static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700981nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -0800982{
Jason Sams0011bcf2009-12-15 12:58:36 -0800983 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
984 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
985}
Jason Sams54c0ec12009-11-30 14:49:55 -0800986
Jason Sams68afd012009-12-17 16:55:08 -0800987static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700988nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800989{
Jason Sams68afd012009-12-17 16:55:08 -0800990 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
991 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
992}
993
994static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700995nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800996{
Jason Sams68afd012009-12-17 16:55:08 -0800997 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
998 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
999}
1000
Jason Samsd19f10d2009-05-22 14:03:28 -07001001// ---------------------------------------------------------------------------
1002
Jason Samsd19f10d2009-05-22 14:03:28 -07001003static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001004nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001005{
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001006 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1007 jint shaderLen = _env->GetStringUTFLength(shader);
1008 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1009 jint paramLen = _env->GetArrayLength(params);
1010
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001011 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001012
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001013 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001014 _env->ReleaseStringUTFChars(shader, shaderUTF);
1015 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1016 return ret;
1017}
1018
1019
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001020// ---------------------------------------------------------------------------
1021
Jason Sams0011bcf2009-12-15 12:58:36 -08001022static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001023nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001024{
Jason Sams0011bcf2009-12-15 12:58:36 -08001025 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1026 jint shaderLen = _env->GetStringUTFLength(shader);
1027 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1028 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001029
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001030 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001031
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001032 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001033 _env->ReleaseStringUTFChars(shader, shaderUTF);
1034 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1035 return ret;
1036}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001037
Jason Samsebfb4362009-09-23 13:57:02 -07001038// ---------------------------------------------------------------------------
1039
1040static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001041nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001042{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001043 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1044 con, pointSmooth, lineSmooth, pointSprite);
1045 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001046}
1047
1048static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001049nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001050{
Jason Samsebfb4362009-09-23 13:57:02 -07001051 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001052 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1053}
1054
1055static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001056nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001057{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001058 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1059 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001060}
1061
Jason Samsd19f10d2009-05-22 14:03:28 -07001062
1063// ---------------------------------------------------------------------------
1064
1065static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001066nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001067{
Jason Samsd19f10d2009-05-22 14:03:28 -07001068 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001069 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001070}
1071
1072static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001073nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001074{
Jason Sams54db59c2010-05-13 18:30:11 -07001075 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1076 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001077}
1078
1079static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001080nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001081{
Jason Samsd19f10d2009-05-22 14:03:28 -07001082 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001083 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001084}
1085
Jason Sams0826a6f2009-06-15 19:04:56 -07001086static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001087nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001088{
Jason Sams0826a6f2009-06-15 19:04:56 -07001089 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001090 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001091}
1092
Joe Onoratod7b37742009-08-09 22:57:44 -07001093static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001094nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001095{
Jason Samsebfb4362009-09-23 13:57:02 -07001096 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1097 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1098}
1099
Joe Onoratod7b37742009-08-09 22:57:44 -07001100
Jason Sams02fb2cb2009-05-28 15:37:57 -07001101// ---------------------------------------------------------------------------
1102
1103static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001104nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001105{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001106 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001107 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001108}
1109
1110static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001111nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001112{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001113 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001114 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001115}
1116
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001117static void
1118nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1119{
1120 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1121 rsSamplerSet2(con, (RsSamplerParam)p, v);
1122}
1123
Jason Sams02fb2cb2009-05-28 15:37:57 -07001124static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001125nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001126{
Jason Samsbba134c2009-06-22 15:49:21 -07001127 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001128 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001129}
1130
Jason Samsbba134c2009-06-22 15:49:21 -07001131// ---------------------------------------------------------------------------
1132
Jason Samsbba134c2009-06-22 15:49:21 -07001133static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001134nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001135{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001136 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1137 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1138 return id;
1139}
1140
1141static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001142nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001143{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001144 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1145 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001146}
1147
1148static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001149nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001150{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001151 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1152 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1153}
1154
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001155static void
1156nMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
1157{
1158 LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1159 rsMeshInitVertexAttribs(con, (RsMesh)mesh);
1160}
1161
1162
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001163static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001164nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001165{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001166 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1167 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001168 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001169 return vtxCount;
1170}
1171
1172static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001173nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001174{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001175 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1176 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001177 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001178 return idxCount;
1179}
1180
1181static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001182nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001183{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001184 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1185
1186 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001187 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001188
1189 for(jint i = 0; i < numVtxIDs; i ++) {
1190 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1191 }
1192
1193 free(allocs);
1194}
1195
1196static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001197nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001198{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001199 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1200
1201 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1202 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1203
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001204 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001205
1206 for(jint i = 0; i < numIndices; i ++) {
1207 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1208 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1209 }
1210
1211 free(allocs);
1212 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001213}
1214
1215// ---------------------------------------------------------------------------
1216
Jason Samsd19f10d2009-05-22 14:03:28 -07001217
Jason Sams94d8e90a2009-06-10 16:09:05 -07001218static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001219
1220static JNINativeMethod methods[] = {
1221{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001222{"nInitElements", "(IIII)V", (void*)nInitElements },
1223
Jason Samsd19f10d2009-05-22 14:03:28 -07001224{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1225{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
Jason Samsebfb4362009-09-23 13:57:02 -07001226{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
Jason Sams2e1872f2010-08-17 16:25:41 -07001227{"nContextGetMessage", "(I[IZ)I", (void*)nContextGetMessage },
1228{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1229{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001230
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001231
Jason Sams2e1872f2010-08-17 16:25:41 -07001232// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001233{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001234{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001235{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1236{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1237{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001238{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001239{"rsnContextDump", "(II)V", (void*)nContextDump },
1240{"rsnContextPause", "(I)V", (void*)nContextPause },
1241{"rsnContextResume", "(I)V", (void*)nContextResume },
1242{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001243{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001244{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001245
Jason Sams2e1872f2010-08-17 16:25:41 -07001246{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1247{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001248{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001249{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001250
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001251{"rsnFontCreateFromFile", "(ILjava/lang/String;II)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001252
Jason Sams2e1872f2010-08-17 16:25:41 -07001253{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001254{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001255{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001256{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001257
Jason Sams3b9c52a2010-10-14 17:48:46 -07001258{"rsnTypeCreate", "(II[I[I)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001259{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001260
Jason Sams2e1872f2010-08-17 16:25:41 -07001261{"rsnAllocationCreateTyped", "(II)I", (void*)nAllocationCreateTyped },
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -07001262{"rsnAllocationUpdateFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationUpdateFromBitmap },
Jason Sams2e1872f2010-08-17 16:25:41 -07001263{"rsnAllocationCreateFromBitmap", "(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmap },
1264{"rsnAllocationCreateBitmapRef", "(IILandroid/graphics/Bitmap;)I", (void*)nAllocationCreateBitmapRef },
Jason Sams2e1872f2010-08-17 16:25:41 -07001265{"rsnAllocationCreateFromAssetStream","(IIZI)I", (void*)nAllocationCreateFromAssetStream },
1266{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
1267{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
1268{"rsnAllocationSubData1D", "(IIII[II)V", (void*)nAllocationSubData1D_i },
1269{"rsnAllocationSubData1D", "(IIII[SI)V", (void*)nAllocationSubData1D_s },
1270{"rsnAllocationSubData1D", "(IIII[BI)V", (void*)nAllocationSubData1D_b },
1271{"rsnAllocationSubData1D", "(IIII[FI)V", (void*)nAllocationSubData1D_f },
Jason Sams49bdaf02010-08-31 13:50:42 -07001272{"rsnAllocationSubElementData1D", "(IIII[BI)V", (void*)nAllocationSubElementData1D },
Jason Sams2e1872f2010-08-17 16:25:41 -07001273{"rsnAllocationSubData2D", "(IIIIII[II)V", (void*)nAllocationSubData2D_i },
1274{"rsnAllocationSubData2D", "(IIIIII[FI)V", (void*)nAllocationSubData2D_f },
1275{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1276{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001277{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001278{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1279{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001280
Jason Sams2e1872f2010-08-17 16:25:41 -07001281{"rsnAdapter1DBindAllocation", "(III)V", (void*)nAdapter1DBindAllocation },
1282{"rsnAdapter1DSetConstraint", "(IIII)V", (void*)nAdapter1DSetConstraint },
1283{"rsnAdapter1DData", "(II[I)V", (void*)nAdapter1DData_i },
1284{"rsnAdapter1DData", "(II[F)V", (void*)nAdapter1DData_f },
1285{"rsnAdapter1DSubData", "(IIII[I)V", (void*)nAdapter1DSubData_i },
1286{"rsnAdapter1DSubData", "(IIII[F)V", (void*)nAdapter1DSubData_f },
1287{"rsnAdapter1DCreate", "(I)I", (void*)nAdapter1DCreate },
Jason Sams22534172009-08-04 16:58:20 -07001288
Jason Sams2e1872f2010-08-17 16:25:41 -07001289{"rsnAdapter2DBindAllocation", "(III)V", (void*)nAdapter2DBindAllocation },
1290{"rsnAdapter2DSetConstraint", "(IIII)V", (void*)nAdapter2DSetConstraint },
1291{"rsnAdapter2DData", "(II[I)V", (void*)nAdapter2DData_i },
1292{"rsnAdapter2DData", "(II[F)V", (void*)nAdapter2DData_f },
1293{"rsnAdapter2DSubData", "(IIIIII[I)V", (void*)nAdapter2DSubData_i },
1294{"rsnAdapter2DSubData", "(IIIIII[F)V", (void*)nAdapter2DSubData_f },
1295{"rsnAdapter2DCreate", "(I)I", (void*)nAdapter2DCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001296
Jason Sams2e1872f2010-08-17 16:25:41 -07001297{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1298{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1299{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1300{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1301{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001302{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001303{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001304{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001305{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Samsd19f10d2009-05-22 14:03:28 -07001306
Jason Sams2e1872f2010-08-17 16:25:41 -07001307{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1308{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
1309{"rsnScriptCCreate", "(I)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001310
Jason Sams2e1872f2010-08-17 16:25:41 -07001311{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1312{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1313{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1314{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1315{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1316{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1317{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001318
Jason Sams2e1872f2010-08-17 16:25:41 -07001319{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1320{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1321{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001322
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001323{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001324
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001325{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001326{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1327{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001328
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001329{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001330
Jason Sams2e1872f2010-08-17 16:25:41 -07001331{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001332{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001333{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1334{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1335{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001336
Jason Sams2e1872f2010-08-17 16:25:41 -07001337{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1338{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001339{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001340{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001341
Jason Sams2e1872f2010-08-17 16:25:41 -07001342{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1343{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1344{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001345{"rsnMeshInitVertexAttribs", "(II)V", (void*)nMeshInitVertexAttribs },
Jason Sams2e1872f2010-08-17 16:25:41 -07001346
1347{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1348{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001349{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001350{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001351
Jason Samsd19f10d2009-05-22 14:03:28 -07001352};
1353
1354static int registerFuncs(JNIEnv *_env)
1355{
1356 return android::AndroidRuntime::registerNativeMethods(
1357 _env, classPathName, methods, NELEM(methods));
1358}
1359
1360// ---------------------------------------------------------------------------
1361
1362jint JNI_OnLoad(JavaVM* vm, void* reserved)
1363{
1364 JNIEnv* env = NULL;
1365 jint result = -1;
1366
Jason Samsd19f10d2009-05-22 14:03:28 -07001367 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1368 LOGE("ERROR: GetEnv failed\n");
1369 goto bail;
1370 }
1371 assert(env != NULL);
1372
1373 if (registerFuncs(env) < 0) {
1374 LOGE("ERROR: MediaPlayer native registration failed\n");
1375 goto bail;
1376 }
1377
1378 /* success -- return valid version number */
1379 result = JNI_VERSION_1_4;
1380
1381bail:
1382 return result;
1383}
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001384