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