android_renderscript_RenderScript.cpp revision 25207df658d6a8a3e885c7017fcc25702363583c
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 24cbe25a86b4aa3353c8016a129028671e902611fStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project 3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License. 6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at 7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software 11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and 14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License. 15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */ 16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams#define LOG_TAG "libRS_jni" 18f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdlib.h> 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdio.h> 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <fcntl.h> 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <unistd.h> 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <math.h> 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <utils/misc.h> 2509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer#include <inttypes.h> 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 27eece0dda56ae29fff6e9003df97594f6ac50b6e2Derek Sollenberger#include <SkBitmap.h> 28ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams 29b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/Asset.h> 30b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h> 31b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h> 32f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h" 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h" 35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h" 36ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h" 37b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h" 38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 391d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rs.h> 401d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rsEnv.h> 41fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams#include <gui/Surface.h> 42d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden#include <gui/GLConsumer.h> 4352800617946c456e78ed010c82d0ec4358368164Mathias Agopian#include <gui/Surface.h> 44faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h> 45d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 463762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE 4767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampestatic constexpr bool kLogApi = false; 48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android; 50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 5167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampetemplate <typename... T> 5267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampevoid UNUSED(T... t) {} 5367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe 54414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ 55e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams jint len = 0; \ 56488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes void *ptr = nullptr; \ 5721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams size_t typeBytes = 0; \ 58414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines jint relFlag = 0; \ 59414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines if (readonly) { \ 60414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \ 61414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines relFlag = JNI_ABORT; \ 62414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines } \ 63e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams switch(dataType) { \ 64e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_32: \ 65e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jfloatArray)data); \ 66e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \ 6721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 68e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams fnc(__VA_ARGS__); \ 69414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \ 70e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 71e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_64: \ 72e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jdoubleArray)data); \ 73e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \ 7421659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 75e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams fnc(__VA_ARGS__); \ 76414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \ 77e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 78e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_8: \ 79e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_8: \ 80e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jbyteArray)data); \ 81e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \ 8221659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 1; \ 83e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams fnc(__VA_ARGS__); \ 84414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \ 85e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 86e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_16: \ 87e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_16: \ 88e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jshortArray)data); \ 89e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetShortArrayElements((jshortArray)data, flag); \ 9021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 2; \ 91e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams fnc(__VA_ARGS__); \ 92414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \ 93e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 94e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_32: \ 95e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_32: \ 96e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jintArray)data); \ 97e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetIntArrayElements((jintArray)data, flag); \ 9821659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 99e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams fnc(__VA_ARGS__); \ 100414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \ 101e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 102e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_64: \ 103e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_64: \ 104e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jlongArray)data); \ 105e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetLongArrayElements((jlongArray)data, flag); \ 10621659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 107e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams fnc(__VA_ARGS__); \ 108414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \ 109e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 110e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams default: \ 111e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams break; \ 112e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams } \ 11367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe UNUSED(len, ptr, typeBytes, relFlag); \ 114e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams} 115e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 116e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 117b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 { 118b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic: 1192123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) { 120488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes fCStr = env->GetStringUTFChars(str, nullptr); 121b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fLength = env->GetStringUTFLength(str); 122b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1232123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringToUTF8() { 124b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fEnv->ReleaseStringUTFChars(fJStr, fCStr); 125b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 126b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* c_str() const { return fCStr; } 127b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize length() const { return fLength; } 128b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 129b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate: 130b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk JNIEnv* fEnv; 131b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fJStr; 132b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* fCStr; 133b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize fLength; 134b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}; 135b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1362123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 { 1372123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic: 1382123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength) 1392123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk : mEnv(env), mStrings(strings), mStringsLength(stringsLength) { 140488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings = nullptr; 141488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mSizeArray = nullptr; 1422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk if (stringsLength > 0) { 1432123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mCStrings = (const char **)calloc(stringsLength, sizeof(char *)); 1442123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t)); 1452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct = 0; ct < stringsLength; ct ++) { 1462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 147488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings[ct] = mEnv->GetStringUTFChars(s, nullptr); 1482123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray[ct] = mEnv->GetStringUTFLength(s); 1492123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 1502123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 1512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 1522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringArrayToUTF8() { 1532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct=0; ct < mStringsLength; ct++) { 1542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 1552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mEnv->ReleaseStringUTFChars(s, mCStrings[ct]); 1562123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 1572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mCStrings); 1582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mSizeArray); 1592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 1602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **c_str() const { return mCStrings; } 1612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *c_str_len() const { return mSizeArray; } 1622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize length() const { return mStringsLength; } 1632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 1642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate: 1652123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk JNIEnv *mEnv; 1662123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jobjectArray mStrings; 1672123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **mCStrings; 1682123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *mSizeArray; 1692123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize mStringsLength; 1702123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk}; 1712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 172d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 173d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 174ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0; 175ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0; 176d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 177d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this) 178d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 179eff663f391fa4f119685d5c14489b94661ea126fTim Murray gContextId = _env->GetFieldID(_this, "mContext", "J"); 180ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams 181ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams jclass bitmapClass = _env->FindClass("android/graphics/Bitmap"); 18236bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J"); 183d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 184d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 185d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 186d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1873eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void 188eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con) 18996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{ 19067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 19167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextFinish, con(%p)", (RsContext)con); 19267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 193eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextFinish((RsContext)con); 19496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams} 19596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams 196281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic jlong 197281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID, 198281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong returnValue, jlongArray fieldIDArray, 199281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray valueArray, jintArray sizeArray, 200281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray depClosureArray, jlongArray depFieldIDArray) { 201281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 202281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 203281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsScriptFieldID* fieldIDs = 204281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length); 205281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i< fieldIDs_length; i++) { 206281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 207281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 208281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 209281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 210281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 211281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length); 212281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < values_length; i++) { 213281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni values[i] = (uintptr_t)jValues[i]; 214281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 215281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 216281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr); 217281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 218281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 219281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jDepClosures = 220281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni _env->GetLongArrayElements(depClosureArray, nullptr); 221281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize depClosures_length = _env->GetArrayLength(depClosureArray); 222281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsClosure* depClosures = 223281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length); 224281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < depClosures_length; i++) { 225281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depClosures[i] = (RsClosure)jDepClosures[i]; 226281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 227281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 228281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jDepFieldIDs = 229281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni _env->GetLongArrayElements(depFieldIDArray, nullptr); 230281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray); 231281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsScriptFieldID* depFieldIDs = 232281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length); 233281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < depClosures_length; i++) { 234281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depFieldIDs[i] = (RsClosure)jDepFieldIDs[i]; 235281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 236281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 237281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni return (jlong)(uintptr_t)rsClosureCreate( 238281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, 239281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length, 240281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (size_t*)sizes, (size_t)sizes_length, 241281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depClosures, (size_t)depClosures_length, 242281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depFieldIDs, (size_t)depFieldIDs_length); 243281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 244281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 245be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 246be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID, 247be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray, 248be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jintArray sizeArray) { 249be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr); 250be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize jParamLength = _env->GetArrayLength(paramArray); 251be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 252be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 253be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 254be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni RsScriptFieldID* fieldIDs = 255be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length); 256be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni for (int i = 0; i< fieldIDs_length; i++) { 257be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 258be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 259be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 260be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 261be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 262be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length); 263be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni for (int i = 0; i < values_length; i++) { 264be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni values[i] = (uintptr_t)jValues[i]; 265be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 266be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 267be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr); 268be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 269be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 270be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return (jlong)(uintptr_t)rsInvokeClosureCreate( 271be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, 272be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length, 273be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (size_t*)sizes, (size_t)sizes_length); 274be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 275be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 276281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 277281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 278281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jint index, jlong value, jint size) { 279281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, 280281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (uintptr_t)value, (size_t)size); 281281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 282281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 283281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 284281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 285281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong fieldID, jlong value, jint size) { 286281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetGlobal((RsContext)con, (RsClosure)closureID, 287281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsScriptFieldID)fieldID, (uintptr_t)value, (size_t)size); 288281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 289281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 290281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic long 291281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, 292ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni jstring cacheDir, jlongArray closureArray) { 293ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 294ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni 295281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 296281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 297281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 298281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < numClosures; i++) { 299281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni closures[i] = (RsClosure)jClosures[i]; 300281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 301281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 302ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni return (jlong)(uintptr_t)rsScriptGroup2Create( 303ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni (RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length(), 304ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni closures, numClosures); 305281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 306281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 307281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 308281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 309281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 310281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 311281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 31296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void 31325207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 31425207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 31525207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY, 31625207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 31725207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 31825207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 31925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 32025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 32125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 32225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 32325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 32425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 32525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 32625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 32725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 32825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.f = alpha; 32925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.f = beta; 33025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 33125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 33225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 33325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 33425207df658d6a8a3e885c7017fcc25702363583cTim Murray 33525207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 33625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 33725207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 33825207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 33925207df658d6a8a3e885c7017fcc25702363583cTim Murray 34025207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 34125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 34225207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 34325207df658d6a8a3e885c7017fcc25702363583cTim Murray} 34425207df658d6a8a3e885c7017fcc25702363583cTim Murray 34525207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 34625207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 34725207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 34825207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY, 34925207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 35025207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 35125207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 35225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 35325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 35425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 35525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 35625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 35725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 35825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 35925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 36025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 36125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.d = alpha; 36225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.d = beta; 36325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 36425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 36525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 36625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 36725207df658d6a8a3e885c7017fcc25702363583cTim Murray 36825207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 36925207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 37025207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 37125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 37225207df658d6a8a3e885c7017fcc25702363583cTim Murray 37325207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 37425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 37525207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 37625207df658d6a8a3e885c7017fcc25702363583cTim Murray} 37725207df658d6a8a3e885c7017fcc25702363583cTim Murray 37825207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 37925207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 38025207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 38125207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX, 38225207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 38325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 38425207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 38525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 38625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 38725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 38825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 38925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 39025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 39125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 39225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 39325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 39425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.r = alphaX; 39525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.i = alphaY; 39625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.c.r = betaX; 39725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.c.r = betaY; 39825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 39925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 40025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 40125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 40225207df658d6a8a3e885c7017fcc25702363583cTim Murray 40325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 40425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 40525207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 40625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 40725207df658d6a8a3e885c7017fcc25702363583cTim Murray 40825207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 40925207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 41025207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 41125207df658d6a8a3e885c7017fcc25702363583cTim Murray} 41225207df658d6a8a3e885c7017fcc25702363583cTim Murray 41325207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 41425207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 41525207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 41625207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX, 41725207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 41825207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 41925207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 42025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 42125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 42225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 42325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 42425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 42525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 42625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 42725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 42825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 42925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.r = alphaX; 43025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.i = alphaY; 43125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.z.r = betaX; 43225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.z.r = betaY; 43325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 43425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 43525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 43625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 43725207df658d6a8a3e885c7017fcc25702363583cTim Murray 43825207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 43925207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 44025207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 44125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 44225207df658d6a8a3e885c7017fcc25702363583cTim Murray 44325207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 44425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 44525207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 44625207df658d6a8a3e885c7017fcc25702363583cTim Murray} 44725207df658d6a8a3e885c7017fcc25702363583cTim Murray 44825207df658d6a8a3e885c7017fcc25702363583cTim Murray 44925207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 450460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str) 4513eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{ 45267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 45367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 45467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 4553eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jint len = _env->GetArrayLength(str); 4563eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0); 457eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len); 4583eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT); 4593eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams} 4603eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 461fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring 462460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj) 463fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{ 46467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 46567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 46667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 467488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes const char *name = nullptr; 468eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaGetName((RsContext)con, (void *)obj, &name); 469488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if(name == nullptr || strlen(name) == 0) { 470488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes return nullptr; 471581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk } 472fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk return _env->NewStringUTF(name); 473fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk} 474fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk 4757ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void 476460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 4777ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{ 47867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 47967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 48067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 481eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsObjDestroy((RsContext)con, (void *)obj); 4827ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams} 4837ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams 4843eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// --------------------------------------------------------------------------- 4853eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 486eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 487d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this) 488d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 48967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 49067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceCreate"); 49167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 4923aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsDeviceCreate(); 493d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 494d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 495d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 4965eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 497d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 49867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 49967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceDestroy"); 50067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 501d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return rsDeviceDestroy((RsDevice)dev); 502d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 503d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 504ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void 5055eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 506ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 50767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 50867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 50967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 510ebfb436a49673693b98469683451bd9ede797557Jason Sams return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 511ebfb436a49673693b98469683451bd9ede797557Jason Sams} 512ebfb436a49673693b98469683451bd9ede797557Jason Sams 513eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 51481cd2b18bd36285d1843f78418282e1dad156fbdJason SamsnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint flags, jint sdkVer, jint contextType) 515d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 51667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 51767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreate"); 51867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 51981cd2b18bd36285d1843f78418282e1dad156fbdJason Sams return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, 0, sdkVer, (RsContextType)contextType, flags); 520704ff64b099406bb328898a7443921f22dbffd6dJason Sams} 521704ff64b099406bb328898a7443921f22dbffd6dJason Sams 522eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 5235eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 5240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint colorMin, jint colorPref, 5250e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint alphaMin, jint alphaPref, 5260e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint depthMin, jint depthPref, 5270e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint stencilMin, jint stencilPref, 5280e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint samplesMin, jint samplesPref, jfloat samplesQ, 5290e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint dpi) 53011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{ 53111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams RsSurfaceConfig sc; 53211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaMin = alphaMin; 53311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaPref = alphaPref; 53411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorMin = colorMin; 53511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorPref = colorPref; 53611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthMin = depthMin; 53711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthPref = depthPref; 53811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesMin = samplesMin; 53911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesPref = samplesPref; 54011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesQ = samplesQ; 54111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams 54267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 54367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreateGL"); 54467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 5453aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi); 546d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 547d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 548d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 549eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 5507d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{ 55167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 55267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 55367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 554eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetPriority((RsContext)con, p); 5557d787b4722eaeb79cab42c36060336e092b77b5fJason Sams} 5567d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 5577d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 5587d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 5597d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void 560eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd) 561efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{ 56267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 56367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, 56467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (Surface *)wnd); 56567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 566efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 567488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes ANativeWindow * window = nullptr; 568488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (wnd == nullptr) { 569efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 570efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } else { 57164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown window = android_view_Surface_getNativeWindow(_env, wnd).get(); 572efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } 573efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 574eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetSurface((RsContext)con, width, height, window); 575efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams} 576efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 577efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void 578eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con) 579d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 58067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 58167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDestroy, con(%p)", (RsContext)con); 58267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 583eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDestroy((RsContext)con); 584d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 585d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 586715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void 587eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 588715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{ 58967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 59067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 59167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 592715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams rsContextDump((RsContext)con, bits); 593715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams} 594d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 595d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 596eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con) 59765e7aa56f56097418d617663683544c25b3988eaJason Sams{ 59867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 59967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPause, con(%p)", (RsContext)con); 60067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 601eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextPause((RsContext)con); 60265e7aa56f56097418d617663683544c25b3988eaJason Sams} 60365e7aa56f56097418d617663683544c25b3988eaJason Sams 60465e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void 605eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con) 60665e7aa56f56097418d617663683544c25b3988eaJason Sams{ 60767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 60867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextResume, con(%p)", (RsContext)con); 60967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 610eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextResume((RsContext)con); 61165e7aa56f56097418d617663683544c25b3988eaJason Sams} 61265e7aa56f56097418d617663683544c25b3988eaJason Sams 6131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 6141c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring 615eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 6161c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 61767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 61867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con); 61967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 6201c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams char buf[1024]; 6211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 6221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 6231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 624eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 62565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams buf, sizeof(buf), 62665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 627edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 6281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if (!id && receiveLen) { 62909993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 6301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 6311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams return _env->NewStringUTF(buf); 6321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 6331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 634edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint 635eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 636516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 637516c31911578db8ce53529483c3ded918ac7dc6bJason Sams jint len = _env->GetArrayLength(data); 63867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 63967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 64067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 641488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = _env->GetIntArrayElements(data, nullptr); 642516c31911578db8ce53529483c3ded918ac7dc6bJason Sams size_t receiveLen; 6431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 644eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 64565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, len * 4, 64665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 647edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 648516c31911578db8ce53529483c3ded918ac7dc6bJason Sams if (!id && receiveLen) { 64909993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 650516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 651516c31911578db8ce53529483c3ded918ac7dc6bJason Sams _env->ReleaseIntArrayElements(data, ptr, 0); 6520e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 6531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 6541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 6551c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint 656eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 6571c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 65867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 65967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPeekMessage, con(%p)", (RsContext)con); 66067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 661488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr); 6621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 6631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 664eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 665edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 6661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[0] = (jint)subID; 6671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[1] = (jint)receiveLen; 6681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 6690e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 670516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 671516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 672eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 673516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 67467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 67567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextInitToClient, con(%p)", (RsContext)con); 67667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 677eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextInitToClient((RsContext)con); 678516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 679516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 680eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 681516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 68267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 68367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con); 68467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 685eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDeinitToClient((RsContext)con); 686516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 687516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 688455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void 689eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 690455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{ 691488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = nullptr; 692455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams jint len = 0; 693455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 694455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams len = _env->GetArrayLength(data); 6954a043c1853c117c1b4c4342e76cd16a5abdc1045Stephen Hines ptr = _env->GetIntArrayElements(data, nullptr); 696455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 69767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 69867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 69967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 700eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 701455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 702455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 703455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 704455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams} 705455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 706455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 707516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 708460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 70967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, 71067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint size) 711d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 71267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 71309993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con, 71467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe type, kind, norm, size); 71567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 71667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, 71767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe norm, size); 718d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 719d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 720460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 721eff663f391fa4f119685d5c14489b94661ea126fTim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con, 7229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 723d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 724718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int fieldCount = _env->GetArrayLength(_ids); 72567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 72667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementCreate2, con(%p)", (RsContext)con); 72767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 728718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 729488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jIds = _env->GetLongArrayElements(_ids, nullptr); 730488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr); 7319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 7329807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 7339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 7349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 7359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < fieldCount; i ++) { 7369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat ids[i] = (RsElement)jIds[i]; 7379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat arraySizes[i] = (uint32_t)jArraySizes[i]; 7389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 739718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 7402123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 7412123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 7422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **nameArray = names.c_str(); 7432123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *sizeArray = names.c_str_len(); 7442123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 7453aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con, 7469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (const RsElement *)ids, fieldCount, 7477a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams nameArray, fieldCount * sizeof(size_t), sizeArray, 748e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk (const uint32_t *)arraySizes, fieldCount); 7492123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 7509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(ids); 7519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(arraySizes); 7529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 7539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 7549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 7553aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)id; 756d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 757d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 758dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 759460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData) 760dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 761dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int dataSize = _env->GetArrayLength(_elementData); 76267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 76367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetNativeData, con(%p)", (RsContext)con); 76467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 765dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 766dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements 767dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(dataSize == 5); 768dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 76978c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath uintptr_t elementData[5]; 770eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize); 771dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 772dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < dataSize; i ++) { 7739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint data = (jint)elementData[i]; 7749807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_elementData, i, 1, &data); 775dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 776dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 777dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 778dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 779dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 780460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 7819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _IDs, 7827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jobjectArray _names, 7837d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jintArray _arraySizes) 784dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 7859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t dataSize = _env->GetArrayLength(_IDs); 78667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 78767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetSubElements, con(%p)", (RsContext)con); 78867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 789dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 7909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t)); 7919807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const char **names = (const char **)malloc(dataSize * sizeof(const char *)); 79278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t)); 793dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 79467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 79567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (uint32_t)dataSize); 796dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 7979807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(uint32_t i = 0; i < dataSize; i++) { 7983aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong id = (jlong)(uintptr_t)ids[i]; 7999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint arraySize = (jint)arraySizes[i]; 800dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 8019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_IDs, i, 1, &id); 8029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 803dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 804dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 805dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(ids); 806dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(names); 8077d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk free(arraySizes); 808dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 809dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 810d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 811d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 812460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 813460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 814b109cc78616abee7291eb42094cd156b5db3355dJason Sams jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 815d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 81667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 81767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 81809993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv); 81967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 8203b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams 82167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, 82267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe faces, yuv); 823d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 824d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 825dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 8269807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData) 827dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 828dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // We are packing 6 items: mDimX; mDimY; mDimZ; 829dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // mDimLOD; mDimFaces; mElement; into typeData 830dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int elementCount = _env->GetArrayLength(_typeData); 831dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 832dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(elementCount == 6); 83367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 83467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con); 83567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 836dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 8379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t typeData[6]; 838eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6); 839dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 840dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < elementCount; i ++) { 8413aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong data = (jlong)(uintptr_t)typeData[i]; 8429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_typeData, i, 1, &data); 843dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 844dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 845dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 846d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 847d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 848460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 84967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 85067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong pointer) 851d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 85267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 85367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 85467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 85567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 85667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type, 85767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocationMipmapControl)mips, 85867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (uint32_t)usage, (uintptr_t)pointer); 859d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 860d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 861d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 862460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 8635476b450e50939940dcf3f15c92335cee2fc572dJason Sams{ 86467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 86567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, 86667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe bits); 86767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 868eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 8695476b450e50939940dcf3f15c92335cee2fc572dJason Sams} 8705476b450e50939940dcf3f15c92335cee2fc572dJason Sams 87172226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject 872460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a) 873615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{ 87467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 87567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 87667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 877615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams 87867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, 87967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)a); 88072226e0543461133b9e177a3e78ae50b0c65e797Jason Sams sp<IGraphicBufferProducer> bp = v; 881488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes v->decStrong(nullptr); 882fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 88372226e0543461133b9e177a3e78ae50b0c65e797Jason Sams jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp); 88472226e0543461133b9e177a3e78ae50b0c65e797Jason Sams return o; 885fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams} 886fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 887fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void 888460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 889163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 89067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 89167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con, 89267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, (Surface *)sur); 89367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 894163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 895fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams sp<Surface> s; 896163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams if (sur != 0) { 89764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown s = android_view_Surface_getSurface(_env, sur); 898163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams } 899163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 90067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, 90167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe static_cast<ANativeWindow *>(s.get())); 902163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 903163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 904163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 905460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 906163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 90767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 90809993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 90967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 910460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray rsAllocationIoSend((RsContext)con, (RsAllocation)alloc); 911163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 912163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 913163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 914460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 915163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 91667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 91709993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 91867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 919460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc); 920163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 921163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 922163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 923163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 924460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 925f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{ 92667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 92767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 92867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 929eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 930f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams} 931f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams 932460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 93367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 93467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 935fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{ 936ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams SkBitmap const * nativeBitmap = 93736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 938ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams const SkBitmap& bitmap(*nativeBitmap); 939fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 9405476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.lockPixels(); 9415476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 9423aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con, 94365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 94465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, bitmap.getSize(), usage); 9455476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.unlockPixels(); 9465476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 947ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams} 948fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 949460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 95067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, 95167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint mip, jobject jbitmap, jint usage) 952a314551d69098537337c970da615a8f8af58e1f1Tim Murray{ 953a314551d69098537337c970da615a8f8af58e1f1Tim Murray SkBitmap const * nativeBitmap = 95436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 955a314551d69098537337c970da615a8f8af58e1f1Tim Murray const SkBitmap& bitmap(*nativeBitmap); 956a314551d69098537337c970da615a8f8af58e1f1Tim Murray 957a314551d69098537337c970da615a8f8af58e1f1Tim Murray bitmap.lockPixels(); 958a314551d69098537337c970da615a8f8af58e1f1Tim Murray const void* ptr = bitmap.getPixels(); 9593aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con, 960a314551d69098537337c970da615a8f8af58e1f1Tim Murray (RsType)type, (RsAllocationMipmapControl)mip, 9619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (uint32_t)usage, (uintptr_t)ptr); 962a314551d69098537337c970da615a8f8af58e1f1Tim Murray bitmap.unlockPixels(); 963a314551d69098537337c970da615a8f8af58e1f1Tim Murray return id; 964a314551d69098537337c970da615a8f8af58e1f1Tim Murray} 965a314551d69098537337c970da615a8f8af58e1f1Tim Murray 966460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 96767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 96867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 96967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{ 97067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk SkBitmap const * nativeBitmap = 97136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 97267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk const SkBitmap& bitmap(*nativeBitmap); 97367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 9745476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.lockPixels(); 9755476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 9763aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con, 97765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 97865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, bitmap.getSize(), usage); 9795476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.unlockPixels(); 9805476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 98167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk} 98267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 98326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void 984460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 98526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{ 98626ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk SkBitmap const * nativeBitmap = 98736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 98826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk const SkBitmap& bitmap(*nativeBitmap); 989f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int w = bitmap.width(); 990f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int h = bitmap.height(); 99126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk 9924ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.lockPixels(); 9934ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams const void* ptr = bitmap.getPixels(); 994eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 995304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 99638faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray w, h, ptr, bitmap.getSize(), 0); 9974ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.unlockPixels(); 9988a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 9998a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 10004ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void 1001460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 10028a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{ 10034ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams SkBitmap const * nativeBitmap = 100436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 10054ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams const SkBitmap& bitmap(*nativeBitmap); 10068a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 10074ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.lockPixels(); 10084ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams void* ptr = bitmap.getPixels(); 1009eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize()); 10104ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.unlockPixels(); 1011835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk bitmap.notifyPixelsChanged(); 10128a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 10138a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 1014414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1015d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1016460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 10170e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint count, jobject data, jint sizeBytes, jint dataType) 1018d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1019e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 102067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 102167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 102267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 102367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe dataType); 102467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 102567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, (RsContext)con, alloc, offset, lod, count, 102667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ptr, sizeBytes); 1027d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1028d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1029414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java array data into the Allocation pointed to by alloc. 1030d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 10310e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat// native void rsnAllocationElementData1D(long con, long id, int xoff, int compIdx, byte[] d, int sizeBytes); 103267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod, 103367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint compIdx, jbyteArray data, jint sizeBytes) 103449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{ 103549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams jint len = _env->GetArrayLength(data); 103667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 103767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), " 103867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len, 103967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe sizeBytes); 104067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1041488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1042eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx); 104349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 104449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams} 104549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams 1046414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 104749bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void 1048460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 10490e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint w, jint h, jobject data, jint sizeBytes, jint dataType) 1050d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1051e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 1052e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 105367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 105467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 105567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 105667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1057488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1058d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1059d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1060414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1061414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 106240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 1063eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 1064460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, 1065304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint dstMip, jint dstFace, 1066304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint width, jint height, 1067460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, 1068304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint srcMip, jint srcFace) 1069304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{ 107067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 107167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 107267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), dstFace(%i), width(%i), height(%i)," 107367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 107467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 107567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 107667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1077304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1078eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy2DRange((RsContext)con, 1079304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)dstAlloc, 1080304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstXoff, dstYoff, 1081304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstMip, dstFace, 1082304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk width, height, 1083304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)srcAlloc, 1084304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcXoff, srcYoff, 1085304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcMip, srcFace); 1086304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk} 1087304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1088414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1089304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void 1090460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 1091e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams jint w, jint h, jint d, jobject data, int sizeBytes, int dataType) 1092b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 1093e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 109467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 109567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 109667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 109767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe lod, w, h, d, sizeBytes); 109867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1099488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1100b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1101b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1102414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1103414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 1104b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void 1105eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 1106460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 1107b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint dstMip, 1108b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint width, jint height, jint depth, 1109460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 1110b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint srcMip) 1111b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 111267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 111367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 111467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), width(%i), height(%i)," 111567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 111667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, 111767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip); 111867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1119b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1120eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy3DRange((RsContext)con, 1121b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)dstAlloc, 1122b05d689653b1bc94836f716f29e9578677c29075Jason Sams dstXoff, dstYoff, dstZoff, dstMip, 1123b05d689653b1bc94836f716f29e9578677c29075Jason Sams width, height, depth, 1124b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)srcAlloc, 1125b05d689653b1bc94836f716f29e9578677c29075Jason Sams srcXoff, srcYoff, srcZoff, srcMip); 1126b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1127b05d689653b1bc94836f716f29e9578677c29075Jason Sams 112840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 1129414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 113040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 1131460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType) 1132fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 113321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 113467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 113567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 113667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1137414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines PER_ARRAY_TYPE(0, rsAllocationRead, false, (RsContext)con, alloc, ptr, len * typeBytes); 1138fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1139fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1140414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1141fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1142460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 114321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams jint count, jobject data, int sizeBytes, int dataType) 1144fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 114521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 114667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 114767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 114867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 114967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1150414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines PER_ARRAY_TYPE(0, rsAllocation1DRead, false, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1151fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1152fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1153414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1154fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1155460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 115621659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams jint w, jint h, jobject data, int sizeBytes, int dataType) 115740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{ 115821659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 115921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 116067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 116167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 116267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 116367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 116467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe PER_ARRAY_TYPE(0, rsAllocation2DRead, false, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, 116567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ptr, sizeBytes, 0); 116640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams} 1167d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1168460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1169460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1170dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 117167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 117267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 117367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 11743aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a); 1175dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1176dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 11775edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void 1178460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 11795edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{ 118067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 118167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 118267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, dimX); 118367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1184eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 11855edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams} 11865edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams 118746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 118846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic jlong 118946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterCreate(JNIEnv *_env, jobject _this, jlong con, jlong basealloc, jlong type) 119046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 119146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 119246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterCreate, con(%p), base(%p), type(%p)", 119346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)basealloc, (RsElement)type); 119446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 119546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams return (jlong)(uintptr_t) rsAllocationAdapterCreate((RsContext)con, (RsType)type, 119646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsAllocation)basealloc); 119746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 119846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 119946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 120046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic void 120146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterOffset(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 120246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint x, jint y, jint z, jint face, jint lod, 120346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint a1, jint a2, jint a3, jint a4) 120446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 120546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams uint32_t params[] = { 120646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)x, (uint32_t)y, (uint32_t)z, (uint32_t)face, 120746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)lod, (uint32_t)a1, (uint32_t)a2, (uint32_t)a3, (uint32_t)a4 120846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams }; 120946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 121046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterOffset, con(%p), alloc(%p), x(%i), y(%i), z(%i), face(%i), lod(%i), arrays(%i %i %i %i)", 121146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)alloc, x, y, z, face, lod, a1, a2, a3, a4); 121246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 121346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams rsAllocationAdapterOffset((RsContext)con, (RsAllocation)alloc, 121446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams params, sizeof(params)); 121546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 121646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 121746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 1218aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// ----------------------------------- 1219aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1220460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1221460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset) 1222aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1223aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 12240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", asset); 1225aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 12263aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength()); 1227b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1228b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1229b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1230460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1231eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path) 1232b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1233b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr); 1234488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1235b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1236b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1237b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1238b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1239b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); 1240488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (asset == nullptr) { 1241b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1242b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1243b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 12443aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset); 1245b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1246b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1247b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1248460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1249eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName) 1250b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1251b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 12523aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str()); 1253b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1254aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1255aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1256aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1257460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jint 1258460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D) 1259aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1260aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int32_t numEntries = 0; 1261eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D); 12620e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)numEntries; 1263aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1264aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1265aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void 1266460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries) 1267aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 12680e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 1269aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry)); 1270aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1271eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D); 1272aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1273aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk for(jint i = 0; i < numEntries; i ++) { 1274aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName)); 1275aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID); 1276aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 1277aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1278aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk free(fileEntries); 1279aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1280aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 12810e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1282460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index) 1283aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 12840e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 12853aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D); 1286aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1287aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1288d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1289d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1290d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 12910e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1292eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con, 1293b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fileName, jfloat fontSize, jint dpi) 12949b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{ 1295b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 12963aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con, 1297e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fileNameUTF.c_str(), fileNameUTF.length(), 1298e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi); 1299b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1300b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1301b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1302b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 13030e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1304eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, 13050e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jstring name, jfloat fontSize, jint dpi, jlong native_asset) 1306b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1307b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 1308b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 nameUTF(_env, name); 1309b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 13103aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1311e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk nameUTF.c_str(), nameUTF.length(), 1312e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1313b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1314b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1315b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1316b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 13170e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1318eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path, 1319b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jfloat fontSize, jint dpi) 1320b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1321b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr); 1322488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1323b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1324b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1325b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1326b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1327b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); 1328488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (asset == nullptr) { 1329b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1330b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 13319b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 13323aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1333e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk str.c_str(), str.length(), 1334e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1335b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1336b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk delete asset; 13379b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk return id; 13389b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk} 13399b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 1340bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// ----------------------------------- 1341bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 1342bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void 1343460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot) 1344d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 134567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 134667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, 134767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsScript)script, (RsAllocation)alloc, slot); 134867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1349eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 1350d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1351d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1352d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1353460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val) 13544d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 135567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 135667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, 135767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 135867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1359eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 13604d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 13614d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 13627c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint 1363460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 13647c4caadb939b1563328251c156262c179a685c70Tim Murray{ 136567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 136667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 136767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 13687c4caadb939b1563328251c156262c179a685c70Tim Murray int value = 0; 1369eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 13707c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 13717c4caadb939b1563328251c156262c179a685c70Tim Murray} 13727c4caadb939b1563328251c156262c179a685c70Tim Murray 13734d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1374460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 13756f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{ 137667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 137709993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 137867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 137967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1380eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 13816f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams} 13826f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams 13836f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void 1384460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 1385031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{ 138667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 138709993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 138867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 138967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1390eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 1391031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines} 1392031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines 13937c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong 1394460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 13957c4caadb939b1563328251c156262c179a685c70Tim Murray{ 139667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 139767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 139867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 13997c4caadb939b1563328251c156262c179a685c70Tim Murray jlong value = 0; 1400eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 14017c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 14027c4caadb939b1563328251c156262c179a685c70Tim Murray} 14037c4caadb939b1563328251c156262c179a685c70Tim Murray 1404031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void 1405460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val) 14064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 140767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 140867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, 140967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 141067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1411eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 14124d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 14134d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 14147c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat 1415460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 14167c4caadb939b1563328251c156262c179a685c70Tim Murray{ 141767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 141867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 141967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 14207c4caadb939b1563328251c156262c179a685c70Tim Murray jfloat value = 0; 1421eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 14227c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 14237c4caadb939b1563328251c156262c179a685c70Tim Murray} 14247c4caadb939b1563328251c156262c179a685c70Tim Murray 14254d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1426460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val) 1427ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{ 142867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 142967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, 143067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 143167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1432eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 1433ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines} 1434ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines 14357c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble 1436460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 14377c4caadb939b1563328251c156262c179a685c70Tim Murray{ 143867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 143967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 144067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 14417c4caadb939b1563328251c156262c179a685c70Tim Murray jdouble value = 0; 1442eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 14437c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 14447c4caadb939b1563328251c156262c179a685c70Tim Murray} 14457c4caadb939b1563328251c156262c179a685c70Tim Murray 1446ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void 1447460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 14484d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 144967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 145067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 145167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 14524d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1453488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1454eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 14554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 14564d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 14574d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1458adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void 1459460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 14607c4caadb939b1563328251c156262c179a685c70Tim Murray{ 146167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 146267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 146367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 14647c4caadb939b1563328251c156262c179a685c70Tim Murray jint len = _env->GetArrayLength(data); 1465488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1466eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 1467414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements(data, ptr, 0); 14687c4caadb939b1563328251c156262c179a685c70Tim Murray} 14697c4caadb939b1563328251c156262c179a685c70Tim Murray 14707c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void 147167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 147267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong elem, jintArray dims) 1473adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{ 147467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 147567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 147667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1477adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint len = _env->GetArrayLength(data); 1478488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1479adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1480488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr); 1481eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 1482bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines (const uint32_t*) dimsPtr, dimsLen); 1483adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1484adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1485adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines} 1486adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines 1487d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1488d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1489460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone) 1490584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{ 149167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 149267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script); 149367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1494584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1495584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jint length = _env->GetArrayLength(timeZone); 1496584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jbyte* timeZone_ptr; 1497584a375df68ed7d62b38389078c6804edf228f9cRomain Guy timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 1498584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1499eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 1500584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1501584a375df68ed7d62b38389078c6804edf228f9cRomain Guy if (timeZone_ptr) { 1502584a375df68ed7d62b38389078c6804edf228f9cRomain Guy _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1503584a375df68ed7d62b38389078c6804edf228f9cRomain Guy } 1504584a375df68ed7d62b38389078c6804edf228f9cRomain Guy} 1505584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 150622534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void 1507460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot) 150822534176fb5c1257130ef4ee589739ca42766a32Jason Sams{ 150967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 151067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 151167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1512eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvoke((RsContext)con, (RsScript)obj, slot); 151322534176fb5c1257130ef4ee589739ca42766a32Jason Sams} 151422534176fb5c1257130ef4ee589739ca42766a32Jason Sams 1515584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void 1516460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 1517be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{ 151867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 151967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 152067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 15214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1522488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1523eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 15244d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1525be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams} 1526be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 15276e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void 1528be7b1defb6b11920703b241ba5815fb09487bb02Chris WailesnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 1529be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jlongArray ains, jlong aout, jbyteArray params, 1530be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jintArray limits) 15316e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{ 153267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 153367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 153467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1535949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1536be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint in_len = 0; 1537488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *in_ptr = nullptr; 1538949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1539488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsAllocation *in_allocs = nullptr; 1540949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1541488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 1542be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_len = _env->GetArrayLength(ains); 1543488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes in_ptr = _env->GetLongArrayElements(ains, nullptr); 1544eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 1545be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (sizeof(RsAllocation) == sizeof(jlong)) { 1546be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)in_ptr; 1547949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1548be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } else { 1549be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes // Convert from 64-bit jlong types to the native pointer type. 1550eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 1551be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 1552be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 1553be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes for (int index = in_len; --index >= 0;) { 1554be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs[index] = (RsAllocation)in_ptr[index]; 1555be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1556be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1557949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 1558949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1559be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint param_len = 0; 1560488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *param_ptr = nullptr; 1561be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 1562488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 1563be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_len = _env->GetArrayLength(params); 1564488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes param_ptr = _env->GetByteArrayElements(params, nullptr); 1565c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines } 1566949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1567488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsScriptCall sc, *sca = nullptr; 1568be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes uint32_t sc_size = 0; 1569949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1570be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint limit_len = 0; 1571488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *limit_ptr = nullptr; 1572949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1573488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 1574be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limit_len = _env->GetArrayLength(limits); 1575488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes limit_ptr = _env->GetIntArrayElements(limits, nullptr); 1576949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1577be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes assert(limit_len == 6); 157867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe UNUSED(limit_len); // As the assert might not be compiled. 1579949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1580be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xStart = limit_ptr[0]; 1581be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xEnd = limit_ptr[1]; 1582be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yStart = limit_ptr[2]; 1583be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yEnd = limit_ptr[3]; 1584be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zStart = limit_ptr[4]; 1585be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zEnd = limit_ptr[5]; 1586be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 158714331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayStart = 0; 158814331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayEnd = 0; 158914331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2Start = 0; 159014331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2End = 0; 159114331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3Start = 0; 159214331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3End = 0; 159314331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4Start = 0; 159414331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4End = 0; 1595949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1596be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sca = ≻ 1597be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1598949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1599be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes rsScriptForEachMulti((RsContext)con, (RsScript)script, slot, 1600be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs, in_len, (RsAllocation)aout, 1601be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_ptr, param_len, sca, sc_size); 1602949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1603488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 1604be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1605949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 1606949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1607488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 1608be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT); 1609eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes } 1610c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines 1611488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 1612be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 1613be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1614949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes} 1615949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1616fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// ----------------------------------- 1617fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 16180e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1619eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 1620e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jstring resName, jstring cacheDir, 1621e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jbyteArray scriptRef, jint length) 1622d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 162367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 162467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCCreate, con(%p)", (RsContext)con); 162567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1626e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 1627e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 resNameUTF(_env, resName); 1628e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 16290e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jlong ret = 0; 1630488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte* script_ptr = nullptr; 163143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint _exception = 0; 163243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint remaining; 163343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (!scriptRef) { 163443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 16358451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 163643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 163743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 163843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (length < 0) { 163943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 16408451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 164143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 164243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 1643e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams remaining = _env->GetArrayLength(scriptRef); 164443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (remaining < length) { 164543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 16468451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", 16478451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes // "length > script.length - offset"); 164843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 164943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 1650e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams script_ptr = (jbyte *) 165143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 165243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich 1653eff663f391fa4f119685d5c14489b94661ea126fTim Murray //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length); 1654e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 16553aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con, 1656e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk resNameUTF.c_str(), resNameUTF.length(), 1657e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk cacheDirUTF.c_str(), cacheDirUTF.length(), 1658e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams (const char *)script_ptr, length); 165939ddc950c9064129ead5de04b200106c0659f937Jason Sams 166043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit: 1661e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams if (script_ptr) { 1662e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 166343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception ? JNI_ABORT: 0); 166443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 1665d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 16663aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)ret; 1667d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1668d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1669460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1670460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid) 16716ab97682fd444586ee135912a4210417a1c8781bJason Sams{ 167267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 167367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, 167467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)eid); 167567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16763aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 16776ab97682fd444586ee135912a4210417a1c8781bJason Sams} 16786ab97682fd444586ee135912a4210417a1c8781bJason Sams 1679460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1680460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig) 168108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 168267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 168367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 168467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)sid, slot, sig); 168567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16863aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig); 168708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 168808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1689460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1690be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 1691be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{ 1692be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni if (kLogApi) { 16937ff53fa0d42795da55b65468e07df82029deda79Elliott Hughes ALOGD("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, 1694be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (void *)sid, slot); 1695be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 1696be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return (jlong)(uintptr_t)rsScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 1697be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 1698be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 1699be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 1700460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 170108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 170267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 170367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, 170467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot); 170567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 17063aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 170708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 170808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1709460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 17109807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 17119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _dstk, jlongArray _dstf, jlongArray _types) 171208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 171367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 171467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con); 171567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 171608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 17179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint kernelsLen = _env->GetArrayLength(_kernels); 1718488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 17199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 17209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < kernelsLen; ++i) { 17219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 17229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 17239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 17249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint srcLen = _env->GetArrayLength(_src); 1725488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 17269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 17279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < srcLen; ++i) { 17289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 17299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 17309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 17319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint dstkLen = _env->GetArrayLength(_dstk); 1732488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 17339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 17349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstkLen; ++i) { 17359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 17369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 17379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 17389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint dstfLen = _env->GetArrayLength(_dstf); 1739488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 17409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 17419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstfLen; ++i) { 17429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 17439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 17449807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 17459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint typesLen = _env->GetArrayLength(_types); 1746488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 17479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 17489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < typesLen; ++i) { 17499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat typesPtr[i] = (RsType)jTypesPtr[i]; 17509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 17519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 17523aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con, 17539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 17549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 17559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 17569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 17579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsType *)typesPtr, typesLen * sizeof(RsType)); 17589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 17599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(kernelsPtr); 17609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(srcPtr); 17619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstkPtr); 17629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstfPtr); 17639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(typesPtr); 17649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 17659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 17669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 17679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 17689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 176908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return id; 177008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 177108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 177208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 1773460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 177408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 177567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 177667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 177767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 177867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1779eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 178008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 178108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 178208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 1783460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 178408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 178567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 178667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 178767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 178867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1789eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 179008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 179108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 179208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 1793460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 179408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 179567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 179667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 179767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1798eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 179908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 180008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1801d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 1802d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 18030e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1804eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con, 1805331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA, 1806331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean depthMask, jboolean ditherEnable, 1807331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint srcFunc, jint destFunc, 1808331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint depthFunc) 1809d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 181067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 181167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con); 181267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18133aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA, 1814331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc, 1815331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc); 1816d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1817d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 18180011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// --------------------------------------------------------------------------- 18190011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 18200011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void 1821460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a) 18220011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{ 182367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 182467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, 182567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramVertex)vpv, slot, (RsAllocation)a); 182667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1827eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a); 18280011bcf57ff711a221a3a4c73f2a79125111647dJason Sams} 182954c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 1830d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1831460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 183254c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{ 183367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 183467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 183567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsAllocation)a); 183667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1837eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a); 183854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams} 183954c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 184054c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void 1841460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 1842d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 184367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 184467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 184567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsSampler)a); 184667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1847eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a); 1848d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1849d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 185068afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// --------------------------------------------------------------------------- 1851d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1852460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1853eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 18549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 18557e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{ 1856b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 1857488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 18587e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams jint paramLen = _env->GetArrayLength(params); 18597e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 18602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 18612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 18622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 18632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 18642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 186567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 186667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 186767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18687e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 18699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 18709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 18719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 18729807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 18733aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 18742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 18759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 18762123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 18779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 18789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 18797e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams return ret; 18807e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams} 18817e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 18827e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 18831fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// --------------------------------------------------------------------------- 18841fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 1885460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1886eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 18879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 18881fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{ 1889b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 1890488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 18910011bcf57ff711a221a3a4c73f2a79125111647dJason Sams jint paramLen = _env->GetArrayLength(params); 18921fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 189367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 189467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 189567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1896ee41112e1539de95596600fd2c6dada5d275217fJason Sams 18972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 18982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 18992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 19002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 19012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 19029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 19039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 19049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 19059807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19069807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19073aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 19082123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 19099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 19102123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 19119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 19129807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 19130011bcf57ff711a221a3a4c73f2a79125111647dJason Sams return ret; 19141fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams} 19151fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 1916ebfb436a49673693b98469683451bd9ede797557Jason Sams// --------------------------------------------------------------------------- 1917ebfb436a49673693b98469683451bd9ede797557Jason Sams 1918460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1919eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull) 1920ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 192167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 192267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, 192367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe pointSprite, cull); 192467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19253aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull); 1926ebfb436a49673693b98469683451bd9ede797557Jason Sams} 1927ebfb436a49673693b98469683451bd9ede797557Jason Sams 1928d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1929d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 1930d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1931d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 193278c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script) 1933d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 193467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 193567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script); 193667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1937eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindRootScript((RsContext)con, (RsScript)script); 1938d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1939d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1940d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 194178c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs) 1942d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 194367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 194467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs); 194567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1946eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs); 1947d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1948d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1949d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 195078c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf) 1951d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 195267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 195367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, 195467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)pf); 195567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1956eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf); 1957d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1958d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 19590826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void 196078c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf) 19610826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{ 196267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 196367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf); 196467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1965eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf); 19660826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams} 19670826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams 1968d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void 196978c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf) 1970ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 197167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 197267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf); 197367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1974eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf); 1975ebfb436a49673693b98469683451bd9ede797557Jason Sams} 1976ebfb436a49673693b98469683451bd9ede797557Jason Sams 1977d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato 197802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// --------------------------------------------------------------------------- 197902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 19800e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1981eff663f391fa4f119685d5c14489b94661ea126fTim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 1982a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 198302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{ 198467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 198567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nSamplerCreate, con(%p)", (RsContext)con); 198667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19873aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con, 1988a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)magFilter, 1989a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)minFilter, 1990a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapS, 1991a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapT, 1992a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapR, 1993a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk aniso); 199402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams} 199502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 1996bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// --------------------------------------------------------------------------- 1997bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams 1998460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 19990e0c0885aed99a119052a792becb5a0c5a93632dAshok BhatnPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jlong _loop, jfloat q) { 200067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 200167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nPathCreate, con(%p)", (RsContext)con); 200267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2003f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams 20043aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic, 2005460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray (RsAllocation)_vtx, 2006460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray (RsAllocation)_loop, q); 2007f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams return id; 2008f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams} 2009f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams 2010460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 20119807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim) 2012164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{ 201367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 201467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshCreate, con(%p)", (RsContext)con); 201567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2016164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 201725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint vtxLen = _env->GetArrayLength(_vtx); 2018488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr); 20199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen); 20209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < vtxLen; ++i) { 20219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i]; 20229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 20239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 202425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint idxLen = _env->GetArrayLength(_idx); 2025488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr); 20269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen); 20279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < idxLen; ++i) { 20289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i]; 20299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 20309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 203125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint primLen = _env->GetArrayLength(_prim); 2032488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *primPtr = _env->GetIntArrayElements(_prim, nullptr); 2033164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 20343aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con, 203525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk (RsAllocation *)vtxPtr, vtxLen, 203625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk (RsAllocation *)idxPtr, idxLen, 203725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk (uint32_t *)primPtr, primLen); 203880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 20399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(vtxPtr); 20409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(idxPtr); 20419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0); 20429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0); 204325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk _env->ReleaseIntArrayElements(_prim, primPtr, 0); 204425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk return id; 20459d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk} 20469d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk 204780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2048460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 204980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 205067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 205167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 205267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 205380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint vtxCount = 0; 2054eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount); 205580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return vtxCount; 205680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 205780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 205880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2059460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 206080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 206167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 206267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 206367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 206480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint idxCount = 0; 2065eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount); 206680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return idxCount; 206780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 206880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 206980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 20709807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs) 207180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 207267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 207367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 207467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 207580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 207680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation)); 2077eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs); 207880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 207980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numVtxIDs; i ++) { 20803aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 20819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_ids, i, 1, &alloc); 208280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 208380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 208480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 208580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 208680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 208780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 20889807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices) 208980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 209067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 209167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 209267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 209380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 209480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation)); 209580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t)); 209680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 2097eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices); 209880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 209980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numIndices; i ++) { 21003aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 21019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint prim = (jint)prims[i]; 21029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_idxIds, i, 1, &alloc); 21039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_primitives, i, 1, &prim); 210480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 210580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 210680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 210780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(prims); 2108164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk} 2109164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 211056f9e6f8d5436d50530807950661e66ca5efe2bbTim Murraystatic jint 211156f9e6f8d5436d50530807950661e66ca5efe2bbTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) { 211256f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray return (jint)sizeof(void*); 211356f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray} 211456f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 211556f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 2116164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// --------------------------------------------------------------------------- 2117164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 2118d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 211994d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript"; 2120d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2121d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = { 21221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit", "()V", (void*)_nInit }, 21231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2124eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 2125eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 2126eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 2127eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 2128eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 2129eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 21301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2131eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 2132eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 21332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 21342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 21352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java. 2136eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreate", "(JIII)J", (void*)nContextCreate }, 2137eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreateGL", "(JIIIIIIIIIIIIFI)J", (void*)nContextCreateGL }, 2138eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 2139eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 2140eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetSurface", "(JIILandroid/view/Surface;)V", (void*)nContextSetSurface }, 2141eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 2142eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDump", "(JI)V", (void*)nContextDump }, 2143eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextPause", "(J)V", (void*)nContextPause }, 2144eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextResume", "(J)V", (void*)nContextResume }, 2145eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 2146281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 2147be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 2148281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 2149281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 2150460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAssignName", "(JJ[B)V", (void*)nAssignName }, 2151460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnGetName", "(JJ)Ljava/lang/String;", (void*)nGetName }, 2152460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 2153eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2154460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromFile", "(JLjava/lang/String;)J", (void*)nFileA3DCreateFromFile }, 21550e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream", "(JJ)J", (void*)nFileA3DCreateFromAssetStream }, 2156460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J", (void*)nFileA3DCreateFromAsset }, 2157460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetNumIndexEntries", "(JJ)I", (void*)nFileA3DGetNumIndexEntries }, 2158460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetIndexEntries", "(JJI[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries }, 21590e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex", "(JJI)J", (void*)nFileA3DGetEntryByIndex }, 2160eff663f391fa4f119685d5c14489b94661ea126fTim Murray 21610e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile", "(JLjava/lang/String;FI)J", (void*)nFontCreateFromFile }, 21620e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream", "(JLjava/lang/String;FIJ)J", (void*)nFontCreateFromAssetStream }, 21630e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J", (void*)nFontCreateFromAsset }, 2164eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2165460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 21669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 2167460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementGetNativeData", "(JJ[I)V", (void*)nElementGetNativeData }, 21689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 2169460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2170460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 21719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData", "(JJ[J)V", (void*)nTypeGetNativeData }, 2172460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 21739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 2174460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 2175460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 2176460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 2177460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2178460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 2179460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 2180460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2181460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 2182460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetSurface", "(JJ)Landroid/view/Surface;", (void*)nAllocationGetSurface }, 2183460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 2184460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 2185460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoReceive", "(JJ)V", (void*)nAllocationIoReceive }, 2186460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData1D", "(JJIIILjava/lang/Object;II)V", (void*)nAllocationData1D }, 2187460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D }, 2188460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;II)V", (void*)nAllocationData2D }, 2189460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 2190460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;II)V", (void*)nAllocationData3D }, 2191460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 2192460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead", "(JJLjava/lang/Object;I)V", (void*)nAllocationRead }, 2193460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;II)V", (void*)nAllocationRead1D }, 2194460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;II)V", (void*)nAllocationRead2D }, 2195460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 2196460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 2197460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 2198460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 219946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterCreate", "(JJJ)J", (void*)nAllocationAdapterCreate }, 220046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterOffset", "(JJIIIIIIIII)V", (void*)nAllocationAdapterOffset }, 220146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 2202460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptBindAllocation", "(JJJI)V", (void*)nScriptBindAllocation }, 2203460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetTimeZone", "(JJ[B)V", (void*)nScriptSetTimeZone }, 2204460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvoke", "(JJI)V", (void*)nScriptInvoke }, 2205460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV }, 2206be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2207be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEach }, 2208be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2209460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI }, 2210460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI }, 2211460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarJ", "(JJIJ)V", (void*)nScriptSetVarJ }, 2212460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarJ", "(JJI)J", (void*)nScriptGetVarJ }, 2213460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarF", "(JJIF)V", (void*)nScriptSetVarF }, 2214460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarF", "(JJI)F", (void*)nScriptGetVarF }, 2215460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarD", "(JJID)V", (void*)nScriptSetVarD }, 2216460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarD", "(JJI)D", (void*)nScriptGetVarD }, 2217460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarV", "(JJI[B)V", (void*)nScriptSetVarV }, 2218460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarV", "(JJI[B)V", (void*)nScriptGetVarV }, 2219460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarVE", "(JJI[BJ[I)V", (void*)nScriptSetVarVE }, 2220460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarObj", "(JJIJ)V", (void*)nScriptSetVarObj }, 2221eff663f391fa4f119685d5c14489b94661ea126fTim Murray 22220e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 2223460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptIntrinsicCreate", "(JIJ)J", (void*)nScriptIntrinsicCreate }, 2224460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptKernelIDCreate", "(JJII)J", (void*)nScriptKernelIDCreate }, 2225be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 2226460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate }, 22279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 2228ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;[J)J", (void*)nScriptGroup2Create }, 2229460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 2230460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 2231460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 2232281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 2233eff663f391fa4f119685d5c14489b94661ea126fTim Murray 223425207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Single", "(JJIIIIIIIIIFJJFJIIII)V", (void*)nScriptIntrinsicBLAS_Single }, 223525207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Double", "(JJIIIIIIIIIDJJDJIIII)V", (void*)nScriptIntrinsicBLAS_Double }, 223625207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Complex", "(JJIIIIIIIIIFFJJFFJIIII)V", (void*)nScriptIntrinsicBLAS_Complex }, 223725207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Z", "(JJIIIIIIIIIDDJJDDJIIII)V", (void*)nScriptIntrinsicBLAS_Z }, 223825207df658d6a8a3e885c7017fcc25702363583cTim Murray 22390e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate", "(JZZZZZZIII)J", (void*)nProgramStoreCreate }, 2240eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2241460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants }, 2242460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindTexture", "(JJIJ)V", (void*)nProgramBindTexture }, 2243460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindSampler", "(JJIJ)V", (void*)nProgramBindSampler }, 2244eff663f391fa4f119685d5c14489b94661ea126fTim Murray 22459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramFragmentCreate }, 2246460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramRasterCreate", "(JZI)J", (void*)nProgramRasterCreate }, 22479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramVertexCreate }, 2248eff663f391fa4f119685d5c14489b94661ea126fTim Murray 224978c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript", "(JJ)V", (void*)nContextBindRootScript }, 225078c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore", "(JJ)V", (void*)nContextBindProgramStore }, 225178c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment", "(JJ)V", (void*)nContextBindProgramFragment }, 225278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex", "(JJ)V", (void*)nContextBindProgramVertex }, 225378c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster", "(JJ)V", (void*)nContextBindProgramRaster }, 2254eff663f391fa4f119685d5c14489b94661ea126fTim Murray 22550e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 2256eff663f391fa4f119685d5c14489b94661ea126fTim Murray 22570e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnPathCreate", "(JIZJJF)J", (void*)nPathCreate }, 22589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate", "(J[J[J[I)J", (void*)nMeshCreate }, 2259eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2260460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetVertexBufferCount", "(JJ)I", (void*)nMeshGetVertexBufferCount }, 2261460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetIndexCount", "(JJ)I", (void*)nMeshGetIndexCount }, 22629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices", "(JJ[JI)V", (void*)nMeshGetVertices }, 22639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices", "(JJ[J[II)V", (void*)nMeshGetIndices }, 226480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 226556f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 2266d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 2267d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2268d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env) 2269d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2270d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return android::AndroidRuntime::registerNativeMethods( 2271d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams _env, classPathName, methods, NELEM(methods)); 2272d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2273d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2274d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2275d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2276d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved) 2277d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2278488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes JNIEnv* env = nullptr; 2279d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams jint result = -1; 2280d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2281d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 22823762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("ERROR: GetEnv failed\n"); 2283d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 2284d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 2285488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes assert(env != nullptr); 2286d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2287d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (registerFuncs(env) < 0) { 22880e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGE("ERROR: Renderscript native registration failed\n"); 2289d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 2290d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 2291d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2292d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams /* success -- return valid version number */ 2293d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams result = JNI_VERSION_1_4; 2294d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2295d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail: 2296d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return result; 2297d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2298