android_renderscript_RenderScript.cpp revision c89ad4606ae29e103b85bdfc40c57e36c8877dba
1c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main/*
2c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Copyright (C) 2011-2012 The Android Open Source Project
3c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main *
4c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Licensed under the Apache License, Version 2.0 (the "License");
5c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * you may not use this file except in compliance with the License.
6c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * You may obtain a copy of the License at
7c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main *
8c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main *      http://www.apache.org/licenses/LICENSE-2.0
9c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main *
10c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Unless required by applicable law or agreed to in writing, software
11c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * distributed under the License is distributed on an "AS IS" BASIS,
12c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * See the License for the specific language governing permissions and
14c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * limitations under the License.
15c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main */
16c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
17c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_TAG "libRS_jni"
18c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
19c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <stdlib.h>
20c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <stdio.h>
21c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <fcntl.h>
22c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <unistd.h>
23c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <math.h>
24c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <utils/misc.h>
25c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <android/bitmap.h>
26c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include "jni.h"
27c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include "JNIHelp.h"
28c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include "android_runtime/AndroidRuntime.h"
29c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <rs.h>
30c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <rsEnv.h>
31c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
32c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <core/SkBitmap.h>
33c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <core/SkPixelRef.h>
34c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <core/SkStream.h>
35c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <core/SkTemplates.h>
36c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//#include <images/SkImageDecoder.h>
37c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
38c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//#define LOG_API ALOG
39c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_API(...)
40c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
41c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainusing namespace android;
42c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
43c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringToUTF8 {
44c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic:
45c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
46c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fCStr = env->GetStringUTFChars(str, NULL);
47c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fLength = env->GetStringUTFLength(str);
48c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
49c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    ~AutoJavaStringToUTF8() {
50c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
51c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
52c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char* c_str() const { return fCStr; }
53c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length() const { return fLength; }
54c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
55c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate:
56c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv*     fEnv;
57c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jstring     fJStr;
58c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char* fCStr;
59c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize       fLength;
60c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
61c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
62c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringArrayToUTF8 {
63c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic:
64c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
65c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
66c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        mCStrings = NULL;
67c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        mSizeArray = NULL;
68c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        if (stringsLength > 0) {
69c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
70c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
71c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            for (jsize ct = 0; ct < stringsLength; ct ++) {
72c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
73c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL);
74c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
75c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            }
76c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        }
77c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
78c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    ~AutoJavaStringArrayToUTF8() {
79c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        for (jsize ct=0; ct < mStringsLength; ct++) {
80c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
81c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
82c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        }
83c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        free(mCStrings);
84c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        free(mSizeArray);
85c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
86c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **c_str() const { return mCStrings; }
87c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t *c_str_len() const { return mSizeArray; }
88c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length() const { return mStringsLength; }
89c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
90c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate:
91c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv      *mEnv;
92c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jobjectArray mStrings;
93c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **mCStrings;
94c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t      *mSizeArray;
95c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize        mStringsLength;
96c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
97c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
98c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
99c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
100c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jfieldID gContextId = 0;
101c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jfieldID gNativeBitmapID = 0;
102c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jfieldID gTypeNativeCache = 0;
103c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
104c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void _nInit(JNIEnv *_env, jclass _this)
105c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
106c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    gContextId             = _env->GetFieldID(_this, "mContext", "I");
107c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
108c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
109c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
110c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
111c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
112c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
113c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
114c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
115c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextFinish(JNIEnv *_env, jobject _this, RsContext con)
116c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
117c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextFinish, con(%p)", con);
118c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsContextFinish(con);
119c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
120c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
121c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
122c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
123c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
124c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
125c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsObjDestroy(con, (void *)obj);
126c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
127c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
128c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
129c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
130c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
131c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceCreate(JNIEnv *_env, jobject _this)
132c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
133c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceCreate");
134c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)rsDeviceCreate();
135c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
136c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
137c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
138c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
139c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
140c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceDestroy");
141c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return rsDeviceDestroy((RsDevice)dev);
142c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
143c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
144c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
145c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
146c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
147c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
148c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
149c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
150c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
151c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
152c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer, jint ct)
153c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
154c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextCreate");
155c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)rsContextCreate((RsDevice)dev, ver, sdkVer, (RsContextType)ct, false, false);
156c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
157c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
158c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
159c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
160c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
161c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
162c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
163c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsContextSetPriority(con, p);
164c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
165c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
166c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
167c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
168c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
169c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
170c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
171c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextDestroy, con(%p)", con);
172c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsContextDestroy(con);
173c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
174c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
175c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
176c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
177c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
178c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
179c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsContextDump((RsContext)con, bits);
180c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
181c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
182c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
183c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jstring
184c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
185c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
186c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextGetErrorMessage, con(%p)", con);
187c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    char buf[1024];
188c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
189c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
190c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
191c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    int id = rsContextGetMessage(con,
192c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 buf, sizeof(buf),
193c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &receiveLen, sizeof(receiveLen),
194c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &subID, sizeof(subID));
195c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!id && receiveLen) {
196c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        ALOGV("message receive buffer too small.  %i", receiveLen);
197c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
198c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return _env->NewStringUTF(buf);
199c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
200c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
201c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
202c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
203c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
204c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
205c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
206c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
207c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
208c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
209c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    int id = rsContextGetMessage(con,
210c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 ptr, len * 4,
211c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &receiveLen, sizeof(receiveLen),
212c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &subID, sizeof(subID));
213c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!id && receiveLen) {
214c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        ALOGV("message receive buffer too small.  %i", receiveLen);
215c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
216c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, 0);
217c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
218c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
219c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
220c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
221c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData)
222c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
223c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextPeekMessage, con(%p)", con);
224c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
225c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
226c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
227c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    int id = rsContextPeekMessage(con, &receiveLen, sizeof(receiveLen),
228c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                  &subID, sizeof(subID));
229c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    auxDataPtr[0] = (jint)subID;
230c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    auxDataPtr[1] = (jint)receiveLen;
231c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
232c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
233c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
234c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
235c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
236c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
237c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextInitToClient, con(%p)", con);
238c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsContextInitToClient(con);
239c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
242c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
243c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextDeinitToClient, con(%p)", con);
244c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsContextDeinitToClient(con);
245c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
246c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
247c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
248c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextSendMessage(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray data)
249c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
250c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = NULL;
251c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = 0;
252c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (data) {
253c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        len = _env->GetArrayLength(data);
254c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        jint *ptr = _env->GetIntArrayElements(data, NULL);
255c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
256c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", con, id, len);
257c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsContextSendMessage(con, id, (const uint8_t *)ptr, len * sizeof(int));
258c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (data) {
259c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
260c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
261c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
262c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
263c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
264c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
265c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
266c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
267c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
268c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
269c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
270c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
271c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
272c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
273c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnElementCreate2(JNIEnv *_env, jobject _this, RsContext con,
274c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                jintArray _ids, jobjectArray _names, jintArray _arraySizes)
275c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
276c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    int fieldCount = _env->GetArrayLength(_ids);
277c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nElementCreate2, con(%p)", con);
278c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
279c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ids = _env->GetIntArrayElements(_ids, NULL);
280c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
281c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
282c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
283c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
284c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **nameArray = names.c_str();
285c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t *sizeArray = names.c_str_len();
286c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
287c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint id = (jint)rsElementCreate2(con,
288c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     (RsElement *)ids, fieldCount,
289c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
290c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     (const uint32_t *)arraySizes, fieldCount);
291c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
292c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
293c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
294c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)id;
295c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
296c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
297c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
298c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
299c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
300c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id,
301c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jintArray _IDs,
302c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jobjectArray _names,
303c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jintArray _arraySizes)
304c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
305c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    int dataSize = _env->GetArrayLength(_IDs);
306c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nElementGetSubElements, con(%p)", con);
307c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
308c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
309c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
310c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
311c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
312c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsaElementGetSubElements(con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
313c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
314c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    for(jint i = 0; i < dataSize; i++) {
315c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
316c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
317c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->SetIntArrayRegion(_arraySizes, i, 1, (const jint*)&arraySizes[i]);
318c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
319c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
320c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(ids);
321c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(names);
322c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(arraySizes);
323c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
324c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
325c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
326c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
327c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic int
328c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
329c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
330c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
331c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
332c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            con, eid, dimx, dimy, dimz, mips, faces, yuv);
333c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
334c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint id = (jint)rsTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces, yuv);
335c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)id;
336c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
337c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
339c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
340c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
341c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage, jint pointer)
342c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
343c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", con, (RsElement)type, mips, usage, (void *)pointer);
344c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint) rsAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uint32_t)pointer);
345c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
346c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
347c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
348c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
349c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
350c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
351c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
352c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
353c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
354c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
355c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
356c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
357c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
358c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocationGenerateMipmaps(con, (RsAllocation)alloc);
359c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
360c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
361c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic size_t GetBitmapSize(JNIEnv *env, jobject jbitmap) {
362c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
363c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
364c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(env, jbitmap, &info);
365c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t s = info.width * info.height;
366c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    switch (info.format) {
367c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGBA_8888: s *= 4; break;
368c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGB_565: s *= 2; break;
369c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGBA_4444: s *= 2; break;
370c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
371c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return s;
372c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
373c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
374c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic int
375c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
376c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
377c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    SkBitmap const * nativeBitmap =
378c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
379c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const SkBitmap& bitmap(*nativeBitmap);
380c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
381c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    bitmap.lockPixels();
382c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const void* ptr = bitmap.getPixels();
383c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint id = (jint)rsAllocationCreateFromBitmap(con,
384c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                                  (RsType)type, (RsAllocationMipmapControl)mip,
385c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                                  ptr, bitmap.getSize(), usage);
386c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    bitmap.unlockPixels();
387c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
388c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
389c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
390c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic int
391c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
392c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
393c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    SkBitmap const * nativeBitmap =
394c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
395c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const SkBitmap& bitmap(*nativeBitmap);
396c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
397c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    bitmap.lockPixels();
398c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const void* ptr = bitmap.getPixels();
399c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint id = (jint)rsAllocationCreateTyped(con,
400c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                            (RsType)type, (RsAllocationMipmapControl)mip,
401c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                            (uint32_t)usage, (size_t)ptr);
402c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    bitmap.unlockPixels();
403c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
404c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
405c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
406c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic int
407c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
408c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
409c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
410c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
411c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
412c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint id = 0;
413c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
414c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        id = (jint)rsAllocationCubeCreateFromBitmap(con,
415c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                                    (RsType)type, (RsAllocationMipmapControl)mip,
416c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                                    pixels, GetBitmapSize(_env, jbitmap), usage);
417c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
418c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
419c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
420c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
421c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
422c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
423c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
424c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
425c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
426c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
427c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(_env, jbitmap, &info);
428c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
429c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
430c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
431c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
432c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
433c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        rsAllocation2DData(con, (RsAllocation)alloc, 0, 0,
434c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                           0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
435c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                           info.width, info.height, pixels, GetBitmapSize(_env, jbitmap), 0);
436c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
437c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
438c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
439c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
440c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
441c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
442c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
443c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
444c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
445c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(_env, jbitmap, &info);
446c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
447c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
448c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
449c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
450c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
451c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        rsAllocationCopyToBitmap(con, (RsAllocation)alloc, pixels, GetBitmapSize(_env, jbitmap));
452c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
453c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
454c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    //bitmap.notifyPixelsChanged();
455c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
456c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
457c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
458c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
459c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
460c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
461c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
462c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
463c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
464c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
465c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
466c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
467c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
468c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
469c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
470c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
471c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
472c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
473c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
475c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
476c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
477c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
478c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
479c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
480c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
481c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
482c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
483c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
484c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
485c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
486c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
487c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
488c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
489c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
490c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
491c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
492c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
493c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
494c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
495c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
496c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
497c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
498c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
499c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
500c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
501c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
502c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
503c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
504c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
505c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
506c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
507c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
508c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
509c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
510c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
511c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jshortArray data, int sizeBytes)
512c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
513c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
514c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation2DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
515c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
516c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
517c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
518c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
519c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
520c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
521c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
522c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jbyteArray data, int sizeBytes)
523c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
524c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
525c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation2DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
526c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
527c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
528c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
529c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
530c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
531c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
532c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
533c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jintArray data, int sizeBytes)
534c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
535c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
536c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    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);
537c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
538c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
539c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
540c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
541c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
542c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
543c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
544c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jfloatArray data, int sizeBytes)
545c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
546c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
547c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    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);
548c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
549c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
550c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
551c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
552c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
553c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
554c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData2D_alloc(JNIEnv *_env, jobject _this, RsContext con,
555c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstAlloc, jint dstXoff, jint dstYoff,
556c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstMip, jint dstFace,
557c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint width, jint height,
558c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcAlloc, jint srcXoff, jint srcYoff,
559c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcMip, jint srcFace)
560c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
561c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
562c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " dstMip(%i), dstFace(%i), width(%i), height(%i),"
563c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
564c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
565c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
566c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
567c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocationCopy2DRange(con,
568c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            (RsAllocation)dstAlloc,
569c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            dstXoff, dstYoff,
570c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            dstMip, dstFace,
571c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            width, height,
572c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            (RsAllocation)srcAlloc,
573c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            srcXoff, srcYoff,
574c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            srcMip, srcFace);
575c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
576c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
577c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
578c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData3D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod,
579c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jint d, jshortArray data, int sizeBytes)
580c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
581c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
582c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation3DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
583c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
584c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
585c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
586c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
587c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
588c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
589c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData3D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod,
590c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jint d, jbyteArray data, int sizeBytes)
591c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
592c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
593c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation3DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
594c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
595c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
596c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
597c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
598c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
599c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
600c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData3D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod,
601c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jint d, jintArray data, int sizeBytes)
602c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
603c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
604c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation3DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
605c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
606c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
607c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
608c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
609c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
610c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
611c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData3D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod,
612c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jint d, jfloatArray data, int sizeBytes)
613c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
614c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
615c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation3DData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
616c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
617c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
618c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
619c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
620c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
621c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
622c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData3D_alloc(JNIEnv *_env, jobject _this, RsContext con,
623c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
624c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstMip,
625c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint width, jint height, jint depth,
626c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
627c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcMip)
628c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
629c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
630c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " dstMip(%i), width(%i), height(%i),"
631c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
632c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
633c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
634c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
635c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocationCopy3DRange(con,
636c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            (RsAllocation)dstAlloc,
637c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            dstXoff, dstYoff, dstZoff, dstMip,
638c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            width, height, depth,
639c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            (RsAllocation)srcAlloc,
640c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            srcXoff, srcYoff, srcZoff, srcMip);
641c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
642c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
643c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
644c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
645c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
646c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
647c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
648c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
649c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
650c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(int));
651c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, 0);
652c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
653c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
654c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
655c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
656c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
657c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
658c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
659c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
660c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
661c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(short));
662c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, 0);
663c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
664c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
665c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
666c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
667c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
668c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
669c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
670c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
671c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
672c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(char));
673c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, 0);
674c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
675c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
676c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
677c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
678c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
679c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
680c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
681c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
682c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
683c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(float));
684c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, 0);
685c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
686c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
687c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
688c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
689c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
690c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
691c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint) rsaAllocationGetType(con, (RsAllocation)a);
692c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
693c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
694c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
695c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
696c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
697c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
698c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
699c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
700c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
701c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
702c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
703c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
704c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
705c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
706c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
707c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
708c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
709c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
710c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
711c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
712c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
713c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
714c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptSetVarI(con, (RsScript)script, slot, val);
715c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
716c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
717c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
718c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
719c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
720c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
721c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
722c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
723c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
724c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
725c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
726c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
727c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
728c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptSetVarJ(con, (RsScript)script, slot, val);
729c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
730c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
731c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
732c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
733c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
734c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
735c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptSetVarF(con, (RsScript)script, slot, val);
736c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
737c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
738c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
739c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
740c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
741c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
742c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptSetVarD(con, (RsScript)script, slot, val);
743c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
744c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
745c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
746c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
747c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
748c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
749c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
750c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
751c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
752c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
753c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
754c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
755c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
756c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarVE(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data, jint elem, jintArray dims)
757c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
758c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
759c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
760c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
761c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
762c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
763c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptSetVarVE(con, (RsScript)script, slot, ptr, len, (RsElement)elem,
764c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                     (const size_t*) dimsPtr, dimsLen);
765c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
766c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
767c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
768c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
769c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
770c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
771c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
772c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
773c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
774c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
775c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint length = _env->GetArrayLength(timeZone);
776c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte* timeZone_ptr;
777c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
778c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
779c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
780c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
781c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (timeZone_ptr) {
782c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
783c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
784c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
785c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
786c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
787c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
788c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
789c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
790c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptInvoke(con, (RsScript)obj, slot);
791c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
792c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
793c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
794c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
795c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
796c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
797c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
798c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
799c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
800c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
801c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
802c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
803c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
804c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptForEach(JNIEnv *_env, jobject _this, RsContext con,
805c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jint script, jint slot, jint ain, jint aout)
806c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
807c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
808c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, NULL, 0);
809c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
810c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
811c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptForEachV(JNIEnv *_env, jobject _this, RsContext con,
812c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                jint script, jint slot, jint ain, jint aout, jbyteArray params)
813c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
814c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
815c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(params);
816c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
817c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, NULL, 0);
818c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
819c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
820c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
821c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
822c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptForEachClipped(JNIEnv *_env, jobject _this, RsContext con,
823c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                      jint script, jint slot, jint ain, jint aout,
824c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                      jint xstart, jint xend,
825c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                      jint ystart, jint yend, jint zstart, jint zend)
826c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
827c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
828c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    RsScriptCall sc;
829c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xStart = xstart;
830c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xEnd = xend;
831c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yStart = ystart;
832c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yEnd = yend;
833c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zStart = zstart;
834c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zEnd = zend;
835c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
836c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayStart = 0;
837c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayEnd = 0;
838c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, &sc, sizeof(sc));
839c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
840c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
841c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
842c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptForEachClippedV(JNIEnv *_env, jobject _this, RsContext con,
843c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jint script, jint slot, jint ain, jint aout,
844c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jbyteArray params, jint xstart, jint xend,
845c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jint ystart, jint yend, jint zstart, jint zend)
846c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
847c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
848c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(params);
849c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
850c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    RsScriptCall sc;
851c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xStart = xstart;
852c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xEnd = xend;
853c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yStart = ystart;
854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yEnd = yend;
855c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zStart = zstart;
856c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zEnd = zend;
857c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
858c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayStart = 0;
859c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayEnd = 0;
860c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, &sc, sizeof(sc));
861c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
862c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
863c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
864c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
865c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
866c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
867c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptCCreate(JNIEnv *_env, jobject _this, RsContext con,
868c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jstring resName, jstring cacheDir,
869c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jbyteArray scriptRef, jint length)
870c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
871c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptCCreate, con(%p)", con);
872c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
873c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8 resNameUTF(_env, resName);
874c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
875c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint ret = 0;
876c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte* script_ptr = NULL;
877c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint _exception = 0;
878c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint remaining;
879c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!scriptRef) {
880c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
881c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
882c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
883c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
884c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (length < 0) {
885c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
886c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
887c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
888c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
889c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    remaining = _env->GetArrayLength(scriptRef);
890c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (remaining < length) {
891c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
892c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException",
893c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //        "length > script.length - offset");
894c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
895c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
896c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    script_ptr = (jbyte *)
897c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
898c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
899c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    //rsScriptCSetText(con, (const char *)script_ptr, length);
900c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
901c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    ret = (jint)rsScriptCCreate(con,
902c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                resNameUTF.c_str(), resNameUTF.length(),
903c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                cacheDirUTF.c_str(), cacheDirUTF.length(),
904c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                (const char *)script_ptr, length);
905c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
906c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainexit:
907c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (script_ptr) {
908c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
909c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                _exception ? JNI_ABORT: 0);
910c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
911c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
912c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return ret;
913c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
914c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
915c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
916c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptIntrinsicCreate(JNIEnv *_env, jobject _this, RsContext con, jint id, jint eid)
917c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
918c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", con, id, (void *)eid);
919c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)rsScriptIntrinsicCreate(con, id, (RsElement)eid);
920c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
921c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
922c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
923c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptKernelIDCreate(JNIEnv *_env, jobject _this, RsContext con, jint sid, jint slot, jint sig)
924c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
925c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con, (void *)sid, slot, sig);
926c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)rsScriptKernelIDCreate(con, (RsScript)sid, slot, sig);
927c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
928c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
929c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
930c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptFieldIDCreate(JNIEnv *_env, jobject _this, RsContext con, jint sid, jint slot)
931c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
932c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", con, (void *)sid, slot);
933c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)rsScriptFieldIDCreate(con, (RsScript)sid, slot);
934c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
935c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
936c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
937c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptGroupCreate(JNIEnv *_env, jobject _this, RsContext con, jintArray _kernels, jintArray _src,
938c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jintArray _dstk, jintArray _dstf, jintArray _types)
939c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
940c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptGroupCreate, con(%p)", con);
941c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
942c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint kernelsLen = _env->GetArrayLength(_kernels) * sizeof(int);
943c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *kernelsPtr = _env->GetIntArrayElements(_kernels, NULL);
944c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint srcLen = _env->GetArrayLength(_src) * sizeof(int);
945c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *srcPtr = _env->GetIntArrayElements(_src, NULL);
946c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint dstkLen = _env->GetArrayLength(_dstk) * sizeof(int);
947c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *dstkPtr = _env->GetIntArrayElements(_dstk, NULL);
948c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint dstfLen = _env->GetArrayLength(_dstf) * sizeof(int);
949c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *dstfPtr = _env->GetIntArrayElements(_dstf, NULL);
950c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint typesLen = _env->GetArrayLength(_types) * sizeof(int);
951c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *typesPtr = _env->GetIntArrayElements(_types, NULL);
952c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
953c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    int id = (int)rsScriptGroupCreate(con,
954c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                               (RsScriptKernelID *)kernelsPtr, kernelsLen,
955c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                               (RsScriptKernelID *)srcPtr, srcLen,
956c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                               (RsScriptKernelID *)dstkPtr, dstkLen,
957c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                               (RsScriptFieldID *)dstfPtr, dstfLen,
958c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                               (RsType *)typesPtr, typesLen);
959c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
960c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_kernels, kernelsPtr, 0);
961c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_src, srcPtr, 0);
962c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_dstk, dstkPtr, 0);
963c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_dstf, dstfPtr, 0);
964c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_types, typesPtr, 0);
965c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
966c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
967c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
968c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
969c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptGroupSetInput(JNIEnv *_env, jobject _this, RsContext con, jint gid, jint kid, jint alloc)
970c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
971c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", con,
972c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        (void *)gid, (void *)kid, (void *)alloc);
973c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptGroupSetInput(con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
974c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
975c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
976c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
977c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptGroupSetOutput(JNIEnv *_env, jobject _this, RsContext con, jint gid, jint kid, jint alloc)
978c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
979c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", con,
980c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        (void *)gid, (void *)kid, (void *)alloc);
981c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptGroupSetOutput(con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
982c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
983c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
984c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
985c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptGroupExecute(JNIEnv *_env, jobject _this, RsContext con, jint gid)
986c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
987c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", con, (void *)gid);
988c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    rsScriptGroupExecute(con, (RsScriptGroup)gid);
989c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
990c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
991c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
992c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
993c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
994c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnSamplerCreate(JNIEnv *_env, jobject _this, RsContext con, jint magFilter, jint minFilter,
995c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
996c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
997c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nSamplerCreate, con(%p)", con);
998c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)rsSamplerCreate(con,
999c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 (RsSamplerValue)magFilter,
1000c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 (RsSamplerValue)minFilter,
1001c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 (RsSamplerValue)wrapS,
1002c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 (RsSamplerValue)wrapT,
1003c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 (RsSamplerValue)wrapR,
1004c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 aniso);
1005c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1006c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1007c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1008c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1009c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1010c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic const char *classPathName = "android/support/v8/renderscript/RenderScript";
1011c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1012c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic JNINativeMethod methods[] = {
1013c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"_nInit",                         "()V",                                     (void*)_nInit },
1014c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1015c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nDeviceCreate",                  "()I",                                     (void*)nDeviceCreate },
1016c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nDeviceDestroy",                 "(I)V",                                    (void*)nDeviceDestroy },
1017c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nDeviceSetConfig",               "(III)V",                                  (void*)nDeviceSetConfig },
1018c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nContextGetUserMessage",         "(I[I)I",                                  (void*)nContextGetUserMessage },
1019c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nContextGetErrorMessage",        "(I)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1020c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nContextPeekMessage",            "(I[I)I",                                  (void*)nContextPeekMessage },
1021c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1022c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nContextInitToClient",           "(I)V",                                    (void*)nContextInitToClient },
1023c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nContextDeinitToClient",         "(I)V",                                    (void*)nContextDeinitToClient },
1024c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1025c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1026c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// All methods below are thread protected in java.
1027c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextCreate",                 "(IIII)I",                               (void*)nContextCreate },
1028c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextFinish",                 "(I)V",                                  (void*)nContextFinish },
1029c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextSetPriority",            "(II)V",                                 (void*)nContextSetPriority },
1030c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextDestroy",                "(I)V",                                  (void*)nContextDestroy },
1031c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
1032c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextSendMessage",            "(II[I)V",                               (void*)nContextSendMessage },
1033c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnObjDestroy",                    "(II)V",                                 (void*)nObjDestroy },
1034c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1035c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnElementCreate",                 "(IIIZI)I",                              (void*)nElementCreate },
1036c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnElementCreate2",                "(I[I[Ljava/lang/String;[I)I",           (void*)nElementCreate2 },
1037c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnElementGetSubElements",         "(II[I[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
1038c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1039c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnTypeCreate",                    "(IIIIIZZI)I",                           (void*)nTypeCreate },
1040c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1041c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCreateTyped",         "(IIIII)I",                               (void*)nAllocationCreateTyped },
1042c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCreateFromBitmap",    "(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCreateFromBitmap },
1043c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCreateBitmapBackedAllocation",    "(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCreateBitmapBackedAllocation },
1044c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCubeCreateFromBitmap },
1045c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1046c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCopyFromBitmap",      "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
1047c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCopyToBitmap",        "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
1048c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1049c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationSyncAll",             "(III)V",                                (void*)nAllocationSyncAll },
1050c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData1D",              "(IIIII[II)V",                           (void*)nAllocationData1D_i },
1051c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData1D",              "(IIIII[SI)V",                           (void*)nAllocationData1D_s },
1052c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData1D",              "(IIIII[BI)V",                           (void*)nAllocationData1D_b },
1053c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData1D",              "(IIIII[FI)V",                           (void*)nAllocationData1D_f },
1054c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationElementData1D",       "(IIIII[BI)V",                           (void*)nAllocationElementData1D },
1055c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData2D",              "(IIIIIIII[II)V",                        (void*)nAllocationData2D_i },
1056c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData2D",              "(IIIIIIII[SI)V",                        (void*)nAllocationData2D_s },
1057c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData2D",              "(IIIIIIII[BI)V",                        (void*)nAllocationData2D_b },
1058c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData2D",              "(IIIIIIII[FI)V",                        (void*)nAllocationData2D_f },
1059c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData2D",              "(IIIIIIIIIIIII)V",                      (void*)nAllocationData2D_alloc },
1060c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData3D",              "(IIIIIIIII[II)V",                       (void*)nAllocationData3D_i },
1061c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData3D",              "(IIIIIIIII[SI)V",                       (void*)nAllocationData3D_s },
1062c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData3D",              "(IIIIIIIII[BI)V",                       (void*)nAllocationData3D_b },
1063c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData3D",              "(IIIIIIIII[FI)V",                       (void*)nAllocationData3D_f },
1064c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData3D",              "(IIIIIIIIIIIIII)V",                     (void*)nAllocationData3D_alloc },
1065c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationRead",                "(II[I)V",                               (void*)nAllocationRead_i },
1066c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationRead",                "(II[S)V",                               (void*)nAllocationRead_s },
1067c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationRead",                "(II[B)V",                               (void*)nAllocationRead_b },
1068c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationRead",                "(II[F)V",                               (void*)nAllocationRead_f },
1069c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationGetType",             "(II)I",                                 (void*)nAllocationGetType},
1070c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationResize1D",            "(III)V",                                (void*)nAllocationResize1D },
1071c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationGenerateMipmaps",     "(II)V",                                 (void*)nAllocationGenerateMipmaps },
1072c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1073c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptBindAllocation",          "(IIII)V",                               (void*)nScriptBindAllocation },
1074c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetTimeZone",             "(II[B)V",                               (void*)nScriptSetTimeZone },
1075c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptInvoke",                  "(III)V",                                (void*)nScriptInvoke },
1076c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptInvokeV",                 "(III[B)V",                              (void*)nScriptInvokeV },
1077c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptForEach",                 "(IIIII)V",                              (void*)nScriptForEach },
1078c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptForEach",                 "(IIIII[B)V",                            (void*)nScriptForEachV },
1079c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptForEachClipped",          "(IIIIIIIIIII)V",                        (void*)nScriptForEachClipped },
1080c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptForEachClipped",          "(IIIII[BIIIIII)V",                      (void*)nScriptForEachClippedV },
1081c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarI",                 "(IIII)V",                               (void*)nScriptSetVarI },
1082c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarJ",                 "(IIIJ)V",                               (void*)nScriptSetVarJ },
1083c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarF",                 "(IIIF)V",                               (void*)nScriptSetVarF },
1084c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarD",                 "(IIID)V",                               (void*)nScriptSetVarD },
1085c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarV",                 "(III[B)V",                              (void*)nScriptSetVarV },
1086c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarVE",                "(III[BI[I)V",                           (void*)nScriptSetVarVE },
1087c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarObj",               "(IIII)V",                               (void*)nScriptSetVarObj },
1088c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1089c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptCCreate",                 "(ILjava/lang/String;Ljava/lang/String;[BI)I",  (void*)nScriptCCreate },
1090c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptIntrinsicCreate",         "(III)I",                                (void*)nScriptIntrinsicCreate },
1091c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptKernelIDCreate",          "(IIII)I",                               (void*)nScriptKernelIDCreate },
1092c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptFieldIDCreate",           "(III)I",                                (void*)nScriptFieldIDCreate },
1093c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptGroupCreate",             "(I[I[I[I[I[I)I",                        (void*)nScriptGroupCreate },
1094c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptGroupSetInput",           "(IIII)V",                               (void*)nScriptGroupSetInput },
1095c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptGroupSetOutput",          "(IIII)V",                               (void*)nScriptGroupSetOutput },
1096c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptGroupExecute",            "(II)V",                                 (void*)nScriptGroupExecute },
1097c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1098c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnSamplerCreate",                 "(IIIIIIF)I",                            (void*)nSamplerCreate },
1099c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1100c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
1101c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1102c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic int registerFuncs(JNIEnv *_env)
1103c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1104c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return android::AndroidRuntime::registerNativeMethods(
1105c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            _env, classPathName, methods, NELEM(methods));
1106c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1107c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1108c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1109c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1110c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainjint JNI_OnLoad(JavaVM* vm, void* reserved)
1111c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1112c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv* env = NULL;
1113c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint result = -1;
1114c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1115c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1116c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        ALOGE("ERROR: GetEnv failed\n");
1117c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto bail;
1118c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1119c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    assert(env != NULL);
1120c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1121c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (registerFuncs(env) < 0) {
1122c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        ALOGE("ERROR: MediaPlayer native registration failed\n");
1123c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto bail;
1124c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1125c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1126c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    /* success -- return valid version number */
1127c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    result = JNI_VERSION_1_4;
1128c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1129c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainbail:
1130c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return result;
1131c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1132