android_renderscript_RenderScript.cpp revision ecccf940f72679f7602c52b0b4bcb245acdad55b
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
36c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringToUTF8 {
37c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic:
38c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
39c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fCStr = env->GetStringUTFChars(str, NULL);
40c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fLength = env->GetStringUTFLength(str);
41c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
42c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    ~AutoJavaStringToUTF8() {
43c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
44c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
45c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char* c_str() const { return fCStr; }
46c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length() const { return fLength; }
47c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
48c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate:
49c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv*     fEnv;
50c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jstring     fJStr;
51c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char* fCStr;
52c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize       fLength;
53c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
54c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
55c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringArrayToUTF8 {
56c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic:
57c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
58c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
59c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        mCStrings = NULL;
60c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        mSizeArray = NULL;
61c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        if (stringsLength > 0) {
62c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
63c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
64c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            for (jsize ct = 0; ct < stringsLength; ct ++) {
65c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
66c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL);
67c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
68c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            }
69c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        }
70c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
71c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    ~AutoJavaStringArrayToUTF8() {
72c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        for (jsize ct=0; ct < mStringsLength; ct++) {
73c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
74c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
75c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        }
76c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        free(mCStrings);
77c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        free(mSizeArray);
78c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
79c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **c_str() const { return mCStrings; }
80c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t *c_str_len() const { return mSizeArray; }
81c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length() const { return mStringsLength; }
82c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
83c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate:
84c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv      *mEnv;
85c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jobjectArray mStrings;
86c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **mCStrings;
87c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t      *mSizeArray;
88c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize        mStringsLength;
89c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
90c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
91470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
92470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang// ---------------------------------------------------------------------------
93470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic dispatchTable dispatchTab;
94470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
95470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic jboolean nLoadSO(JNIEnv *_env, jobject _this, jboolean useNative) {
96470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    void* handle = NULL;
97470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (useNative) {
98470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        handle = dlopen("libRS.so", RTLD_LAZY | RTLD_LOCAL);
99470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    } else {
100470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL);
101470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
102470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (handle == NULL) {
103470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("couldn't dlopen %s, %s", filename, dlerror());
104470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
105470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
106470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
10714ff9bdadc9f41b943611201bd8cc942dddc8ee3Miao Wang    if (loadSymbols(handle, dispatchTab) == false) {
108470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("%s init failed!", filename);
109470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
110470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
111470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    LOG_API("Successfully loaded %s", filename);
112470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return true;
113470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang}
114470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
115dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic ioSuppDT ioDispatch;
116dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic jboolean nLoadIOSO(JNIEnv *_env, jobject _this) {
117dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    void* handleIO = NULL;
118dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    handleIO = dlopen("libRSSupportIO.so", RTLD_LAZY | RTLD_LOCAL);
119dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    if (handleIO == NULL) {
120dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang        LOG_API("Couldn't load libRSSupportIO.so");
121dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang        return false;
122dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    }
123dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    if (loadIOSuppSyms(handleIO, ioDispatch) == false) {
124dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang        LOG_API("libRSSupportIO init failed!");
125dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang        return false;
126dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    }
127dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang    return true;
128dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang}
129ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang
130c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
131c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
132c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
133bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextFinish(JNIEnv *_env, jobject _this, jlong con)
134c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
135bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextFinish, con(%p)", (RsContext)con);
136bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextFinish((RsContext)con);
137c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
138c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
139936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic jlong
140936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID,
141936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni               jlong returnValue, jlongArray fieldIDArray,
142936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni               jlongArray valueArray, jintArray sizeArray,
143936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni               jlongArray depClosureArray, jlongArray depFieldIDArray) {
144936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  LOG_API("nClosureCreate: con(%p)", con);
145936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
146936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
147936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  RsScriptFieldID* fieldIDs =
148936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
149936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  for (int i = 0; i< fieldIDs_length; i++) {
150936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni    fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
151936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  }
152936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
153936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
154936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize values_length = _env->GetArrayLength(valueArray);
155936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
156936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  for (int i = 0; i < values_length; i++) {
157936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni    values[i] = (uintptr_t)jValues[i];
158936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  }
159936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
160936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
161936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize sizes_length = _env->GetArrayLength(sizeArray);
162936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
163936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jlong* jDepClosures =
164936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      _env->GetLongArrayElements(depClosureArray, nullptr);
165936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize depClosures_length = _env->GetArrayLength(depClosureArray);
166936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  RsClosure* depClosures =
167936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length);
168936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  for (int i = 0; i < depClosures_length; i++) {
169936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni    depClosures[i] = (RsClosure)jDepClosures[i];
170936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  }
171936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
172936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jlong* jDepFieldIDs =
173936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      _env->GetLongArrayElements(depFieldIDArray, nullptr);
174936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray);
175936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  RsScriptFieldID* depFieldIDs =
176936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length);
177936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  for (int i = 0; i < depClosures_length; i++) {
178936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni    depFieldIDs[i] = (RsClosure)jDepFieldIDs[i];
179936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  }
180936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
181936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  return (jlong)(uintptr_t)dispatchTab.ClosureCreate(
182936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue,
183936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
184936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      (size_t*)sizes, (size_t)sizes_length,
185936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      depClosures, (size_t)depClosures_length,
186936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni      depFieldIDs, (size_t)depFieldIDs_length);
187936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni}
188936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
189936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void
190936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
191936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni               jint index, jlong value, jint size) {
192936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  dispatchTab.ClosureSetArg((RsContext)con, (RsClosure)closureID,
193936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                            (uint32_t)index, (uintptr_t)value, (size_t)size);
194936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni}
195936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
196936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void
197936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
198936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                  jlong fieldID, jlong value, jint size) {
199936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  dispatchTab.ClosureSetGlobal((RsContext)con, (RsClosure)closureID,
200936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                               (RsScriptFieldID)fieldID, (uintptr_t)value,
201936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                               (size_t)size);
202936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni}
203936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
204936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic long
205936fbd696aac243a514f74b6fee6efd5959527a4Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con,
206936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                    jlongArray closureArray) {
207936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr);
208936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  jsize numClosures = _env->GetArrayLength(closureArray);
209936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
210936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  for (int i = 0; i < numClosures; i++) {
211936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni    closures[i] = (RsClosure)jClosures[i];
212936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  }
213936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
214936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni  return (jlong)(uintptr_t)dispatchTab.ScriptGroup2Create((RsContext)con,
215936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                                                          closures,
216936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni                                                          numClosures);
217936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni}
218936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni
219c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
220bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
221c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
222bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
223bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ObjDestroy((RsContext)con, (void *)obj);
224c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
225c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
226c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
227bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
228c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceCreate(JNIEnv *_env, jobject _this)
229c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
230c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceCreate");
231bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.DeviceCreate();
232c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
233c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
234c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
235bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
236c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
237c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceDestroy");
238470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return dispatchTab.DeviceDestroy((RsDevice)dev);
239c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
242bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
243c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
244c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
245470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return dispatchTab.DeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
246c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
247c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
248bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
249ecccf940f72679f7602c52b0b4bcb245acdad55bMiao WangnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
250ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang               jint ct, jstring nativeLibDirJava)
251c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
252c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextCreate");
253ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    // Access the NativeLibDir in the Java Context.
254ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    const char * nativeLibDir = _env->GetStringUTFChars(nativeLibDirJava, JNI_FALSE);
255ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    size_t length = (size_t)_env->GetStringUTFLength(nativeLibDirJava);
256ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang
257ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    jlong id = (jlong)(uintptr_t)dispatchTab.ContextCreate((RsDevice)dev, ver,
258ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang                                                           sdkVer,
259ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang                                                           (RsContextType)ct, 0);
260ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    if (dispatchTab.SetNativeLibDir) {
261ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang        dispatchTab.SetNativeLibDir((RsContext)id, nativeLibDir, length);
262ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    }
263ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang
264ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    _env->ReleaseStringUTFChars(nativeLibDirJava, nativeLibDir);
265ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang    return id;
266c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
267c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
268c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
269c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
270bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
271c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
272bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
273bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextSetPriority((RsContext)con, p);
274c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
275c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
276c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
277c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
278c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
279bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDestroy(JNIEnv *_env, jobject _this, jlong con)
280c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
281bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextDestroy, con(%p)", (RsContext)con);
282bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextDestroy((RsContext)con);
283c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
284c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
285c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
286bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
287c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
288c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
289470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextDump((RsContext)con, bits);
290c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
291c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
292c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
293c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jstring
294bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
295c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
296bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con);
297c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    char buf[1024];
298c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
299c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
300c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
301bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    int id = dispatchTab.ContextGetMessage((RsContext)con,
302c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 buf, sizeof(buf),
303c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &receiveLen, sizeof(receiveLen),
304c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &subID, sizeof(subID));
305c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!id && receiveLen) {
306184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,
307184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "message receive buffer too small.  %zu", receiveLen);
308c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
309c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return _env->NewStringUTF(buf);
310c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
311c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
312c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
313bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
314c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
315c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
316bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
317c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
318c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
319c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
320bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    int id = dispatchTab.ContextGetMessage((RsContext)con,
321c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 ptr, len * 4,
322c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &receiveLen, sizeof(receiveLen),
323c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &subID, sizeof(subID));
324c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!id && receiveLen) {
325184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,
326184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "message receive buffer too small.  %zu", receiveLen);
327c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
328c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, 0);
329bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jint)id;
330c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
331c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
332c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
333bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
334c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
335bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextPeekMessage, con(%p)", (RsContext)con);
336c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
337c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
339bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    int id = dispatchTab.ContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
340c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                  &subID, sizeof(subID));
341c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    auxDataPtr[0] = (jint)subID;
342c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    auxDataPtr[1] = (jint)receiveLen;
343c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
344bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jint)id;
345c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
346c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
347bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
348c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
349bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextInitToClient, con(%p)", (RsContext)con);
350bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextInitToClient((RsContext)con);
351c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
352c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
353bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
354c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
355bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con);
356bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextDeinitToClient((RsContext)con);
357c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
358c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
359c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
360bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
361c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
362c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = NULL;
363c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = 0;
364c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (data) {
365c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        len = _env->GetArrayLength(data);
366c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        jint *ptr = _env->GetIntArrayElements(data, NULL);
367c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
368bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
369bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
370c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (data) {
371c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
372c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
373c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
374c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
375c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
376c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
377bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
378086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind,
379086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni               jboolean norm, jint size)
380c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
381bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con,
382bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            type, kind, norm, size);
383086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    return (jlong)(uintptr_t)dispatchTab.ElementCreate((RsContext)con,
384086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni                                                       (RsDataType)type,
385086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni                                                       (RsDataKind)kind,
386bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       norm, size);
387c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
388c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
389bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
390bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementCreate2(JNIEnv *_env, jobject _this, jlong con,
391bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
392c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
393c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    int fieldCount = _env->GetArrayLength(_ids);
394bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nElementCreate2, con(%p)", (RsContext)con);
395bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
396bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jIds = _env->GetLongArrayElements(_ids, NULL);
397bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
398c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
399bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
400bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
401bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
402bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < fieldCount; i ++) {
403bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        ids[i] = (RsElement)jIds[i];
404bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        arraySizes[i] = (uint32_t)jArraySizes[i];
405bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
406c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
407c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
408c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
409c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **nameArray = names.c_str();
410c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t *sizeArray = names.c_str_len();
411c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
412bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong id = (jlong)(uintptr_t)dispatchTab.ElementCreate2((RsContext)con,
413c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     (RsElement *)ids, fieldCount,
414c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
415c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     (const uint32_t *)arraySizes, fieldCount);
416c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
417bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(ids);
418bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(arraySizes);
419bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
420bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
421bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return id;
422c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
423c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
424c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
425c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
426bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
427c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
428bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
429bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                       jlongArray _IDs,
430c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jobjectArray _names,
431c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jintArray _arraySizes)
432c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
433bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    uint32_t dataSize = _env->GetArrayLength(_IDs);
434bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nElementGetSubElements, con(%p)", (RsContext)con);
435c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
436bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    uintptr_t *ids = (uintptr_t *)malloc(dataSize * sizeof(uintptr_t));
437c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
438c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
439c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
440bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes,
441bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      (uint32_t)dataSize);
442c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
443bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(uint32_t i = 0; i < dataSize; i++) {
444bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        const jlong id = (jlong)(uintptr_t)ids[i];
445bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        const jint arraySize = (jint)arraySizes[i];
446c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
447bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        _env->SetLongArrayRegion(_IDs, i, 1, &id);
448bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
449c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
450c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
451c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(ids);
452c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(names);
453c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(arraySizes);
454c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
455c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
456c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
457c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
458bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
459bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
460c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
461c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
462c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
463bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv);
464c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
465bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy,
466bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                    dimz, mips, faces, yuv);
467c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
468c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
469c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
470c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
471bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
472bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage,
473bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                       jlong pointer)
474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
475bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)",
476bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
477bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t) dispatchTab.AllocationCreateTyped((RsContext)con, (RsType)type,
478bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                (RsAllocationMipmapControl)mips,
479bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                (uint32_t)usage, (uintptr_t)pointer);
480c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
481c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
482c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
483bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
484c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
485bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits);
486bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
487c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
488c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
489c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
490bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
491dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{
492bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    ioDispatch.sAllocationSetSurface(_env, _this, (RsContext)con, (RsAllocation)alloc, sur, dispatchTab);
493dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang}
494dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang
495dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void
496bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
497dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{
498bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationIoSend((RsContext)con, (RsAllocation)alloc);
499dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang}
500dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang
501dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void
502bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
503c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
504bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
505bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
506c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
507c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
508c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic size_t GetBitmapSize(JNIEnv *env, jobject jbitmap) {
509c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
510c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
511c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(env, jbitmap, &info);
512c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t s = info.width * info.height;
513c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    switch (info.format) {
514c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGBA_8888: s *= 4; break;
515c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGB_565: s *= 2; break;
516c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGBA_4444: s *= 2; break;
517c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
518c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return s;
519c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
520c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
521bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
522bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
523bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                            jobject jbitmap, jint usage)
524c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
525bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong id = 0;
526257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    void *pixels = NULL;
527257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
528c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
529257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (pixels != NULL) {
530bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        id = (jlong)(uintptr_t)dispatchTab.AllocationCreateFromBitmap((RsContext)con,
531bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                      (RsType)type,
532bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                      (RsAllocationMipmapControl)mip,
533bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                      pixels,
534bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                      GetBitmapSize(_env, jbitmap),
535bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                      usage);
536257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        AndroidBitmap_unlockPixels(_env, jbitmap);
537257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
538c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
539c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
540c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
541bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
542bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type,
543bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                        jint mip, jobject jbitmap, jint usage)
544c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
545bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong id = 0;
546257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    void *pixels = NULL;
547257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
548c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
549257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (pixels != NULL) {
550bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        id = (jlong)(uintptr_t)dispatchTab.AllocationCreateTyped((RsContext)con,
551bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                 (RsType)type,
552bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                 (RsAllocationMipmapControl)mip,
553bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                 (uint32_t)usage,
554bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                 (uintptr_t)pixels);
555257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        AndroidBitmap_unlockPixels(_env, jbitmap);
556257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
557c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
558c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
559c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
560bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
561bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type,
562bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                jint mip, jobject jbitmap, jint usage)
563c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
564c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
565c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
566c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
567bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong id = 0;
568c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
569bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        id = (jlong)(uintptr_t)dispatchTab.AllocationCubeCreateFromBitmap((RsContext)con,
570bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                          (RsType)type,
571bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                          (RsAllocationMipmapControl)mip,
572bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                          pixels,
573bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                          GetBitmapSize(_env, jbitmap),
574bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                          usage);
575c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
576c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
577c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
578c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
579c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
580c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
581bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
582c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
583c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
584c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
585c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(_env, jbitmap, &info);
586c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
587c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
588c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
589c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
590c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
591bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 0,
592bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                     RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, info.width,
593bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                     info.height, pixels, GetBitmapSize(_env, jbitmap), 0);
594c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
595c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
596c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
597c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
598c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
599bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
600c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
601c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
602c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
603c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(_env, jbitmap, &info);
604c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
605c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
606c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
607c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
608c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
609bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        dispatchTab.AllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, pixels,
610bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                           GetBitmapSize(_env, jbitmap));
611c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
612c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
613c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    //bitmap.notifyPixelsChanged();
614c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
615c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
616c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
617c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
618bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData1D_l(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset,
619bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint count, jlongArray data, int sizeBytes)
620bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{
621bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint len = _env->GetArrayLength(data);
622bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)",
623bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, offset, count, len, sizeBytes);
624bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *ptr = _env->GetLongArrayElements(data, NULL);
625bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation1DData((RsContext)con, (RsAllocation)alloc, offset, lod, count,
626bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 ptr, sizeBytes);
627bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(data, ptr, JNI_ABORT);
628bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang}
629bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
630bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void
631bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData1D_i(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset,
632bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint count, jintArray data, int sizeBytes)
633c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
634c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
635bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)",
636bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, offset, count, len, sizeBytes);
637c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
638bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation1DData((RsContext)con, (RsAllocation)alloc, offset, lod, count,
639bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 ptr, sizeBytes);
640c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
641c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
642c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
643c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
644bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData1D_s(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset,
645bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint count, jshortArray data, int sizeBytes)
646c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
647c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
648bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)",
649bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, offset, count, len, sizeBytes);
650c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
651bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation1DData((RsContext)con, (RsAllocation)alloc, offset, lod, count,
652bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 ptr, sizeBytes);
653c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
654c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
655c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
656c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
657bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData1D_b(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset,
658bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint count, jbyteArray data, int sizeBytes)
659c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
660c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
661bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)",
662bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, offset, count, len, sizeBytes);
663c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
664bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation1DData((RsContext)con, (RsAllocation)alloc, offset, lod, count,
665bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 ptr, sizeBytes);
666c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
667c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
668c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
669c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
670bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData1D_f(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset,
671bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint count, jfloatArray data, int sizeBytes)
672c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
673c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
674bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)",
675bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, offset, count, len, sizeBytes);
676c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
677bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation1DData((RsContext)con, (RsAllocation)alloc, offset, lod, count,
678bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 ptr, sizeBytes);
679c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
680c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
681c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
682c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
683c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
684bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset,
685bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                         jint lod, jint compIdx, jbyteArray data, int sizeBytes)
686c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
687c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
688bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)",
689bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
690c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
691bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod,
692bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                        ptr, sizeBytes, compIdx);
693c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
694c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
695c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
696c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
697bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_s(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, jint yoff,
698bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint face, jint w, jint h, jshortArray data, int sizeBytes)
699c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
700c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
701bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation2DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
702bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, xoff, yoff, w, h, len);
703c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
704bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, xoff, yoff, lod,
705bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
706c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
707c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
708c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
709c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
710bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_b(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, jint yoff,
711bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint face, jint w, jint h, jbyteArray data, int sizeBytes)
712c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
713c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
714bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation2DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
715bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, xoff, yoff, w, h, len);
716c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
717bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, xoff, yoff, lod,
718bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
719c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
720c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
721c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
722c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
723bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_l(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, jint yoff,
724bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint face, jint w, jint h, jlongArray data, int sizeBytes)
725bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{
726bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint len = _env->GetArrayLength(data);
727bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
728bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, xoff, yoff, w, h, len);
729bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *ptr = _env->GetLongArrayElements(data, NULL);
730bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, xoff, yoff, lod,
731bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
732bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(data, ptr, JNI_ABORT);
733bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang}
734bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
735bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void
736bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_i(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, jint yoff,
737bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint face, jint w, jint h, jintArray data, int sizeBytes)
738c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
739c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
740bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
741bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, xoff, yoff, w, h, len);
742c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
743bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, xoff, yoff, lod,
744bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
745c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
746c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
747c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
748c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
749bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_f(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, jint yoff,
750bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint face, jint w, jint h, jfloatArray data, int sizeBytes)
751c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
752c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
753bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
754bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, xoff, yoff, w, h, len);
755c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
756bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, xoff, yoff, lod,
757bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
758c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
759c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
760c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
761c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
762bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
763bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                        jlong dstAlloc, jint dstXoff, jint dstYoff,
764c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstMip, jint dstFace,
765c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint width, jint height,
766bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                        jlong srcAlloc, jint srcXoff, jint srcYoff,
767c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcMip, jint srcFace)
768c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
769c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
770c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " dstMip(%i), dstFace(%i), width(%i), height(%i),"
771c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
772bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
773c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
774c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
775bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationCopy2DRange((RsContext)con,
776bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      (RsAllocation)dstAlloc,
777bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      dstXoff, dstYoff,
778bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      dstMip, dstFace,
779bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      width, height,
780bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      (RsAllocation)srcAlloc,
781bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      srcXoff, srcYoff,
782bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      srcMip, srcFace);
783c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
784c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
785c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
786bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_s(JNIEnv *_env, jobject _this, jlong con, jlong alloc,
787bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint xoff, jint yoff, jint zoff,
788bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint w, jint h, jint d, jshortArray data, int sizeBytes)
789c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
790c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
791bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation3DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
792bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
793c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
794bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation3DData((RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
795bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 lod, w, h, d, ptr, sizeBytes, 0);
796c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
797c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
798c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
799c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
800bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_b(JNIEnv *_env, jobject _this, jlong con, jlong alloc,
801bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint xoff, jint yoff, jint zoff,
802bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint w, jint h, jint d, jbyteArray data, int sizeBytes)
803c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
804c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
805bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation3DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
806bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
807c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
808bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation3DData((RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
809bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 lod, w, h, d, ptr, sizeBytes, 0);
810c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
811c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
812c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
813c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
814bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_l(JNIEnv *_env, jobject _this, jlong con, jlong alloc,
815bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint xoff, jint yoff, jint zoff,
816bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint w, jint h, jint d, jlongArray data, int sizeBytes)
817bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{
818bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint len = _env->GetArrayLength(data);
819bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation3DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
820bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
821bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *ptr = _env->GetLongArrayElements(data, NULL);
822bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation3DData((RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
823bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 lod, w, h, d, ptr, sizeBytes, 0);
824bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(data, ptr, JNI_ABORT);
825bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang}
826bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
827bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void
828bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_i(JNIEnv *_env, jobject _this, jlong con, jlong alloc,
829bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint xoff, jint yoff, jint zoff,
830bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint lod, jint w, jint h, jint d, jintArray data, int sizeBytes)
831c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
832c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
833bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation3DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
834bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
835c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
836bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation3DData((RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
837bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 lod, w, h, d, ptr, sizeBytes, 0);
838c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
839c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
840c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
841c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
842bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_f(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, jint yoff,
843bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                    jint zoff, jint lod, jint w, jint h, jint d, jfloatArray data, int sizeBytes)
844c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
845c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
846bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocation3DData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
847bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
848c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
849bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.Allocation3DData((RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
850bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                 lod, w, h, d, ptr, sizeBytes, 0);
851c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
852c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
853c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
855bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
856bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                        jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
857c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstMip,
858c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint width, jint height, jint depth,
859bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                        jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
860c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcMip)
861c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
862c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
863c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " dstMip(%i), width(%i), height(%i),"
864c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
865bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
866c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
867c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
868bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationCopy3DRange((RsContext)con,
869bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      (RsAllocation)dstAlloc,
870bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      dstXoff, dstYoff, dstZoff, dstMip,
871bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      width, height, depth,
872bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      (RsAllocation)srcAlloc,
873bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                      srcXoff, srcYoff, srcZoff, srcMip);
874bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang}
875bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
876bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void
877bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationRead_l(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jlongArray data)
878bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{
879bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint len = _env->GetArrayLength(data);
880bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", (RsContext)con,
881bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsAllocation)alloc, len);
882bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *ptr = _env->GetLongArrayElements(data, NULL);
883bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jsize length = _env->GetArrayLength(data);
884bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationRead((RsContext)con, (RsAllocation)alloc, ptr, length * sizeof(int));
885bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(data, ptr, 0);
886c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
887c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
888c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
889bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationRead_i(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jintArray data)
890c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
891c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
892bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", (RsContext)con,
893bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsAllocation)alloc, len);
894c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
895c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
896bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationRead((RsContext)con, (RsAllocation)alloc, ptr, length * sizeof(int));
897c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, 0);
898c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
899c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
900c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
901bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationRead_s(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jshortArray data)
902c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
903c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
904bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", (RsContext)con,
905bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsAllocation)alloc, len);
906c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
907c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
908bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationRead((RsContext)con, (RsAllocation)alloc, ptr, length * sizeof(short));
909c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, 0);
910c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
911c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
912c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
913bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationRead_b(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jbyteArray data)
914c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
915c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
916bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", (RsContext)con,
917bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsAllocation)alloc, len);
918c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
919c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
920bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationRead((RsContext)con, (RsAllocation)alloc, ptr, length * sizeof(char));
921c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, 0);
922c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
923c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
924c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
925bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationRead_f(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jfloatArray data)
926c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
927c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
928bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", (RsContext)con,
929bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsAllocation)alloc, len);
930c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
931c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
932bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationRead((RsContext)con, (RsAllocation)alloc, ptr, length * sizeof(float));
933c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, 0);
934c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
935c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
936bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
937bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
938c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
939bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
940bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t) dispatchTab.AllocationGetType((RsContext)con, (RsAllocation)a);
941c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
942c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
943c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
944bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
945c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
946bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con,
947bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsAllocation)alloc, dimX);
948bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.AllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
949c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
950c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
951c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
952c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
953c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
954bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
955c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
956bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)",
957bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
958bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
959c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
960c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
961c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
962bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
963c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
964bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con,
965bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, slot, val);
966bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
967c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
968c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
969c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
970bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
971c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
972bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con,
973bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, slot, val);
974bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
975c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
976c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
977c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
978bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
979c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
980bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con,
981bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, slot, val);
982bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
983c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
984c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
985c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
986bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
987c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
988bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con,
989bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, slot, val);
990bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
991c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
992c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
993c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
994bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
995c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
996bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con,
997bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, slot, val);
998bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
999c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1000c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1001c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1002bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
1003c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1004bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1005c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
1006c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1007bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
1008c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1009c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1010c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1011c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1012bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data,
1013bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                jlong elem, jintArray dims)
1014c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1015bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1016c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
1017c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1018c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1019c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
1020bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
10211bb70c5cd78ab10ee54376f76d78b61c8352baddStephen Hines                     (const uint32_t *)dimsPtr, dimsLen);
1022c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1023c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1024c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1025c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1026c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1027c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1028bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
1029c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1030bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", (RsContext)con,
1031bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)script, (const char *)timeZone);
1032c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1033c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint length = _env->GetArrayLength(timeZone);
1034c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte* timeZone_ptr;
1035c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1036c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1037bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
1038c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1039c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (timeZone_ptr) {
1040c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1041c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1042c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1043c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1044c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1045bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
1046c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1047bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
1048bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptInvoke((RsContext)con, (RsScript)obj, slot);
1049c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1050c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1051c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1052bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
1053c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1054bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1055c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
1056c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1057bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
1058c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1059c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1060c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1061c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1062bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptForEach(JNIEnv *_env, jobject _this, jlong con,
1063bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang               jlong script, jint slot, jlong ain, jlong aout)
1064c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1065bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1066bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
1067bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              (RsAllocation)ain, (RsAllocation)aout,
1068bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              NULL, 0, NULL, 0);
1069c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1070c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1071bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptForEachV(JNIEnv *_env, jobject _this, jlong con,
1072bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                jlong script, jint slot, jlong ain, jlong aout, jbyteArray params)
1073c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1074bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1075c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(params);
1076c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1077bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
1078bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              (RsAllocation)ain, (RsAllocation)aout,
1079bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              ptr, len, NULL, 0);
1080c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1081c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1082c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1083c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1084bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con,
1085bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                      jlong script, jint slot, jlong ain, jlong aout,
1086c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                      jint xstart, jint xend,
1087c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                      jint ystart, jint yend, jint zstart, jint zend)
1088c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1089bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1090c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    RsScriptCall sc;
1091c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xStart = xstart;
1092c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xEnd = xend;
1093c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yStart = ystart;
1094c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yEnd = yend;
1095c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zStart = zstart;
1096c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zEnd = zend;
1097c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1098c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayStart = 0;
1099c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayEnd = 0;
1100bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
1101bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              (RsAllocation)ain, (RsAllocation)aout,
1102bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              NULL, 0, &sc, sizeof(sc));
1103c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1104c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1105c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1106bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con,
1107bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                       jlong script, jint slot, jlong ain, jlong aout,
1108c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jbyteArray params, jint xstart, jint xend,
1109c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jint ystart, jint yend, jint zstart, jint zend)
1110c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1111bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1112c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(params);
1113c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1114c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    RsScriptCall sc;
1115c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xStart = xstart;
1116c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xEnd = xend;
1117c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yStart = ystart;
1118c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yEnd = yend;
1119c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zStart = zstart;
1120c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zEnd = zend;
1121c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1122c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayStart = 0;
1123c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayEnd = 0;
1124bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot,
1125bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              (RsAllocation)ain, (RsAllocation)aout,
1126bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                              ptr, len, &sc, sizeof(sc));
1127c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1128c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1129c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1130c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
1131c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1132bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1133bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
1134c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jstring resName, jstring cacheDir,
1135c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jbyteArray scriptRef, jint length)
1136c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1137bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptCCreate, con(%p)", (RsContext)con);
1138c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1139c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8 resNameUTF(_env, resName);
1140c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
1141bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong ret = 0;
1142c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte* script_ptr = NULL;
1143c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint _exception = 0;
1144c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint remaining;
1145c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!scriptRef) {
1146c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
1147c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
1148c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
1149c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1150c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (length < 0) {
1151c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
1152c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
1153c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
1154c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1155c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    remaining = _env->GetArrayLength(scriptRef);
1156c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (remaining < length) {
1157c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
1158c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException",
1159c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //        "length > script.length - offset");
1160c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
1161c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1162c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    script_ptr = (jbyte *)
1163c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
1164c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1165c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    //rsScriptCSetText(con, (const char *)script_ptr, length);
1166c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1167bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    ret = (jlong)(uintptr_t)dispatchTab.ScriptCCreate((RsContext)con,
1168bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                      resNameUTF.c_str(), resNameUTF.length(),
1169bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                      cacheDirUTF.c_str(), cacheDirUTF.length(),
1170bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                      (const char *)script_ptr, length);
1171c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1172c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainexit:
1173c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (script_ptr) {
1174c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
1175c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                _exception ? JNI_ABORT: 0);
1176c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1177c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1178bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)ret;
1179c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1180c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1181bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1182bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
1183c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1184bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid);
1185bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
1186c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1187c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1188bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1189bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
1190c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1191bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con,
1192bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)sid, slot, sig);
1193bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.ScriptKernelIDCreate((RsContext)con, (RsScript)sid,
1194bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                                     slot, sig);
1195c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1196c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1197bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1198086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
1199086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{
1200086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    LOG_API("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con,
1201086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni            (void *)sid, slot);
1202086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    return (jlong)dispatchTab.ScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot);
1203086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni}
1204086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni
1205086010500c28e2bca57ea583d3f38da9a2f2f414Yang Nistatic jlong
1206bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
1207c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1208bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot);
1209bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
1210c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1211c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1212bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1213bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
1214bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlongArray _dstk, jlongArray _dstf, jlongArray _types)
1215bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{
1216bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con);
1217bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1218bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint kernelsLen = _env->GetArrayLength(_kernels);
1219bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr);
1220bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
1221bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < kernelsLen; ++i) {
1222bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
1223bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
1224bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1225bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint srcLen = _env->GetArrayLength(_src);
1226bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr);
1227bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
1228bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < srcLen; ++i) {
1229bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
1230bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
1231bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1232bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint dstkLen = _env->GetArrayLength(_dstk);
1233bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr);
1234bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
1235bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < dstkLen; ++i) {
1236bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
1237bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
1238bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1239bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint dstfLen = _env->GetArrayLength(_dstf);
1240bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr);
1241bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
1242bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < dstfLen; ++i) {
1243bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
1244bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
1245bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1246bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jint typesLen = _env->GetArrayLength(_types);
1247bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr);
1248bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
1249bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    for(int i = 0; i < typesLen; ++i) {
1250bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        typesPtr[i] = (RsType)jTypesPtr[i];
1251bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    }
1252bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1253bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    jlong id = (jlong)(uintptr_t) dispatchTab.ScriptGroupCreate((RsContext)con,
1254bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                               (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
1255bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                               (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
1256bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                               (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
1257bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                               (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
1258bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                               (RsType *)typesPtr, typesLen * sizeof(RsType));
1259bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1260bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(kernelsPtr);
1261bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(srcPtr);
1262bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(dstkPtr);
1263bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(dstfPtr);
1264bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    free(typesPtr);
1265bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
1266bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
1267bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
1268bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
1269bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
1270c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
1271c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1272c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1273c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1274bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
1275c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1276bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
1277bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)gid, (void *)kid, (void *)alloc);
1278bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid,
1279bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                    (RsAllocation)alloc);
1280c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1281c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1282c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1283bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
1284c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1285bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
1286bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang            (void *)gid, (void *)kid, (void *)alloc);
1287bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid,
1288bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                     (RsAllocation)alloc);
1289c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1290c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1291c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1292bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
1293c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1294bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
1295bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
1296c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1297c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1298c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1299c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1300bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong
1301bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
1302c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
1303c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1304bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    LOG_API("nSamplerCreate, con(%p)", (RsContext)con);
1305bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jlong)(uintptr_t)dispatchTab.SamplerCreate((RsContext)con,
1306bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       (RsSamplerValue)magFilter,
1307bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       (RsSamplerValue)minFilter,
1308bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       (RsSamplerValue)wrapS,
1309bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       (RsSamplerValue)wrapT,
1310bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       (RsSamplerValue)wrapR,
1311bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang                                                       aniso);
1312bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang}
1313bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1314bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jint
1315bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSystemGetPointerSize(JNIEnv *_env, jobject _this) {
1316bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    return (jint)sizeof(void*);
1317c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1318c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1319c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1320c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1321c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1322bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1323c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic const char *classPathName = "android/support/v8/renderscript/RenderScript";
1324c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1325c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic JNINativeMethod methods[] = {
1326bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nLoadSO",                        "(Z)Z",                                    (bool*)nLoadSO },
1327dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{"nLoadIOSO",                      "()Z",                                     (bool*)nLoadIOSO },
1328bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceCreate",                  "()J",                                     (void*)nDeviceCreate },
1329bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceDestroy",                 "(J)V",                                    (void*)nDeviceDestroy },
1330bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceSetConfig",               "(JII)V",                                  (void*)nDeviceSetConfig },
1331bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetUserMessage",         "(J[I)I",                                  (void*)nContextGetUserMessage },
1332bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetErrorMessage",        "(J)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1333bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextPeekMessage",            "(J[I)I",                                  (void*)nContextPeekMessage },
1334bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextInitToClient",           "(J)V",                                    (void*)nContextInitToClient },
1335bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextDeinitToClient",         "(J)V",                                    (void*)nContextDeinitToClient },
1336c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1337c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// All methods below are thread protected in java.
1339ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang{"rsnContextCreate",                 "(JIIILjava/lang/String;)J",             (void*)nContextCreate },
1340bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextFinish",                 "(J)V",                                  (void*)nContextFinish },
1341bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSetPriority",            "(JI)V",                                 (void*)nContextSetPriority },
1342bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDestroy",                "(J)V",                                  (void*)nContextDestroy },
1343bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDump",                   "(JI)V",                                 (void*)nContextDump },
1344bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSendMessage",            "(JI[I)V",                               (void*)nContextSendMessage },
1345a6620f0f767012a1d0c2c8f71529c919bba74a41Miao Wang//{"rsnClosureCreate",                 "(JJJ[J[J[I[J[J)J",                      (void*)nClosureCreate },
1346a6620f0f767012a1d0c2c8f71529c919bba74a41Miao Wang//{"rsnClosureSetArg",                 "(JJIJI)V",                              (void*)nClosureSetArg },
1347a6620f0f767012a1d0c2c8f71529c919bba74a41Miao Wang//{"rsnClosureSetGlobal",              "(JJJJI)V",                              (void*)nClosureSetGlobal },
1348bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnObjDestroy",                    "(JJ)V",                                 (void*)nObjDestroy },
1349bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1350bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate",                 "(JJIZI)J",                              (void*)nElementCreate },
1351bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate2",                "(J[J[Ljava/lang/String;[I)J",           (void*)nElementCreate2 },
1352bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementGetSubElements",         "(JJ[J[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
1353bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1354bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnTypeCreate",                    "(JJIIIZZI)J",                           (void*)nTypeCreate },
1355bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1356bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateTyped",         "(JJIIJ)J",                              (void*)nAllocationCreateTyped },
1357bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateFromBitmap",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateFromBitmap },
1358bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateBitmapBackedAllocation",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateBitmapBackedAllocation },
1359bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCubeCreateFromBitmap },
1360bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1361bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyFromBitmap",      "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
1362bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyToBitmap",        "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
1363bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1364bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSyncAll",             "(JJI)V",                                (void*)nAllocationSyncAll },
1365bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSetSurface",          "(JJLandroid/view/Surface;)V",           (void*)nAllocationSetSurface },
1366bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationIoSend",              "(JJ)V",                                 (void*)nAllocationIoSend },
1367bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData1D",              "(JJIII[JI)V",                           (void*)nAllocationData1D_l },
1368bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData1D",              "(JJIII[II)V",                           (void*)nAllocationData1D_i },
1369bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData1D",              "(JJIII[SI)V",                           (void*)nAllocationData1D_s },
1370bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData1D",              "(JJIII[BI)V",                           (void*)nAllocationData1D_b },
1371bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData1D",              "(JJIII[FI)V",                           (void*)nAllocationData1D_f },
1372bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationElementData1D",       "(JJIII[BI)V",                           (void*)nAllocationElementData1D },
1373bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D",              "(JJIIIIII[JI)V",                        (void*)nAllocationData2D_l },
1374bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D",              "(JJIIIIII[II)V",                        (void*)nAllocationData2D_i },
1375bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D",              "(JJIIIIII[SI)V",                        (void*)nAllocationData2D_s },
1376bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D",              "(JJIIIIII[BI)V",                        (void*)nAllocationData2D_b },
1377bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D",              "(JJIIIIII[FI)V",                        (void*)nAllocationData2D_f },
1378bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D",              "(JJIIIIIIJIIII)V",                      (void*)nAllocationData2D_alloc },
1379bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D",              "(JJIIIIIII[JI)V",                       (void*)nAllocationData3D_l },
1380bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D",              "(JJIIIIIII[II)V",                       (void*)nAllocationData3D_i },
1381bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D",              "(JJIIIIIII[SI)V",                       (void*)nAllocationData3D_s },
1382bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D",              "(JJIIIIIII[BI)V",                       (void*)nAllocationData3D_b },
1383bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D",              "(JJIIIIIII[FI)V",                       (void*)nAllocationData3D_f },
1384bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D",              "(JJIIIIIIIJIIII)V",                     (void*)nAllocationData3D_alloc },
1385bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationRead",                "(JJ[I)V",                               (void*)nAllocationRead_i },
1386bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationRead",                "(JJ[S)V",                               (void*)nAllocationRead_s },
1387bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationRead",                "(JJ[B)V",                               (void*)nAllocationRead_b },
1388bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationRead",                "(JJ[F)V",                               (void*)nAllocationRead_f },
1389bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGetType",             "(JJ)J",                                 (void*)nAllocationGetType},
1390bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationResize1D",            "(JJI)V",                                (void*)nAllocationResize1D },
1391bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGenerateMipmaps",     "(JJ)V",                                 (void*)nAllocationGenerateMipmaps },
1392bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1393bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptBindAllocation",          "(JJJI)V",                               (void*)nScriptBindAllocation },
1394bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetTimeZone",             "(JJ[B)V",                               (void*)nScriptSetTimeZone },
1395bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptInvoke",                  "(JJI)V",                                (void*)nScriptInvoke },
1396bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptInvokeV",                 "(JJI[B)V",                              (void*)nScriptInvokeV },
1397bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptForEach",                 "(JJIJJ)V",                              (void*)nScriptForEach },
1398bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptForEach",                 "(JJIJJ[B)V",                            (void*)nScriptForEachV },
1399bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptForEachClipped",          "(JJIJJIIIIII)V",                        (void*)nScriptForEachClipped },
1400bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptForEachClipped",          "(JJIJJ[BIIIIII)V",                      (void*)nScriptForEachClippedV },
1401bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarI",                 "(JJII)V",                               (void*)nScriptSetVarI },
1402bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarJ",                 "(JJIJ)V",                               (void*)nScriptSetVarJ },
1403bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarF",                 "(JJIF)V",                               (void*)nScriptSetVarF },
1404bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarD",                 "(JJID)V",                               (void*)nScriptSetVarD },
1405bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarV",                 "(JJI[B)V",                              (void*)nScriptSetVarV },
1406bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarVE",                "(JJI[BJ[I)V",                           (void*)nScriptSetVarVE },
1407bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptSetVarObj",               "(JJIJ)V",                               (void*)nScriptSetVarObj },
1408bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1409bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptCCreate",                 "(JLjava/lang/String;Ljava/lang/String;[BI)J",  (void*)nScriptCCreate },
1410bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptIntrinsicCreate",         "(JIJ)J",                                (void*)nScriptIntrinsicCreate },
1411bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptKernelIDCreate",          "(JJII)J",                               (void*)nScriptKernelIDCreate },
1412086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{"rsnScriptInvokeIDCreate",          "(JJI)J",                                (void*)nScriptInvokeIDCreate },
1413bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptFieldIDCreate",           "(JJI)J",                                (void*)nScriptFieldIDCreate },
1414bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupCreate",             "(J[J[J[J[J[J)J",                        (void*)nScriptGroupCreate },
1415a6620f0f767012a1d0c2c8f71529c919bba74a41Miao Wang//{"rsnScriptGroup2Create",            "(J[J)J",                                (void*)nScriptGroup2Create },
1416bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetInput",           "(JJJJ)V",                               (void*)nScriptGroupSetInput },
1417bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetOutput",          "(JJJJ)V",                               (void*)nScriptGroupSetOutput },
1418bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupExecute",            "(JJ)V",                                 (void*)nScriptGroupExecute },
1419bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang
1420bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSamplerCreate",                 "(JIIIIIF)J",                            (void*)nSamplerCreate },
1421c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1422bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSystemGetPointerSize",          "()I",                                   (void*)nSystemGetPointerSize },
1423c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
1424c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1425c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1426c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1427c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainjint JNI_OnLoad(JavaVM* vm, void* reserved)
1428c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1429c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv* env = NULL;
1430257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    jclass clazz = NULL;
1431c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint result = -1;
1432c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1433c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1434184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
1435184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "ERROR: GetEnv failed\n");
1436257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        goto bail;
1437257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
1438257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (env == NULL) {
1439184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: env == NULL");
1440257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        goto bail;
1441257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
1442257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines
1443257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    clazz = env->FindClass(classPathName);
1444257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (clazz == NULL) {
1445c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto bail;
1446c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1447c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1448257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (env->RegisterNatives(clazz, methods, NELEM(methods)) < 0) {
1449184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
1450184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "ERROR: MediaPlayer native registration failed\n");
1451c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto bail;
1452c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1453c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1454c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    /* success -- return valid version number */
1455c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    result = JNI_VERSION_1_4;
1456c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1457c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainbail:
1458c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return result;
1459c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1460