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