android_renderscript_RenderScript.cpp revision 8352bdceb7f0030593db04a06ba8caebf81eaeea
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 <android/bitmap.h>
25257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#include <android/log.h>
26c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
27dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang#include <rsEnv.h>
28470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang#include "rsDispatch.h"
29470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang#include <dlfcn.h>
30470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
31c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//#define LOG_API ALOG
32c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_API(...)
33c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
34257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#define NELEM(m) (sizeof(m) / sizeof((m)[0]))
35c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
368352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wangtemplate <typename... T>
378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wangvoid UNUSED(T... t) {}
388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) {                                      \
398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    jint len = 0;                                                                       \
408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    void *ptr = nullptr;                                                                \
418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    size_t typeBytes = 0;                                                               \
428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    jint relFlag = 0;                                                                   \
438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    if (readonly) {                                                                     \
448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        /* The on-release mode should only be JNI_ABORT for read-only accesses. */      \
458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        relFlag = JNI_ABORT;                                                            \
468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    }                                                                                   \
478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    switch(dataType) {                                                                  \
488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    case RS_TYPE_FLOAT_32:                                                              \
498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        len = _env->GetArrayLength((jfloatArray)data);                                  \
508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        ptr = _env->GetFloatArrayElements((jfloatArray)data, flag);                     \
518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        typeBytes = 4;                                                                  \
528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        fnc(__VA_ARGS__);                                                               \
538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag);     \
548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        return;                                                                         \
558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    case RS_TYPE_FLOAT_64:                                                              \
568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        len = _env->GetArrayLength((jdoubleArray)data);                                 \
578352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag);                   \
588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        typeBytes = 8;                                                                  \
598352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        fnc(__VA_ARGS__);                                                               \
608352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag);  \
618352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        return;                                                                         \
628352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    case RS_TYPE_SIGNED_8:                                                              \
638352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    case RS_TYPE_UNSIGNED_8:                                                            \
648352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        len = _env->GetArrayLength((jbyteArray)data);                                   \
658352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        ptr = _env->GetByteArrayElements((jbyteArray)data, flag);                       \
668352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        typeBytes = 1;                                                                  \
678352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        fnc(__VA_ARGS__);                                                               \
688352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag);         \
698352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        return;                                                                         \
708352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    case RS_TYPE_SIGNED_16:                                                             \
718352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    case RS_TYPE_UNSIGNED_16:                                                           \
728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        len = _env->GetArrayLength((jshortArray)data);                                  \
738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        ptr = _env->GetShortArrayElements((jshortArray)data, flag);                     \
748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        typeBytes = 2;                                                                  \
758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        fnc(__VA_ARGS__);                                                               \
768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag);     \
778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        return;                                                                         \
788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    case RS_TYPE_SIGNED_32:                                                             \
798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    case RS_TYPE_UNSIGNED_32:                                                           \
808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        len = _env->GetArrayLength((jintArray)data);                                    \
818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        ptr = _env->GetIntArrayElements((jintArray)data, flag);                         \
828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        typeBytes = 4;                                                                  \
838352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        fnc(__VA_ARGS__);                                                               \
848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag);           \
858352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        return;                                                                         \
868352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    case RS_TYPE_SIGNED_64:                                                             \
878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    case RS_TYPE_UNSIGNED_64:                                                           \
888352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        len = _env->GetArrayLength((jlongArray)data);                                   \
898352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        ptr = _env->GetLongArrayElements((jlongArray)data, flag);                       \
908352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        typeBytes = 8;                                                                  \
918352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        fnc(__VA_ARGS__);                                                               \
928352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag);        \
938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        return;                                                                         \
948352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    default:                                                                            \
958352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang        break;                                                                          \
968352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    }                                                                                   \
978352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    UNUSED(len, ptr, typeBytes, relFlag);                                               \
988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang}
998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang
1008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang
101c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringToUTF8 {
102c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic:
103c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
104c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fCStr = env->GetStringUTFChars(str, NULL);
105c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fLength = env->GetStringUTFLength(str);
106c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
107c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    ~AutoJavaStringToUTF8() {
108c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
109c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
110c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char* c_str() const { return fCStr; }
111c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length() const { return fLength; }
112c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
113c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate:
114c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv*     fEnv;
115c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jstring     fJStr;
116c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char* fCStr;
117c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize       fLength;
118c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
119c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
120c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringArrayToUTF8 {
121c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic:
122c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
123c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
124c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        mCStrings = NULL;
125c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        mSizeArray = NULL;
126c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        if (stringsLength > 0) {
127c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
128c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
129c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            for (jsize ct = 0; ct < stringsLength; ct ++) {
130c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
131c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL);
132c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
133c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            }
134c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        }
135c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
136c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    ~AutoJavaStringArrayToUTF8() {
137c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        for (jsize ct=0; ct < mStringsLength; ct++) {
138c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
139c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
140c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        }
141c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        free(mCStrings);
142c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        free(mSizeArray);
143c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
144c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **c_str() const { return mCStrings; }
145c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t *c_str_len() const { return mSizeArray; }
146c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length() const { return mStringsLength; }
147c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
148c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate:
149c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv      *mEnv;
150c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jobjectArray mStrings;
151c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **mCStrings;
152c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t      *mSizeArray;
153c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize        mStringsLength;
154c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
155c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
156470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
157470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang// ---------------------------------------------------------------------------
158470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic dispatchTable dispatchTab;
159470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
160470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic jboolean nLoadSO(JNIEnv *_env, jobject _this, jboolean useNative) {
161470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    void* handle = NULL;
162470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (useNative) {
163470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        handle = dlopen("libRS.so", RTLD_LAZY | RTLD_LOCAL);
164470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    } else {
165470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL);
166470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
167470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (handle == NULL) {
168470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("couldn't dlopen %s, %s", filename, dlerror());
169470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
170470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
171470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
17214ff9bdadc9f41b943611201bd8cc942dddc8ee3Miao Wang    if (loadSymbols(handle, dispatchTab) == false) {
173470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("%s init failed!", filename);
174470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
175470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
176470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    LOG_API("Successfully loaded %s", filename);
177470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return true;
178470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang}
179470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
180dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic ioSuppDT ioDispatch;
181dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic jboolean nLoadIOSO(JNIEnv *_env, jobject _this) {
182dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    void* handleIO = NULL;
183dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    handleIO = dlopen("libRSSupportIO.so", RTLD_LAZY | RTLD_LOCAL);
184dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    if (handleIO == NULL) {
185dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang        LOG_API("Couldn't load libRSSupportIO.so");
186dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang        return false;
187dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    }
188dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    if (loadIOSuppSyms(handleIO, ioDispatch) == false) {
189dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang        LOG_API("libRSSupportIO init failed!");
190dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang        return false;
191dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    }
192dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    return true;
193dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang}
194ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang
195c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
196c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
197c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
198bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextFinish(JNIEnv *_env, jobject _this, jlong con)
199c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
200bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextFinish, con(%p)", (RsContext)con);
201bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextFinish((RsContext)con);
202c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
203c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
204936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic jlong
205936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID,
206936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni               jlong returnValue, jlongArray fieldIDArray,
207936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni               jlongArray valueArray, jintArray sizeArray,
208936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni               jlongArray depClosureArray, jlongArray depFieldIDArray) {
209936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  LOG_API("nClosureCreate: con(%p)", con);
210936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
211936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
212936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  RsScriptFieldID* fieldIDs =
213936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
214936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  for (int i = 0; i< fieldIDs_length; i++) {
215936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni    fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
216936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  }
217936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
218936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
219936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize values_length = _env->GetArrayLength(valueArray);
220936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
221936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  for (int i = 0; i < values_length; i++) {
222936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni    values[i] = (uintptr_t)jValues[i];
223936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  }
224936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
225936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
226936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize sizes_length = _env->GetArrayLength(sizeArray);
227936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
228936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jlong* jDepClosures =
229936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      _env->GetLongArrayElements(depClosureArray, nullptr);
230936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize depClosures_length = _env->GetArrayLength(depClosureArray);
231936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  RsClosure* depClosures =
232936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length);
233936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  for (int i = 0; i < depClosures_length; i++) {
234936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni    depClosures[i] = (RsClosure)jDepClosures[i];
235936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  }
236936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
237936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jlong* jDepFieldIDs =
238936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      _env->GetLongArrayElements(depFieldIDArray, nullptr);
239936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray);
240936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  RsScriptFieldID* depFieldIDs =
241936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length);
242936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  for (int i = 0; i < depClosures_length; i++) {
243936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni    depFieldIDs[i] = (RsClosure)jDepFieldIDs[i];
244936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  }
245936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
246936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  return (jlong)(uintptr_t)dispatchTab.ClosureCreate(
247936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue,
248936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
249936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      (size_t*)sizes, (size_t)sizes_length,
250936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      depClosures, (size_t)depClosures_length,
251936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      depFieldIDs, (size_t)depFieldIDs_length);
252936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni}
253936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
254936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void
255936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
256936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni               jint index, jlong value, jint size) {
257936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  dispatchTab.ClosureSetArg((RsContext)con, (RsClosure)closureID,
258936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                            (uint32_t)index, (uintptr_t)value, (size_t)size);
259936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni}
260936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
261936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void
262936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
263936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                  jlong fieldID, jlong value, jint size) {
264936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  dispatchTab.ClosureSetGlobal((RsContext)con, (RsClosure)closureID,
265936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                               (RsScriptFieldID)fieldID, (uintptr_t)value,
266936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                               (size_t)size);
267936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni}
268936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
269936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic long
270936fbd696aac243a514f74b6fee6efd5959527a4Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con,
271936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                    jlongArray closureArray) {
272936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr);
273936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize numClosures = _env->GetArrayLength(closureArray);
274936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
275936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  for (int i = 0; i < numClosures; i++) {
276936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni    closures[i] = (RsClosure)jClosures[i];
277936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  }
278936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
279936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  return (jlong)(uintptr_t)dispatchTab.ScriptGroup2Create((RsContext)con,
280936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                                                          closures,
281936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                                                          numClosures);
282936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni}
283936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
284c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
285bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
286c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
287bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
288bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ObjDestroy((RsContext)con, (void *)obj);
289c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
290c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
291c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
292bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
293c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceCreate(JNIEnv *_env, jobject _this)
294c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
295c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceCreate");
296bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.DeviceCreate();
297c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
298c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
299c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
300bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
301c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
302c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceDestroy");
303470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return dispatchTab.DeviceDestroy((RsDevice)dev);
304c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
305c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
306c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
307bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
308c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
309c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
310470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return dispatchTab.DeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
311c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
312c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
313bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
314ecccf940f72679f7602c52b0b4bcb245acdad55bMiao WangnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
315ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang               jint ct, jstring nativeLibDirJava)
316c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
317c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextCreate");
318ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    // Access the NativeLibDir in the Java Context.
319ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    const char * nativeLibDir = _env->GetStringUTFChars(nativeLibDirJava, JNI_FALSE);
320ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    size_t length = (size_t)_env->GetStringUTFLength(nativeLibDirJava);
321ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang
322ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    jlong id = (jlong)(uintptr_t)dispatchTab.ContextCreate((RsDevice)dev, ver,
323ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang                                                           sdkVer,
324ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang                                                           (RsContextType)ct, 0);
325ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    if (dispatchTab.SetNativeLibDir) {
326ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang        dispatchTab.SetNativeLibDir((RsContext)id, nativeLibDir, length);
327ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    }
328ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang
329ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    _env->ReleaseStringUTFChars(nativeLibDirJava, nativeLibDir);
330ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    return id;
331c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
332c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
333c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
334c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
335bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
336c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
337bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
338bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextSetPriority((RsContext)con, p);
339c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
340c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
341c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
342c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
343c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
344bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDestroy(JNIEnv *_env, jobject _this, jlong con)
345c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
346bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextDestroy, con(%p)", (RsContext)con);
347bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextDestroy((RsContext)con);
348c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
349c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
350c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
351bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
352c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
353c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
354470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextDump((RsContext)con, bits);
355c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
356c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
357c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
358c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jstring
359bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
360c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
361bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con);
362c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    char buf[1024];
363c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
364c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
365c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
366bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    int id = dispatchTab.ContextGetMessage((RsContext)con,
367c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 buf, sizeof(buf),
368c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &receiveLen, sizeof(receiveLen),
369c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &subID, sizeof(subID));
370c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!id && receiveLen) {
371184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,
372184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "message receive buffer too small.  %zu", receiveLen);
373c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
374c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return _env->NewStringUTF(buf);
375c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
376c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
377c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
378bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
379c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
380c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
381bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
382c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
383c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
384c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
385bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    int id = dispatchTab.ContextGetMessage((RsContext)con,
386c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 ptr, len * 4,
387c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &receiveLen, sizeof(receiveLen),
388c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &subID, sizeof(subID));
389c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!id && receiveLen) {
390184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,
391184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "message receive buffer too small.  %zu", receiveLen);
392c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
393c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, 0);
394bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jint)id;
395c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
396c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
397c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
398bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
399c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
400bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextPeekMessage, con(%p)", (RsContext)con);
401c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
402c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
403c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
404bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    int id = dispatchTab.ContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
405c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                  &subID, sizeof(subID));
406c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    auxDataPtr[0] = (jint)subID;
407c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    auxDataPtr[1] = (jint)receiveLen;
408c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
409bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jint)id;
410c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
411c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
412bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
413c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
414bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextInitToClient, con(%p)", (RsContext)con);
415bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextInitToClient((RsContext)con);
416c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
417c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
418bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
419c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
420bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con);
421bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextDeinitToClient((RsContext)con);
422c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
423c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
424c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
425bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
426c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
427c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = NULL;
428c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = 0;
429c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (data) {
430c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        len = _env->GetArrayLength(data);
431c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        jint *ptr = _env->GetIntArrayElements(data, NULL);
432c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
433bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
434bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
435c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (data) {
436c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
437c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
438c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
439c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
440c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
441c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
442bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
443086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind,
444086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni               jboolean norm, jint size)
445c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
446bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con,
447bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            type, kind, norm, size);
448086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    return (jlong)(uintptr_t)dispatchTab.ElementCreate((RsContext)con,
449086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni                                                       (RsDataType)type,
450086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni                                                       (RsDataKind)kind,
451bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       norm, size);
452c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
453c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
454bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
455bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementCreate2(JNIEnv *_env, jobject _this, jlong con,
456bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
457c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
458c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    int fieldCount = _env->GetArrayLength(_ids);
459bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nElementCreate2, con(%p)", (RsContext)con);
460bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
461bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jIds = _env->GetLongArrayElements(_ids, NULL);
462bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
463c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
464bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
465bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
466bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
467bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < fieldCount; i ++) {
468bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        ids[i] = (RsElement)jIds[i];
469bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        arraySizes[i] = (uint32_t)jArraySizes[i];
470bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
471c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
472c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
473c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **nameArray = names.c_str();
475c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t *sizeArray = names.c_str_len();
476c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
477bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong id = (jlong)(uintptr_t)dispatchTab.ElementCreate2((RsContext)con,
478c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     (RsElement *)ids, fieldCount,
479c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
480c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     (const uint32_t *)arraySizes, fieldCount);
481c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
482bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(ids);
483bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(arraySizes);
484bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
485bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
486bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return id;
487c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
488c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
489c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
490c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
491bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
492c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
493bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
494bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                       jlongArray _IDs,
495c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jobjectArray _names,
496c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jintArray _arraySizes)
497c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
498bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    uint32_t dataSize = _env->GetArrayLength(_IDs);
499bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nElementGetSubElements, con(%p)", (RsContext)con);
500c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
501bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    uintptr_t *ids = (uintptr_t *)malloc(dataSize * sizeof(uintptr_t));
502c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
503c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
504c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
505bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes,
506bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      (uint32_t)dataSize);
507c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
508bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(uint32_t i = 0; i < dataSize; i++) {
509bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        const jlong id = (jlong)(uintptr_t)ids[i];
510bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        const jint arraySize = (jint)arraySizes[i];
511c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
512bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        _env->SetLongArrayRegion(_IDs, i, 1, &id);
513bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
514c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
515c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
516c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(ids);
517c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(names);
518c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(arraySizes);
519c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
520c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
521c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
522c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
523bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
524bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
525c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
526c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
527c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
528bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv);
529c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
530bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy,
531bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                    dimz, mips, faces, yuv);
532c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
533c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
534c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
535c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
536bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
537bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage,
538bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                       jlong pointer)
539c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
540bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)",
541bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
542bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t) dispatchTab.AllocationCreateTyped((RsContext)con, (RsType)type,
543bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                (RsAllocationMipmapControl)mips,
544bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                (uint32_t)usage, (uintptr_t)pointer);
545c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
546c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
547c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
548bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
549c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
550bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits);
551bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
552c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
553c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
554c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
555bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
556dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{
557bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    ioDispatch.sAllocationSetSurface(_env, _this, (RsContext)con, (RsAllocation)alloc, sur, dispatchTab);
558dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang}
559dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang
560dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void
561bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
562dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{
563bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationIoSend((RsContext)con, (RsAllocation)alloc);
564dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang}
565dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang
566dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void
567bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
568c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
569bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
570bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
571c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
572c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
573c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic size_t GetBitmapSize(JNIEnv *env, jobject jbitmap) {
574c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
575c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
576c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(env, jbitmap, &info);
577c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t s = info.width * info.height;
578c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    switch (info.format) {
579c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGBA_8888: s *= 4; break;
580c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGB_565: s *= 2; break;
581c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGBA_4444: s *= 2; break;
582c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
583c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return s;
584c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
585c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
586bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
587bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
588bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                            jobject jbitmap, jint usage)
589c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
590bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong id = 0;
591257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    void *pixels = NULL;
592257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
593c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
594257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (pixels != NULL) {
595bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        id = (jlong)(uintptr_t)dispatchTab.AllocationCreateFromBitmap((RsContext)con,
596bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                      (RsType)type,
597bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                      (RsAllocationMipmapControl)mip,
598bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                      pixels,
599bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                      GetBitmapSize(_env, jbitmap),
600bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                      usage);
601257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        AndroidBitmap_unlockPixels(_env, jbitmap);
602257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
603c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
604c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
605c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
606bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
607bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type,
608bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                        jint mip, jobject jbitmap, jint usage)
609c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
610bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong id = 0;
611257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    void *pixels = NULL;
612257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
613c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
614257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (pixels != NULL) {
615bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        id = (jlong)(uintptr_t)dispatchTab.AllocationCreateTyped((RsContext)con,
616bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                 (RsType)type,
617bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                 (RsAllocationMipmapControl)mip,
618bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                 (uint32_t)usage,
619bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                 (uintptr_t)pixels);
620257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        AndroidBitmap_unlockPixels(_env, jbitmap);
621257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
622c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
623c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
624c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
625bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
626bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type,
627bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                jint mip, jobject jbitmap, jint usage)
628c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
629c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
630c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
631c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
632bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong id = 0;
633c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
634bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        id = (jlong)(uintptr_t)dispatchTab.AllocationCubeCreateFromBitmap((RsContext)con,
635bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                          (RsType)type,
636bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                          (RsAllocationMipmapControl)mip,
637bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                          pixels,
638bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                          GetBitmapSize(_env, jbitmap),
639bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                          usage);
640c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
641c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
642c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
643c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
644c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
645c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
646bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
647c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
648c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
649c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
650c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(_env, jbitmap, &info);
651c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
652c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
653c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
654c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
655c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
656bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 0,
657bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                     RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, info.width,
658bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                     info.height, pixels, GetBitmapSize(_env, jbitmap), 0);
659c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
660c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
661c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
662c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
663c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
664bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
665c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
666c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
667c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
668c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(_env, jbitmap, &info);
669c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
670c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
671c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
672c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
673c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
674bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        dispatchTab.AllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, pixels,
675bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                           GetBitmapSize(_env, jbitmap));
676c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
677c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
678c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    //bitmap.notifyPixelsChanged();
679c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
680c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
6818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc.
682c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
6838352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
6848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang                  jint count, jobject data, jint sizeBytes, jint dataType)
685c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
6868352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    RsAllocation *alloc = (RsAllocation *)_alloc;
6878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
6888352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang            "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes,
6898352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang            dataType);
6908352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation1DData, true, (RsContext)con, alloc, offset, lod, count,
6918352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang                   ptr, sizeBytes);
692c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
693c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
694c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
695c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
696bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset,
697bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                         jint lod, jint compIdx, jbyteArray data, int sizeBytes)
698c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
699c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
700bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)",
701bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
702c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
703bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod,
704bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                        ptr, sizeBytes, compIdx);
705c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
706c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
707c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
7088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc.
709c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
7108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
7118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang                  jint w, jint h, jobject data, jint sizeBytes, jint dataType)
712c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
7138352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    RsAllocation *alloc = (RsAllocation *)_alloc;
7148352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
7158352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
7168352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang            "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
7178352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation2DData, true, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
718c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
719c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
720c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
721bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
722bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                        jlong dstAlloc, jint dstXoff, jint dstYoff,
723c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstMip, jint dstFace,
724c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint width, jint height,
725bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                        jlong srcAlloc, jint srcXoff, jint srcYoff,
726c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcMip, jint srcFace)
727c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
728c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
729c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " dstMip(%i), dstFace(%i), width(%i), height(%i),"
730c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
731bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
732c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
733c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
734bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationCopy2DRange((RsContext)con,
735bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      (RsAllocation)dstAlloc,
736bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      dstXoff, dstYoff,
737bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      dstMip, dstFace,
738bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      width, height,
739bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      (RsAllocation)srcAlloc,
740bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      srcXoff, srcYoff,
741bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      srcMip, srcFace);
742c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
743c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
7448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc.
745c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
7468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
7478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang                    jint w, jint h, jint d, jobject data, int sizeBytes, int dataType)
748c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
7498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    RsAllocation *alloc = (RsAllocation *)_alloc;
7508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i),"
7518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang            " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
7528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang            lod, w, h, d, sizeBytes);
7538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DData, true, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
754c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
755c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
756c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
757bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
758bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                        jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
759c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstMip,
760c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint width, jint height, jint depth,
761bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                        jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
762c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcMip)
763c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
764c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
765c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " dstMip(%i), width(%i), height(%i),"
766c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
767bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
768c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
769c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
770bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationCopy3DRange((RsContext)con,
771bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      (RsAllocation)dstAlloc,
772bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      dstXoff, dstYoff, dstZoff, dstMip,
773bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      width, height, depth,
774bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      (RsAllocation)srcAlloc,
775bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      srcXoff, srcYoff, srcZoff, srcMip);
776bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang}
777bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
7788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data.
779bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void
7808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType)
781bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{
7828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    RsAllocation *alloc = (RsAllocation *)_alloc;
7838352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
7848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    PER_ARRAY_TYPE(0, dispatchTab.AllocationRead, false, (RsContext)con, alloc, ptr, len * typeBytes);
785c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
786c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
7878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data.
788c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
7898352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
7908352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang                  jint count, jobject data, int sizeBytes, int dataType)
791c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
7928352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    RsAllocation *alloc = (RsAllocation *)_alloc;
7938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
7948352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang              "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType);
7958352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    PER_ARRAY_TYPE(0, dispatchTab.Allocation1DRead, false, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
796c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
797c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
7988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data.
799c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
8008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
8018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang                  jint w, jint h, jobject data, int sizeBytes, int dataType)
802c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
8038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    RsAllocation *alloc = (RsAllocation *)_alloc;
8048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
8058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
8068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang              "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
8078352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang    PER_ARRAY_TYPE(0, dispatchTab.Allocation2DRead, false, (RsContext)con, alloc, xoff, yoff, lod, face, w, h,
8088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang                   ptr, sizeBytes, 0);
809c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
810c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
811bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
812bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
813c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
814bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
815bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t) dispatchTab.AllocationGetType((RsContext)con, (RsAllocation)a);
816c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
817c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
818c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
819bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
820c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
821bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con,
822bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsAllocation)alloc, dimX);
823bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
824c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
825c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
826c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
827c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
828c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
829bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
830c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
831bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)",
832bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
833bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
834c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
835c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
836c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
837bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
838c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
839bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con,
840bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, slot, val);
841bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
842c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
843c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
844c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
845bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
846c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
847bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con,
848bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, slot, val);
849bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
850c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
851c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
852c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
853bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
855bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con,
856bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, slot, val);
857bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
858c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
859c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
860c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
861bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
862c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
863bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con,
864bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, slot, val);
865bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
866c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
867c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
868c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
869bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
870c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
871bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con,
872bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, slot, val);
873bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
874c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
875c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
876c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
877bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
878c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
879bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
880c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
881c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
882bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
883c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
884c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
885c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
886c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
887bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data,
888bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                jlong elem, jintArray dims)
889c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
890bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
891c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
892c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
893c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
894c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
895bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
8961bb70c5cd78ab10ee54376f76d78b61c8352baddStephen Hines                     (const uint32_t *)dimsPtr, dimsLen);
897c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
898c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
899c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
900c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
901c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
902c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
903bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
904c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
905bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", (RsContext)con,
906bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, (const char *)timeZone);
907c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
908c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint length = _env->GetArrayLength(timeZone);
909c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte* timeZone_ptr;
910c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
911c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
912bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
913c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
914c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (timeZone_ptr) {
915c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
916c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
917c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
918c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
919c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
920bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
921c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
922bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
923bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptInvoke((RsContext)con, (RsScript)obj, slot);
924c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
925c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
926c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
927bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
928c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
929bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
930c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
931c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
932bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
933c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
934c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
935c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
936c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
937bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptForEach(JNIEnv *_env, jobject _this, jlong con,
938bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang               jlong script, jint slot, jlong ain, jlong aout)
939c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
940bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
941bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
942bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              (RsAllocation)ain, (RsAllocation)aout,
943bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              NULL, 0, NULL, 0);
944c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
945c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
946bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptForEachV(JNIEnv *_env, jobject _this, jlong con,
947bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                jlong script, jint slot, jlong ain, jlong aout, jbyteArray params)
948c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
949bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
950c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(params);
951c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
952bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
953bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              (RsAllocation)ain, (RsAllocation)aout,
954bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              ptr, len, NULL, 0);
955c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
956c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
957c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
958c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
959bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con,
960bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                      jlong script, jint slot, jlong ain, jlong aout,
961c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                      jint xstart, jint xend,
962c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                      jint ystart, jint yend, jint zstart, jint zend)
963c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
964bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
965c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    RsScriptCall sc;
966c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xStart = xstart;
967c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xEnd = xend;
968c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yStart = ystart;
969c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yEnd = yend;
970c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zStart = zstart;
971c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zEnd = zend;
972c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
973c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayStart = 0;
974c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayEnd = 0;
975bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
976bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              (RsAllocation)ain, (RsAllocation)aout,
977bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              NULL, 0, &sc, sizeof(sc));
978c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
979c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
980c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
981bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con,
982bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                       jlong script, jint slot, jlong ain, jlong aout,
983c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jbyteArray params, jint xstart, jint xend,
984c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jint ystart, jint yend, jint zstart, jint zend)
985c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
986bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
987c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(params);
988c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
989c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    RsScriptCall sc;
990c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xStart = xstart;
991c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xEnd = xend;
992c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yStart = ystart;
993c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yEnd = yend;
994c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zStart = zstart;
995c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zEnd = zend;
996c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
997c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayStart = 0;
998c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayEnd = 0;
999bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
1000bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              (RsAllocation)ain, (RsAllocation)aout,
1001bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              ptr, len, &sc, sizeof(sc));
1002c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1003c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1004c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1005c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
1006c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1007bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1008bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
1009c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jstring resName, jstring cacheDir,
1010c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jbyteArray scriptRef, jint length)
1011c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1012bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptCCreate, con(%p)", (RsContext)con);
1013c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1014c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8 resNameUTF(_env, resName);
1015c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
1016bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong ret = 0;
1017c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte* script_ptr = NULL;
1018c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint _exception = 0;
1019c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint remaining;
1020c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!scriptRef) {
1021c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
1022c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
1023c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
1024c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1025c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (length < 0) {
1026c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
1027c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
1028c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
1029c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1030c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    remaining = _env->GetArrayLength(scriptRef);
1031c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (remaining < length) {
1032c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
1033c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException",
1034c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //        "length > script.length - offset");
1035c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
1036c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1037c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    script_ptr = (jbyte *)
1038c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
1039c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1040c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    //rsScriptCSetText(con, (const char *)script_ptr, length);
1041c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1042bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    ret = (jlong)(uintptr_t)dispatchTab.ScriptCCreate((RsContext)con,
1043bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                      resNameUTF.c_str(), resNameUTF.length(),
1044bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                      cacheDirUTF.c_str(), cacheDirUTF.length(),
1045bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                      (const char *)script_ptr, length);
1046c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1047c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainexit:
1048c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (script_ptr) {
1049c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
1050c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                _exception ? JNI_ABORT: 0);
1051c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1052c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1053bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)ret;
1054c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1055c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1056bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1057bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
1058c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1059bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid);
1060bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
1061c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1062c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1063bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1064bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
1065c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1066bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con,
1067bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)sid, slot, sig);
1068bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.ScriptKernelIDCreate((RsContext)con, (RsScript)sid,
1069bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                     slot, sig);
1070c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1071c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1072bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1073086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
1074086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{
1075086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    LOG_API("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con,
1076086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni            (void *)sid, slot);
1077086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    return (jlong)dispatchTab.ScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot);
1078086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni}
1079086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni
1080086010500c28e2bca57ea583d3f38da9a2f2f414Yang Nistatic jlong
1081bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
1082c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1083bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot);
1084bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
1085c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1086c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1087bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1088bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
1089bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlongArray _dstk, jlongArray _dstf, jlongArray _types)
1090bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{
1091bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con);
1092bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1093bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint kernelsLen = _env->GetArrayLength(_kernels);
1094bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr);
1095bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
1096bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < kernelsLen; ++i) {
1097bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
1098bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
1099bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1100bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint srcLen = _env->GetArrayLength(_src);
1101bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr);
1102bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
1103bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < srcLen; ++i) {
1104bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
1105bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
1106bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1107bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint dstkLen = _env->GetArrayLength(_dstk);
1108bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr);
1109bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
1110bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < dstkLen; ++i) {
1111bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
1112bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
1113bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1114bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint dstfLen = _env->GetArrayLength(_dstf);
1115bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr);
1116bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
1117bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < dstfLen; ++i) {
1118bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
1119bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
1120bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1121bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint typesLen = _env->GetArrayLength(_types);
1122bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr);
1123bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
1124bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < typesLen; ++i) {
1125bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        typesPtr[i] = (RsType)jTypesPtr[i];
1126bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
1127bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1128bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong id = (jlong)(uintptr_t) dispatchTab.ScriptGroupCreate((RsContext)con,
1129bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                               (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
1130bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                               (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
1131bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                               (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
1132bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                               (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
1133bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                               (RsType *)typesPtr, typesLen * sizeof(RsType));
1134bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1135bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(kernelsPtr);
1136bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(srcPtr);
1137bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(dstkPtr);
1138bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(dstfPtr);
1139bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(typesPtr);
1140bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
1141bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
1142bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
1143bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
1144bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
1145c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
1146c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1147c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1148c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1149bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
1150c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1151bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
1152bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)gid, (void *)kid, (void *)alloc);
1153bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid,
1154bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                    (RsAllocation)alloc);
1155c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1156c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1157c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1158bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
1159c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1160bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
1161bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)gid, (void *)kid, (void *)alloc);
1162bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid,
1163bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                     (RsAllocation)alloc);
1164c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1165c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1166c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1167bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
1168c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1169bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
1170bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
1171c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1172c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1173c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1174c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1175bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1176bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
1177c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
1178c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1179bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nSamplerCreate, con(%p)", (RsContext)con);
1180bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.SamplerCreate((RsContext)con,
1181bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       (RsSamplerValue)magFilter,
1182bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       (RsSamplerValue)minFilter,
1183bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       (RsSamplerValue)wrapS,
1184bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       (RsSamplerValue)wrapT,
1185bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       (RsSamplerValue)wrapR,
1186bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       aniso);
1187bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang}
1188bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1189bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jint
1190bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSystemGetPointerSize(JNIEnv *_env, jobject _this) {
1191bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jint)sizeof(void*);
1192c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1193c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1194c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1195c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1196c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1197bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1198c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic const char *classPathName = "android/support/v8/renderscript/RenderScript";
1199c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1200c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic JNINativeMethod methods[] = {
1201bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nLoadSO",                        "(Z)Z",                                    (bool*)nLoadSO },
1202dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{"nLoadIOSO",                      "()Z",                                     (bool*)nLoadIOSO },
1203bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceCreate",                  "()J",                                     (void*)nDeviceCreate },
1204bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceDestroy",                 "(J)V",                                    (void*)nDeviceDestroy },
1205bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceSetConfig",               "(JII)V",                                  (void*)nDeviceSetConfig },
1206bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetUserMessage",         "(J[I)I",                                  (void*)nContextGetUserMessage },
1207bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetErrorMessage",        "(J)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1208bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextPeekMessage",            "(J[I)I",                                  (void*)nContextPeekMessage },
1209bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextInitToClient",           "(J)V",                                    (void*)nContextInitToClient },
1210bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextDeinitToClient",         "(J)V",                                    (void*)nContextDeinitToClient },
1211c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1212c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1213c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// All methods below are thread protected in java.
1214ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang{"rsnContextCreate",                 "(JIIILjava/lang/String;)J",             (void*)nContextCreate },
1215bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextFinish",                 "(J)V",                                  (void*)nContextFinish },
1216bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSetPriority",            "(JI)V",                                 (void*)nContextSetPriority },
1217bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDestroy",                "(J)V",                                  (void*)nContextDestroy },
1218bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDump",                   "(JI)V",                                 (void*)nContextDump },
1219bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSendMessage",            "(JI[I)V",                               (void*)nContextSendMessage },
1220a6620f0f767012a1d0c2c8f71529c919bba74a41Miao Wang//{"rsnClosureCreate",                 "(JJJ[J[J[I[J[J)J",                      (void*)nClosureCreate },
1221a6620f0f767012a1d0c2c8f71529c919bba74a41Miao Wang//{"rsnClosureSetArg",                 "(JJIJI)V",                              (void*)nClosureSetArg },
1222a6620f0f767012a1d0c2c8f71529c919bba74a41Miao Wang//{"rsnClosureSetGlobal",              "(JJJJI)V",                              (void*)nClosureSetGlobal },
1223bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnObjDestroy",                    "(JJ)V",                                 (void*)nObjDestroy },
1224bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1225bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate",                 "(JJIZI)J",                              (void*)nElementCreate },
1226bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate2",                "(J[J[Ljava/lang/String;[I)J",           (void*)nElementCreate2 },
1227bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementGetSubElements",         "(JJ[J[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
1228bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1229bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnTypeCreate",                    "(JJIIIZZI)J",                           (void*)nTypeCreate },
1230bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1231bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateTyped",         "(JJIIJ)J",                              (void*)nAllocationCreateTyped },
1232bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateFromBitmap",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateFromBitmap },
1233bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateBitmapBackedAllocation",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateBitmapBackedAllocation },
1234bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCubeCreateFromBitmap },
1235bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1236bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyFromBitmap",      "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
1237bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyToBitmap",        "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
1238bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1239bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSyncAll",             "(JJI)V",                                (void*)nAllocationSyncAll },
1240bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSetSurface",          "(JJLandroid/view/Surface;)V",           (void*)nAllocationSetSurface },
1241bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationIoSend",              "(JJ)V",                                 (void*)nAllocationIoSend },
12428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang{"rsnAllocationData1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationData1D },
1243bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationElementData1D",       "(JJIII[BI)V",                           (void*)nAllocationElementData1D },
12448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang{"rsnAllocationData2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationData2D },
1245bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D",              "(JJIIIIIIJIIII)V",                      (void*)nAllocationData2D_alloc },
12468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang{"rsnAllocationData3D",              "(JJIIIIIIILjava/lang/Object;II)V",      (void*)nAllocationData3D },
1247bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D",              "(JJIIIIIIIJIIII)V",                     (void*)nAllocationData3D_alloc },
12488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang{"rsnAllocationRead",                "(JJLjava/lang/Object;I)V",              (void*)nAllocationRead },
12498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang{"rsnAllocationRead1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationRead1D },
12508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang{"rsnAllocationRead2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationRead2D },
1251bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGetType",             "(JJ)J",                                 (void*)nAllocationGetType},
1252bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationResize1D",            "(JJI)V",                                (void*)nAllocationResize1D },
1253bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGenerateMipmaps",     "(JJ)V",                                 (void*)nAllocationGenerateMipmaps },
1254bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1255bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptBindAllocation",          "(JJJI)V",                               (void*)nScriptBindAllocation },
1256bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetTimeZone",             "(JJ[B)V",                               (void*)nScriptSetTimeZone },
1257bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptInvoke",                  "(JJI)V",                                (void*)nScriptInvoke },
1258bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptInvokeV",                 "(JJI[B)V",                              (void*)nScriptInvokeV },
1259bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptForEach",                 "(JJIJJ)V",                              (void*)nScriptForEach },
1260bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptForEach",                 "(JJIJJ[B)V",                            (void*)nScriptForEachV },
1261bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptForEachClipped",          "(JJIJJIIIIII)V",                        (void*)nScriptForEachClipped },
1262bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptForEachClipped",          "(JJIJJ[BIIIIII)V",                      (void*)nScriptForEachClippedV },
1263bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarI",                 "(JJII)V",                               (void*)nScriptSetVarI },
1264bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarJ",                 "(JJIJ)V",                               (void*)nScriptSetVarJ },
1265bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarF",                 "(JJIF)V",                               (void*)nScriptSetVarF },
1266bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarD",                 "(JJID)V",                               (void*)nScriptSetVarD },
1267bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarV",                 "(JJI[B)V",                              (void*)nScriptSetVarV },
1268bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarVE",                "(JJI[BJ[I)V",                           (void*)nScriptSetVarVE },
1269bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarObj",               "(JJIJ)V",                               (void*)nScriptSetVarObj },
1270bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1271bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptCCreate",                 "(JLjava/lang/String;Ljava/lang/String;[BI)J",  (void*)nScriptCCreate },
1272bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptIntrinsicCreate",         "(JIJ)J",                                (void*)nScriptIntrinsicCreate },
1273bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptKernelIDCreate",          "(JJII)J",                               (void*)nScriptKernelIDCreate },
1274086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{"rsnScriptInvokeIDCreate",          "(JJI)J",                                (void*)nScriptInvokeIDCreate },
1275bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptFieldIDCreate",           "(JJI)J",                                (void*)nScriptFieldIDCreate },
1276bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupCreate",             "(J[J[J[J[J[J)J",                        (void*)nScriptGroupCreate },
1277a6620f0f767012a1d0c2c8f71529c919bba74a41Miao Wang//{"rsnScriptGroup2Create",            "(J[J)J",                                (void*)nScriptGroup2Create },
1278bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetInput",           "(JJJJ)V",                               (void*)nScriptGroupSetInput },
1279bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetOutput",          "(JJJJ)V",                               (void*)nScriptGroupSetOutput },
1280bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupExecute",            "(JJ)V",                                 (void*)nScriptGroupExecute },
1281bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1282bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSamplerCreate",                 "(JIIIIIF)J",                            (void*)nSamplerCreate },
1283c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1284bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSystemGetPointerSize",          "()I",                                   (void*)nSystemGetPointerSize },
1285c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
1286c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1287c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1288c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1289c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainjint JNI_OnLoad(JavaVM* vm, void* reserved)
1290c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1291c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv* env = NULL;
1292257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    jclass clazz = NULL;
1293c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint result = -1;
1294c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1295c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1296184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
1297184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "ERROR: GetEnv failed\n");
1298257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        goto bail;
1299257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
1300257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (env == NULL) {
1301184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: env == NULL");
1302257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        goto bail;
1303257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
1304257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines
1305257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    clazz = env->FindClass(classPathName);
1306257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (clazz == NULL) {
1307c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto bail;
1308c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1309c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1310257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (env->RegisterNatives(clazz, methods, NELEM(methods)) < 0) {
1311184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
1312184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "ERROR: MediaPlayer native registration failed\n");
1313c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto bail;
1314c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1315c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1316c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    /* success -- return valid version number */
1317c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    result = JNI_VERSION_1_4;
1318c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1319c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainbail:
1320c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return result;
1321c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1322