blob: fe2226983f70820f063b9a3291e96fcf64bdc574 [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
62static void _nInit(JNIEnv *_env, jclass _this)
63{
Jason Samsd19f10d2009-05-22 14:03:28 -070064 gContextId = _env->GetFieldID(_this, "mContext", "I");
Jason Samsffe9f482009-06-01 17:45:53 -070065
66 jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
67 gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
Jason Samsd19f10d2009-05-22 14:03:28 -070068}
69
Jason Samsd19f10d2009-05-22 14:03:28 -070070// ---------------------------------------------------------------------------
71
Jason Sams3eaa338e2009-06-10 15:04:38 -070072static void
Jason Sams2e1872f2010-08-17 16:25:41 -070073nContextFinish(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams96ed4cf2010-06-15 12:15:57 -070074{
Jason Sams96ed4cf2010-06-15 12:15:57 -070075 LOG_API("nContextFinish, con(%p)", con);
76 rsContextFinish(con);
77}
78
79static void
Jason Sams2e1872f2010-08-17 16:25:41 -070080nAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
Jason Sams3eaa338e2009-06-10 15:04:38 -070081{
Jason Sams07ae4062009-08-27 20:23:34 -070082 LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
Jason Sams3eaa338e2009-06-10 15:04:38 -070083 jint len = _env->GetArrayLength(str);
84 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -070085 rsAssignName(con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -070086 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
87}
88
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -070089static jstring
Jason Sams2e1872f2010-08-17 16:25:41 -070090nGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -070091{
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -070092 LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -070093 const char *name = NULL;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -070094 rsaGetName(con, (void *)obj, &name);
95 if(name == NULL || strlen(name) == 0) {
96 return NULL;
97 }
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -070098 return _env->NewStringUTF(name);
99}
100
Jason Sams7ce033d2009-08-18 14:14:24 -0700101static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700102nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Jason Sams7ce033d2009-08-18 14:14:24 -0700103{
Jason Sams7ce033d2009-08-18 14:14:24 -0700104 LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
Jason Sams9c25aee2010-10-14 17:57:30 -0700105 rsObjDestroy(con, (void *)obj);
Jason Sams7ce033d2009-08-18 14:14:24 -0700106}
107
Jason Sams3eaa338e2009-06-10 15:04:38 -0700108// ---------------------------------------------------------------------------
109
Jason Samsd19f10d2009-05-22 14:03:28 -0700110static jint
111nDeviceCreate(JNIEnv *_env, jobject _this)
112{
113 LOG_API("nDeviceCreate");
114 return (jint)rsDeviceCreate();
115}
116
117static void
118nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
119{
120 LOG_API("nDeviceDestroy");
121 return rsDeviceDestroy((RsDevice)dev);
122}
123
Jason Samsebfb4362009-09-23 13:57:02 -0700124static void
125nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
126{
127 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
128 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
129}
130
Jason Samsd19f10d2009-05-22 14:03:28 -0700131static jint
Jason Sams704ff642010-02-09 16:05:07 -0800132nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
Jason Samsd19f10d2009-05-22 14:03:28 -0700133{
134 LOG_API("nContextCreate");
Jason Sams704ff642010-02-09 16:05:07 -0800135 return (jint)rsContextCreate((RsDevice)dev, ver);
136}
137
138static jint
Jason Sams11c8af92010-10-13 15:31:10 -0700139nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
140 int colorMin, int colorPref,
141 int alphaMin, int alphaPref,
142 int depthMin, int depthPref,
143 int stencilMin, int stencilPref,
144 int samplesMin, int samplesPref, float samplesQ)
Jason Sams704ff642010-02-09 16:05:07 -0800145{
Jason Sams11c8af92010-10-13 15:31:10 -0700146 RsSurfaceConfig sc;
147 sc.alphaMin = alphaMin;
148 sc.alphaPref = alphaPref;
149 sc.colorMin = colorMin;
150 sc.colorPref = colorPref;
151 sc.depthMin = depthMin;
152 sc.depthPref = depthPref;
153 sc.samplesMin = samplesMin;
154 sc.samplesPref = samplesPref;
155 sc.samplesQ = samplesQ;
156
Jason Sams704ff642010-02-09 16:05:07 -0800157 LOG_API("nContextCreateGL");
Jason Sams11c8af92010-10-13 15:31:10 -0700158 return (jint)rsContextCreateGL((RsDevice)dev, ver, sc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700159}
160
161static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700162nContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800163{
Jason Sams7d787b42009-11-15 12:14:26 -0800164 LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
165 rsContextSetPriority(con, p);
166}
167
168
169
170static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700171nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800172{
Jason Sams3bc47d42009-11-12 15:10:25 -0800173 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800174
175 Surface * window = NULL;
176 if (wnd == NULL) {
177
178 } else {
Jim Milleree956052010-08-19 18:56:00 -0700179 window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800180 }
181
Jason Sams3bc47d42009-11-12 15:10:25 -0800182 rsContextSetSurface(con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800183}
184
185static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700186nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700187{
Jason Sams2e1872f2010-08-17 16:25:41 -0700188 LOG_API("nContextDestroy, con(%p)", con);
189 rsContextDestroy(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700190}
191
Jason Sams715333b2009-11-17 17:26:46 -0800192static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700193nContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800194{
Jason Sams715333b2009-11-17 17:26:46 -0800195 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
196 rsContextDump((RsContext)con, bits);
197}
Jason Samsd19f10d2009-05-22 14:03:28 -0700198
199static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700200nContextPause(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700201{
Jason Sams65e7aa52009-09-24 17:38:20 -0700202 LOG_API("nContextPause, con(%p)", con);
203 rsContextPause(con);
204}
205
206static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700207nContextResume(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700208{
Jason Sams65e7aa52009-09-24 17:38:20 -0700209 LOG_API("nContextResume, con(%p)", con);
210 rsContextResume(con);
211}
212
Jason Sams1c415172010-11-08 17:06:46 -0800213
214static jstring
215nContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
216{
217 LOG_API("nContextGetErrorMessage, con(%p)", con);
218 char buf[1024];
219
220 size_t receiveLen;
221 uint32_t subID;
222 int id = rsContextGetMessage(con, buf, &receiveLen, &subID, sizeof(buf), true);
223 if (!id && receiveLen) {
224 LOGV("message receive buffer too small. %i", receiveLen);
225 }
226 return _env->NewStringUTF(buf);
227}
228
229static void
230nContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
Jason Sams516c3192009-10-06 13:58:47 -0700231{
Jason Sams516c3192009-10-06 13:58:47 -0700232 jint len = _env->GetArrayLength(data);
233 LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
234 jint *ptr = _env->GetIntArrayElements(data, NULL);
235 size_t receiveLen;
Jason Sams1c415172010-11-08 17:06:46 -0800236 uint32_t subID;
237 int id = rsContextGetMessage(con, ptr, &receiveLen, &subID, len * 4, true);
Jason Sams516c3192009-10-06 13:58:47 -0700238 if (!id && receiveLen) {
Jason Sams1d45c472010-08-25 14:31:48 -0700239 LOGV("message receive buffer too small. %i", receiveLen);
Jason Sams516c3192009-10-06 13:58:47 -0700240 }
241 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams1c415172010-11-08 17:06:46 -0800242}
243
244static jint
245nContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData, jboolean wait)
246{
247 LOG_API("nContextPeekMessage, con(%p)", con);
248 jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
249 size_t receiveLen;
250 uint32_t subID;
251 int id = rsContextPeekMessage(con, &receiveLen, &subID, wait);
252 auxDataPtr[0] = (jint)subID;
253 auxDataPtr[1] = (jint)receiveLen;
254 _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
Jason Sams516c3192009-10-06 13:58:47 -0700255 return id;
256}
257
Jason Sams2e1872f2010-08-17 16:25:41 -0700258static void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700259{
Jason Sams516c3192009-10-06 13:58:47 -0700260 LOG_API("nContextInitToClient, con(%p)", con);
261 rsContextInitToClient(con);
262}
263
Jason Sams2e1872f2010-08-17 16:25:41 -0700264static void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700265{
Jason Sams516c3192009-10-06 13:58:47 -0700266 LOG_API("nContextDeinitToClient, con(%p)", con);
267 rsContextDeinitToClient(con);
268}
269
270
Jason Sams718cd1f2009-12-23 14:35:29 -0800271static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700272nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700273{
Jason Sams718cd1f2009-12-23 14:35:29 -0800274 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
275 return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700276}
277
278static jint
Jason Sams70d4e502010-09-02 17:35:23 -0700279nElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700280{
Jason Sams718cd1f2009-12-23 14:35:29 -0800281 int fieldCount = _env->GetArrayLength(_ids);
Jason Sams704ff642010-02-09 16:05:07 -0800282 LOG_API("nElementCreate2, con(%p)", con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800283
284 jint *ids = _env->GetIntArrayElements(_ids, NULL);
Jason Sams70d4e502010-09-02 17:35:23 -0700285 jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
Jason Sams718cd1f2009-12-23 14:35:29 -0800286 const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
287 size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
288
289 for (int ct=0; ct < fieldCount; ct++) {
290 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
291 nameArray[ct] = _env->GetStringUTFChars(s, NULL);
292 sizeArray[ct] = _env->GetStringUTFLength(s);
293 }
Jason Sams70d4e502010-09-02 17:35:23 -0700294 jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
Jason Sams718cd1f2009-12-23 14:35:29 -0800295 for (int ct=0; ct < fieldCount; ct++) {
296 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
297 _env->ReleaseStringUTFChars(s, nameArray[ct]);
298 }
299 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
Jason Sams70d4e502010-09-02 17:35:23 -0700300 _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
Jason Sams718cd1f2009-12-23 14:35:29 -0800301 free(nameArray);
302 free(sizeArray);
303 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700304}
305
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700306static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700307nElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700308{
309 int dataSize = _env->GetArrayLength(_elementData);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700310 LOG_API("nElementGetNativeData, con(%p)", con);
311
312 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
313 assert(dataSize == 5);
314
315 uint32_t elementData[5];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700316 rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700317
318 for(jint i = 0; i < dataSize; i ++) {
319 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
320 }
321}
322
323
324static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700325nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700326{
327 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700328 LOG_API("nElementGetSubElements, con(%p)", con);
329
330 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
331 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
332
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700333 rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700334
Jason Sams11c8af92010-10-13 15:31:10 -0700335 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700336 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
337 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
338 }
339
340 free(ids);
341 free(names);
342}
343
Jason Samsd19f10d2009-05-22 14:03:28 -0700344// -----------------------------------
345
Jason Sams3b9c52a2010-10-14 17:48:46 -0700346static int
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800347nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
348 jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
Jason Samsd19f10d2009-05-22 14:03:28 -0700349{
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800350 LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
351 con, eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700352
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800353 jint id = (jint)rsaTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700354 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700355}
356
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700357static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700358nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700359{
360 // We are packing 6 items: mDimX; mDimY; mDimZ;
361 // mDimLOD; mDimFaces; mElement; into typeData
362 int elementCount = _env->GetArrayLength(_typeData);
363
364 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700365 LOG_API("nTypeCreate, con(%p)", con);
366
367 uint32_t typeData[6];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700368 rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700369
370 for(jint i = 0; i < elementCount; i ++) {
371 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
372 }
373}
374
Jason Samsd19f10d2009-05-22 14:03:28 -0700375// -----------------------------------
376
377static jint
Jason Sams5476b452010-12-08 16:14:36 -0800378nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage)
Jason Samsd19f10d2009-05-22 14:03:28 -0700379{
Jason Samsd4b23b52010-12-13 15:32:35 -0800380 LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i)", con, (RsElement)type, mips, usage);
381 return (jint) rsaAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage);
Jason Samsd19f10d2009-05-22 14:03:28 -0700382}
383
Jason Samsd19f10d2009-05-22 14:03:28 -0700384static void
Jason Sams5476b452010-12-08 16:14:36 -0800385nAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
386{
387 LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
388 rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
389}
390
Jason Samsffe9f482009-06-01 17:45:53 -0700391static int
Jason Sams5476b452010-12-08 16:14:36 -0800392nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Jason Samsffe9f482009-06-01 17:45:53 -0700393{
Jason Samsffe9f482009-06-01 17:45:53 -0700394 SkBitmap const * nativeBitmap =
395 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
396 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsffe9f482009-06-01 17:45:53 -0700397
Jason Sams5476b452010-12-08 16:14:36 -0800398 bitmap.lockPixels();
399 const void* ptr = bitmap.getPixels();
Jason Samsd4b23b52010-12-13 15:32:35 -0800400 jint id = (jint)rsaAllocationCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
Jason Sams5476b452010-12-08 16:14:36 -0800401 bitmap.unlockPixels();
402 return id;
Jason Samsffe9f482009-06-01 17:45:53 -0700403}
Jason Samsfe08d992009-05-27 14:45:32 -0700404
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800405static int
Jason Sams5476b452010-12-08 16:14:36 -0800406nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800407{
408 SkBitmap const * nativeBitmap =
409 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
410 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800411
Jason Sams5476b452010-12-08 16:14:36 -0800412 bitmap.lockPixels();
413 const void* ptr = bitmap.getPixels();
Jason Samsd4b23b52010-12-13 15:32:35 -0800414 jint id = (jint)rsaAllocationCubeCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
Jason Sams5476b452010-12-08 16:14:36 -0800415 bitmap.unlockPixels();
416 return id;
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800417}
418
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700419static void
Jason Sams4ef66502010-12-10 16:03:15 -0800420nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700421{
422 SkBitmap const * nativeBitmap =
423 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
424 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700425
Jason Sams4ef66502010-12-10 16:03:15 -0800426 bitmap.lockPixels();
427 const void* ptr = bitmap.getPixels();
428 rsAllocationCopyFromBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
429 bitmap.unlockPixels();
430}
431
432static void
433nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
434{
435 SkBitmap const * nativeBitmap =
436 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
437 const SkBitmap& bitmap(*nativeBitmap);
438
439 bitmap.lockPixels();
440 void* ptr = bitmap.getPixels();
441 rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
442 bitmap.unlockPixels();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700443}
444
Jason Sams8a647432010-03-01 15:31:04 -0800445static void ReleaseBitmapCallback(void *bmp)
446{
447 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
448 nativeBitmap->unlockPixels();
449}
450
Romain Guy650a3eb2009-08-31 14:06:43 -0700451
Jason Samsd19f10d2009-05-22 14:03:28 -0700452static void
Jason Sams49a05d72010-12-29 14:31:29 -0800453nAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700454{
Jason Samsd19f10d2009-05-22 14:03:28 -0700455 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800456 LOG_API("nAllocation1DData_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 -0700457 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800458 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700459 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
460}
461
462static void
Jason Sams49a05d72010-12-29 14:31:29 -0800463nAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700464{
Jason Sams768bc022009-09-21 19:41:04 -0700465 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800466 LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700467 jshort *ptr = _env->GetShortArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800468 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700469 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
470}
471
472static void
Jason Sams49a05d72010-12-29 14:31:29 -0800473nAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700474{
Jason Sams768bc022009-09-21 19:41:04 -0700475 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800476 LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700477 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800478 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700479 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
480}
481
482static void
Jason Sams49a05d72010-12-29 14:31:29 -0800483nAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700484{
Jason Samsd19f10d2009-05-22 14:03:28 -0700485 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800486 LOG_API("nAllocation1DData_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 -0700487 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800488 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700489 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
490}
491
492static void
Jason Sams49a05d72010-12-29 14:31:29 -0800493// native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
494nAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
Jason Sams49bdaf02010-08-31 13:50:42 -0700495{
496 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800497 LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
Jason Sams49bdaf02010-08-31 13:50:42 -0700498 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800499 rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, compIdx, sizeBytes);
Jason Sams49bdaf02010-08-31 13:50:42 -0700500 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
501}
502
503static void
Jason Sams49a05d72010-12-29 14:31:29 -0800504nAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
505 jint w, jint h, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700506{
Jason Samsd19f10d2009-05-22 14:03:28 -0700507 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800508 LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
Jason Samsd19f10d2009-05-22 14:03:28 -0700509 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800510 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700511 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
512}
513
514static void
Jason Sams49a05d72010-12-29 14:31:29 -0800515nAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
516 jint w, jint h, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700517{
Jason Samsd19f10d2009-05-22 14:03:28 -0700518 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800519 LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
Jason Samsd19f10d2009-05-22 14:03:28 -0700520 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800521 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700522 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
523}
524
Jason Sams40a29e82009-08-10 14:55:26 -0700525static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700526nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700527{
Jason Sams40a29e82009-08-10 14:55:26 -0700528 jint len = _env->GetArrayLength(data);
529 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
530 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700531 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700532 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700533}
534
535static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700536nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700537{
Jason Sams40a29e82009-08-10 14:55:26 -0700538 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700539 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700540 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700541 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700542 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700543}
Jason Samsd19f10d2009-05-22 14:03:28 -0700544
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700545static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700546nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700547{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700548 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700549 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700550}
551
Jason Sams5edc6082010-10-05 13:32:49 -0700552static void
553nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
554{
555 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
556 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
557}
558
559static void
560nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
561{
562 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
563 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
564}
565
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700566// -----------------------------------
567
568static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700569nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700570{
571 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700572
573 Asset* asset = reinterpret_cast<Asset*>(native_asset);
574
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700575 jint id = (jint)rsaFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700576 return id;
577}
578
579static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700580nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700581{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700582 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700583 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700584 return numEntries;
585}
586
587static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700588nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700589{
590 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700591 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
592
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700593 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700594
595 for(jint i = 0; i < numEntries; i ++) {
596 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
597 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
598 }
599
600 free(fileEntries);
601}
602
603static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700604nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700605{
606 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700607 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700608 return id;
609}
Jason Samsd19f10d2009-05-22 14:03:28 -0700610
611// -----------------------------------
612
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700613static int
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800614nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jfloat fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700615{
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700616 const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
617
618 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
619 return id;
620}
621
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700622// -----------------------------------
623
624static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700625nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700626{
Jason Samsd19f10d2009-05-22 14:03:28 -0700627 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700628 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700629}
630
631static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700632nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700633{
Jason Samscfc04362010-09-14 14:59:03 -0700634 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700635 rsScriptSetVarI(con, (RsScript)script, slot, val);
636}
637
638static void
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800639nScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
640{
641 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
642 rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
643}
644
645static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700646nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
647{
648 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
649 rsScriptSetVarJ(con, (RsScript)script, slot, val);
650}
651
652static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700653nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700654{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700655 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700656 rsScriptSetVarF(con, (RsScript)script, slot, val);
657}
658
659static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700660nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
661{
662 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
663 rsScriptSetVarD(con, (RsScript)script, slot, val);
664}
665
666static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700667nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700668{
Jason Sams4d339932010-05-11 14:03:58 -0700669 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
670 jint len = _env->GetArrayLength(data);
671 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
672 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
673 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
674}
675
Jason Samsd19f10d2009-05-22 14:03:28 -0700676
677static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700678nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700679{
Jason Sams07ae4062009-08-27 20:23:34 -0700680 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700681
682 jint length = _env->GetArrayLength(timeZone);
683 jbyte* timeZone_ptr;
684 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
685
Jason Samsbc948de2009-08-17 18:35:48 -0700686 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700687
688 if (timeZone_ptr) {
689 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
690 }
691}
692
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700693static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700694nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700695{
Jason Samsbe2e8412009-09-16 15:04:38 -0700696 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
697 rsScriptInvoke(con, (RsScript)obj, slot);
698}
699
700static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700701nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700702{
Jason Sams4d339932010-05-11 14:03:58 -0700703 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
704 jint len = _env->GetArrayLength(data);
705 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
706 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
707 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
708}
709
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700710
Jason Sams22534172009-08-04 16:58:20 -0700711// -----------------------------------
712
713static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700714nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700715{
Jason Sams22534172009-08-04 16:58:20 -0700716 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700717 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700718}
719
Romain Guy584a3752009-07-30 18:45:01 -0700720static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700721nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700722 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700723{
Jason Samsd19f10d2009-05-22 14:03:28 -0700724 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700725 jint _exception = 0;
726 jint remaining;
727 jbyte* script_base = 0;
728 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700729 if (!scriptRef) {
730 _exception = 1;
731 //_env->ThrowNew(IAEClass, "script == null");
732 goto exit;
733 }
734 if (offset < 0) {
735 _exception = 1;
736 //_env->ThrowNew(IAEClass, "offset < 0");
737 goto exit;
738 }
739 if (length < 0) {
740 _exception = 1;
741 //_env->ThrowNew(IAEClass, "length < 0");
742 goto exit;
743 }
744 remaining = _env->GetArrayLength(scriptRef) - offset;
745 if (remaining < length) {
746 _exception = 1;
747 //_env->ThrowNew(IAEClass, "length > script.length - offset");
748 goto exit;
749 }
750 script_base = (jbyte *)
751 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
752 script_ptr = script_base + offset;
753
Jason Samsbc948de2009-08-17 18:35:48 -0700754 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700755
Jack Palevich43702d82009-05-28 13:38:16 -0700756exit:
757 if (script_base) {
758 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
759 _exception ? JNI_ABORT: 0);
760 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700761}
762
763static jint
Shih-wei Liaoeeca4352010-12-20 20:45:56 +0800764nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con, jstring packageName, jstring resName, jstring cacheDir)
Jason Samsd19f10d2009-05-22 14:03:28 -0700765{
Jason Samsd19f10d2009-05-22 14:03:28 -0700766 LOG_API("nScriptCCreate, con(%p)", con);
Shih-wei Liaoeeca4352010-12-20 20:45:56 +0800767 const char* packageNameUTF = _env->GetStringUTFChars(packageName, NULL);
Shih-wei Liaoa914f342010-11-08 01:33:59 -0800768 const char* resNameUTF = _env->GetStringUTFChars(resName, NULL);
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800769 const char* cacheDirUTF = _env->GetStringUTFChars(cacheDir, NULL);
Shih-wei Liaoeeca4352010-12-20 20:45:56 +0800770 jint i = (jint)rsScriptCCreate(con, packageNameUTF, resNameUTF, cacheDirUTF);
771 _env->ReleaseStringUTFChars(packageName, packageNameUTF);
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800772 _env->ReleaseStringUTFChars(resName, resNameUTF);
773 _env->ReleaseStringUTFChars(cacheDir, cacheDirUTF);
774 return i;
Jason Samsd19f10d2009-05-22 14:03:28 -0700775}
776
777// ---------------------------------------------------------------------------
778
779static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700780nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700781{
Jason Sams54db59c2010-05-13 18:30:11 -0700782 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
783 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700784}
785
786static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700787nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700788{
Jason Sams54db59c2010-05-13 18:30:11 -0700789 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
790 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700791}
792
793static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700794nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700795{
Jason Sams54db59c2010-05-13 18:30:11 -0700796 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
797 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700798}
799
800static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700801nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700802{
Jason Sams54db59c2010-05-13 18:30:11 -0700803 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
804 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700805}
806
807static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700808nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -0700809{
Jason Sams54db59c2010-05-13 18:30:11 -0700810 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
811 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700812}
813
814static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700815nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700816{
Jason Sams54db59c2010-05-13 18:30:11 -0700817 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
818 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700819}
820
821static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700822nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700823{
Jason Sams54db59c2010-05-13 18:30:11 -0700824 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -0700825 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700826}
827
Jason Sams0011bcf2009-12-15 12:58:36 -0800828// ---------------------------------------------------------------------------
829
830static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700831nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -0800832{
Jason Sams0011bcf2009-12-15 12:58:36 -0800833 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
834 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
835}
Jason Sams54c0ec12009-11-30 14:49:55 -0800836
Jason Sams68afd012009-12-17 16:55:08 -0800837static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700838nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800839{
Jason Sams68afd012009-12-17 16:55:08 -0800840 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
841 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
842}
843
844static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700845nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800846{
Jason Sams68afd012009-12-17 16:55:08 -0800847 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
848 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
849}
850
Jason Samsd19f10d2009-05-22 14:03:28 -0700851// ---------------------------------------------------------------------------
852
Jason Samsd19f10d2009-05-22 14:03:28 -0700853static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700854nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800855{
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800856 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
857 jint shaderLen = _env->GetStringUTFLength(shader);
858 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
859 jint paramLen = _env->GetArrayLength(params);
860
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700861 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800862
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700863 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800864 _env->ReleaseStringUTFChars(shader, shaderUTF);
865 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
866 return ret;
867}
868
869
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700870// ---------------------------------------------------------------------------
871
Jason Sams0011bcf2009-12-15 12:58:36 -0800872static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700873nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700874{
Jason Sams0011bcf2009-12-15 12:58:36 -0800875 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
876 jint shaderLen = _env->GetStringUTFLength(shader);
877 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
878 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700879
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700880 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -0800881
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700882 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -0800883 _env->ReleaseStringUTFChars(shader, shaderUTF);
884 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
885 return ret;
886}
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700887
Jason Samsebfb4362009-09-23 13:57:02 -0700888// ---------------------------------------------------------------------------
889
890static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700891nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -0700892{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700893 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
894 con, pointSmooth, lineSmooth, pointSprite);
895 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -0700896}
897
898static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700899nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -0700900{
Jason Samsebfb4362009-09-23 13:57:02 -0700901 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700902 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
903}
904
905static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700906nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700907{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700908 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
909 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -0700910}
911
Jason Samsd19f10d2009-05-22 14:03:28 -0700912
913// ---------------------------------------------------------------------------
914
915static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700916nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -0700917{
Jason Samsd19f10d2009-05-22 14:03:28 -0700918 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -0700919 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -0700920}
921
922static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700923nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -0700924{
Jason Sams54db59c2010-05-13 18:30:11 -0700925 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
926 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -0700927}
928
929static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700930nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -0700931{
Jason Samsd19f10d2009-05-22 14:03:28 -0700932 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -0700933 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -0700934}
935
Jason Sams0826a6f2009-06-15 19:04:56 -0700936static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700937nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -0700938{
Jason Sams0826a6f2009-06-15 19:04:56 -0700939 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -0700940 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -0700941}
942
Joe Onoratod7b37742009-08-09 22:57:44 -0700943static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700944nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -0700945{
Jason Samsebfb4362009-09-23 13:57:02 -0700946 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
947 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
948}
949
Joe Onoratod7b37742009-08-09 22:57:44 -0700950
Jason Sams02fb2cb2009-05-28 15:37:57 -0700951// ---------------------------------------------------------------------------
952
953static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700954nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -0700955{
Jason Sams02fb2cb2009-05-28 15:37:57 -0700956 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700957 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -0700958}
959
960static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700961nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -0700962{
Jason Sams02fb2cb2009-05-28 15:37:57 -0700963 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -0700964 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -0700965}
966
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -0700967static void
968nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
969{
970 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
971 rsSamplerSet2(con, (RsSamplerParam)p, v);
972}
973
Jason Sams02fb2cb2009-05-28 15:37:57 -0700974static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700975nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -0700976{
Jason Samsbba134c2009-06-22 15:49:21 -0700977 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700978 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -0700979}
980
Jason Samsbba134c2009-06-22 15:49:21 -0700981// ---------------------------------------------------------------------------
982
Jason Samsbba134c2009-06-22 15:49:21 -0700983static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700984nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -0700985{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700986 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
987 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
988 return id;
989}
990
991static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700992nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700993{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700994 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
995 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700996}
997
998static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700999nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001000{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001001 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1002 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1003}
1004
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001005static void
1006nMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
1007{
1008 LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1009 rsMeshInitVertexAttribs(con, (RsMesh)mesh);
1010}
1011
1012
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001013static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001014nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001015{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001016 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1017 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001018 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001019 return vtxCount;
1020}
1021
1022static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001023nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001024{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001025 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1026 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001027 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001028 return idxCount;
1029}
1030
1031static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001032nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001033{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001034 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1035
1036 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001037 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001038
1039 for(jint i = 0; i < numVtxIDs; i ++) {
1040 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1041 }
1042
1043 free(allocs);
1044}
1045
1046static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001047nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001048{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001049 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1050
1051 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1052 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1053
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001054 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001055
1056 for(jint i = 0; i < numIndices; i ++) {
1057 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1058 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1059 }
1060
1061 free(allocs);
1062 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001063}
1064
1065// ---------------------------------------------------------------------------
1066
Jason Samsd19f10d2009-05-22 14:03:28 -07001067
Jason Sams94d8e90a2009-06-10 16:09:05 -07001068static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001069
1070static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001071{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001072
Jason Sams1c415172010-11-08 17:06:46 -08001073{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1074{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
1075{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
1076{"nContextGetUserMessage", "(I[I)V", (void*)nContextGetUserMessage },
1077{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1078{"nContextPeekMessage", "(I[IZ)I", (void*)nContextPeekMessage },
1079
1080{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1081{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001082
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001083
Jason Sams2e1872f2010-08-17 16:25:41 -07001084// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001085{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001086{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001087{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1088{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1089{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001090{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001091{"rsnContextDump", "(II)V", (void*)nContextDump },
1092{"rsnContextPause", "(I)V", (void*)nContextPause },
1093{"rsnContextResume", "(I)V", (void*)nContextResume },
1094{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001095{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001096{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001097
Jason Sams2e1872f2010-08-17 16:25:41 -07001098{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1099{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001100{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001101{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001102
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -08001103{"rsnFontCreateFromFile", "(ILjava/lang/String;FI)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001104
Jason Sams2e1872f2010-08-17 16:25:41 -07001105{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001106{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001107{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001108{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001109
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001110{"rsnTypeCreate", "(IIIIIZZ)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001111{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001112
Jason Samsd4b23b52010-12-13 15:32:35 -08001113{"rsnAllocationCreateTyped", "(IIII)I", (void*)nAllocationCreateTyped },
Jason Sams5476b452010-12-08 16:14:36 -08001114{"rsnAllocationCreateFromBitmap", "(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCreateFromBitmap },
1115{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08001116
Jason Sams4ef66502010-12-10 16:03:15 -08001117{"rsnAllocationCopyFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
1118{"rsnAllocationCopyToBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
1119
Jason Sams5476b452010-12-08 16:14:36 -08001120{"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll },
Jason Sams49a05d72010-12-29 14:31:29 -08001121{"rsnAllocationData1D", "(IIIII[II)V", (void*)nAllocationData1D_i },
1122{"rsnAllocationData1D", "(IIIII[SI)V", (void*)nAllocationData1D_s },
1123{"rsnAllocationData1D", "(IIIII[BI)V", (void*)nAllocationData1D_b },
1124{"rsnAllocationData1D", "(IIIII[FI)V", (void*)nAllocationData1D_f },
1125{"rsnAllocationElementData1D", "(IIIII[BI)V", (void*)nAllocationElementData1D },
1126{"rsnAllocationData2D", "(IIIIIIII[II)V", (void*)nAllocationData2D_i },
1127{"rsnAllocationData2D", "(IIIIIIII[FI)V", (void*)nAllocationData2D_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001128{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1129{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001130{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001131{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1132{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001133
Jason Sams2e1872f2010-08-17 16:25:41 -07001134{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1135{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1136{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1137{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1138{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001139{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001140{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001141{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001142{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001143{"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001144
Jason Sams2e1872f2010-08-17 16:25:41 -07001145{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1146{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
Shih-wei Liaoeeca4352010-12-20 20:45:56 +08001147{"rsnScriptCCreate", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001148
Jason Sams2e1872f2010-08-17 16:25:41 -07001149{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1150{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1151{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1152{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1153{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1154{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1155{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001156
Jason Sams2e1872f2010-08-17 16:25:41 -07001157{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1158{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1159{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001160
Jason Sams49a05d72010-12-29 14:31:29 -08001161{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001162
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001163{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001164{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1165{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001166
Jason Sams49a05d72010-12-29 14:31:29 -08001167{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001168
Jason Sams2e1872f2010-08-17 16:25:41 -07001169{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001170{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001171{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1172{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1173{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001174
Jason Sams2e1872f2010-08-17 16:25:41 -07001175{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1176{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001177{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001178{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001179
Jason Sams2e1872f2010-08-17 16:25:41 -07001180{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1181{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1182{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001183{"rsnMeshInitVertexAttribs", "(II)V", (void*)nMeshInitVertexAttribs },
Jason Sams2e1872f2010-08-17 16:25:41 -07001184
1185{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1186{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001187{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001188{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001189
Jason Samsd19f10d2009-05-22 14:03:28 -07001190};
1191
1192static int registerFuncs(JNIEnv *_env)
1193{
1194 return android::AndroidRuntime::registerNativeMethods(
1195 _env, classPathName, methods, NELEM(methods));
1196}
1197
1198// ---------------------------------------------------------------------------
1199
1200jint JNI_OnLoad(JavaVM* vm, void* reserved)
1201{
1202 JNIEnv* env = NULL;
1203 jint result = -1;
1204
Jason Samsd19f10d2009-05-22 14:03:28 -07001205 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1206 LOGE("ERROR: GetEnv failed\n");
1207 goto bail;
1208 }
1209 assert(env != NULL);
1210
1211 if (registerFuncs(env) < 0) {
1212 LOGE("ERROR: MediaPlayer native registration failed\n");
1213 goto bail;
1214 }
1215
1216 /* success -- return valid version number */
1217 result = JNI_VERSION_1_4;
1218
1219bail:
1220 return result;
1221}