android_renderscript_RenderScript.cpp revision e27a340e3a55a3650e1f74bf1d350104596c4d4b
1c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main/* 2c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Copyright (C) 2011-2012 The Android Open Source Project 3c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * 4c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Licensed under the Apache License, Version 2.0 (the "License"); 5c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * you may not use this file except in compliance with the License. 6c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * You may obtain a copy of the License at 7c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * 8c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * http://www.apache.org/licenses/LICENSE-2.0 9c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * 10c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Unless required by applicable law or agreed to in writing, software 11c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * distributed under the License is distributed on an "AS IS" BASIS, 12c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * See the License for the specific language governing permissions and 14c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * limitations under the License. 15c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main */ 16c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 17c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_TAG "libRS_jni" 18c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 19c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <stdlib.h> 20c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <stdio.h> 21c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <fcntl.h> 22c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <unistd.h> 23c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <math.h> 24c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <android/bitmap.h> 25257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#include <android/log.h> 26c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 27dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang#include <rsEnv.h> 28470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang#include "rsDispatch.h" 29470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang#include <dlfcn.h> 30470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 31c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//#define LOG_API ALOG 32c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_API(...) 33c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 34257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#define NELEM(m) (sizeof(m) / sizeof((m)[0])) 35c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 368352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wangtemplate <typename... T> 378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wangvoid UNUSED(T... t) {} 388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ 398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang jint len = 0; \ 408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang void *ptr = nullptr; \ 412e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang void *srcPtr = nullptr; \ 428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang size_t typeBytes = 0; \ 438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang jint relFlag = 0; \ 448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (readonly) { \ 458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \ 462e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang /* readonly = true, also indicates we are copying to the allocation . */ \ 478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang relFlag = JNI_ABORT; \ 488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } \ 498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang switch(dataType) { \ 508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_FLOAT_32: \ 518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jfloatArray)data); \ 528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \ 538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 4; \ 542e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 552e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 562e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 572e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 582e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 642e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 652e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 662e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 672e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 702e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 712e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 722e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \ 748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_FLOAT_64: \ 768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jdoubleArray)data); \ 778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \ 788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 8; \ 792e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 802e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 812e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 822e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 832e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 842e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 852e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 862e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 882e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 932e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 942e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \ 998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_8: \ 1018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_8: \ 1028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jbyteArray)data); \ 1038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \ 1048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 1; \ 1052e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1062e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1072e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1082e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1102e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1112e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1122e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1132e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1142e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1162e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1172e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1182e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1192e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1202e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1212e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1222e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1232e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1248352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \ 1258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1268352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_16: \ 1278352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_16: \ 1288352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jshortArray)data); \ 1298352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetShortArrayElements((jshortArray)data, flag); \ 1308352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 2; \ 1312e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1322e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1332e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1342e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1362e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1372e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1382e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1392e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1402e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1412e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1422e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1432e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1442e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1452e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1462e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1472e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1482e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1492e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \ 1518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_32: \ 1538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_32: \ 1548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jintArray)data); \ 1558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetIntArrayElements((jintArray)data, flag); \ 1568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 4; \ 1572e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1582e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1642e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1652e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1662e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1672e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1702e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1712e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1722e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1732e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1742e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1752e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \ 1778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_64: \ 1798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_64: \ 1808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jlongArray)data); \ 1818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetLongArrayElements((jlongArray)data, flag); \ 1828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 8; \ 1832e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1842e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1852e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1862e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1882e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1932e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1942e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1982e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1992e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 2002e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 2012e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 2028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \ 2038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 2048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang default: \ 2058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang break; \ 2068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } \ 2072e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang UNUSED(len, ptr, srcPtr, typeBytes, relFlag); \ 2088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang} 2098352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 2108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 211c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringToUTF8 { 212c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic: 213c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) { 214c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fCStr = env->GetStringUTFChars(str, NULL); 215c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fLength = env->GetStringUTFLength(str); 216c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 217c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main ~AutoJavaStringToUTF8() { 218c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fEnv->ReleaseStringUTFChars(fJStr, fCStr); 219c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 220c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char* c_str() const { return fCStr; } 221c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize length() const { return fLength; } 222c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 223c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate: 224c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv* fEnv; 225c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring fJStr; 226c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char* fCStr; 227c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize fLength; 228c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 229c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 230c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringArrayToUTF8 { 231c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic: 232c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength) 233c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main : mEnv(env), mStrings(strings), mStringsLength(stringsLength) { 234c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings = NULL; 235c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray = NULL; 236c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (stringsLength > 0) { 237c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings = (const char **)calloc(stringsLength, sizeof(char *)); 238c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t)); 239c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main for (jsize ct = 0; ct < stringsLength; ct ++) { 240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL); 242c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray[ct] = mEnv->GetStringUTFLength(s); 243c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 244c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 245c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 246c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main ~AutoJavaStringArrayToUTF8() { 247c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main for (jsize ct=0; ct < mStringsLength; ct++) { 248c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 249c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mEnv->ReleaseStringUTFChars(s, mCStrings[ct]); 250c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 251c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(mCStrings); 252c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(mSizeArray); 253c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 254c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **c_str() const { return mCStrings; } 255c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *c_str_len() const { return mSizeArray; } 256c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize length() const { return mStringsLength; } 257c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 258c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate: 259c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv *mEnv; 260c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jobjectArray mStrings; 261c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **mCStrings; 262c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *mSizeArray; 263c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize mStringsLength; 264c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 265c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 266470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 267470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang// --------------------------------------------------------------------------- 268470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic dispatchTable dispatchTab; 2696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Incremental Support lib 2706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic dispatchTable dispatchTabInc; 271470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 272e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wangstatic jboolean nLoadSO(JNIEnv *_env, jobject _this, jboolean useNative, jint targetApi) { 273470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang void* handle = NULL; 274470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang if (useNative) { 275470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang handle = dlopen("libRS.so", RTLD_LAZY | RTLD_LOCAL); 276470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } else { 277470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL); 278470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 279470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang if (handle == NULL) { 280470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang LOG_API("couldn't dlopen %s, %s", filename, dlerror()); 281470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return false; 282470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 283470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 284e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wang if (loadSymbols(handle, dispatchTab, targetApi) == false) { 285470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang LOG_API("%s init failed!", filename); 286470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return false; 287470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 288470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang LOG_API("Successfully loaded %s", filename); 289470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return true; 290470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang} 291470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 292dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic ioSuppDT ioDispatch; 293dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic jboolean nLoadIOSO(JNIEnv *_env, jobject _this) { 294dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang void* handleIO = NULL; 295dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang handleIO = dlopen("libRSSupportIO.so", RTLD_LAZY | RTLD_LOCAL); 296dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang if (handleIO == NULL) { 297dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang LOG_API("Couldn't load libRSSupportIO.so"); 298dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return false; 299dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang } 300dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang if (loadIOSuppSyms(handleIO, ioDispatch) == false) { 301dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang LOG_API("libRSSupportIO init failed!"); 302dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return false; 303dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang } 304dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return true; 305dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 306ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 307c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 308c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 3092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wangstatic void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) { 3102e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytesPad = mSize * 4; 3112e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytes = mSize * 3; 3122e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 3132e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 3142e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang for (int i = 0; i < count; i++) { 3152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang memcpy(dst, src, sizeBytes); 3162e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang dst += sizeBytesPad; 3172e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang src += sizeBytes; 3182e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } 3192e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang} 3202e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3212e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wangstatic void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) { 3222e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytesPad = mSize * 4; 3232e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytes = mSize * 3; 3242e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 3252e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 3262e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang for (int i = 0; i < count; i++) { 3272e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang memcpy(dst, src, sizeBytes); 3282e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang dst += sizeBytes; 3292e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang src += sizeBytesPad; 3302e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } 3312e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang} 3322e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3332e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3342e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang// --------------------------------------------------------------------------- 3352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 336c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 337bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextFinish(JNIEnv *_env, jobject _this, jlong con) 338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 339bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextFinish, con(%p)", (RsContext)con); 340bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextFinish((RsContext)con); 341c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 342c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 343936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic jlong 344936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID, 345936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong returnValue, jlongArray fieldIDArray, 346936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlongArray valueArray, jintArray sizeArray, 347936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlongArray depClosureArray, jlongArray depFieldIDArray) { 348936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 349936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 350936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni RsScriptFieldID* fieldIDs = 351936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length); 352936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni for (int i = 0; i< fieldIDs_length; i++) { 353936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 354936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 355936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 356936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 357936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 358936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length); 359936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni for (int i = 0; i < values_length; i++) { 360936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni values[i] = (uintptr_t)jValues[i]; 361936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 362936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 363936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr); 364936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 365936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 366936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jDepClosures = 367936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni _env->GetLongArrayElements(depClosureArray, nullptr); 368936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize depClosures_length = _env->GetArrayLength(depClosureArray); 369936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni RsClosure* depClosures = 370936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length); 371936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni for (int i = 0; i < depClosures_length; i++) { 372936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni depClosures[i] = (RsClosure)jDepClosures[i]; 373936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 374936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 375936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jDepFieldIDs = 376936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni _env->GetLongArrayElements(depFieldIDArray, nullptr); 377936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray); 378936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni RsScriptFieldID* depFieldIDs = 379936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length); 380936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni for (int i = 0; i < depClosures_length; i++) { 381936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni depFieldIDs[i] = (RsClosure)jDepFieldIDs[i]; 382936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 383936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 384936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni return (jlong)(uintptr_t)dispatchTab.ClosureCreate( 385936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, 386936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length, 3876be479e2c58a3ee7880f812f9b13970df8f7c529Miao Wang (int*)sizes, (size_t)sizes_length, 388936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni depClosures, (size_t)depClosures_length, 389936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni depFieldIDs, (size_t)depFieldIDs_length); 390936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 391936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 392b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wangstatic jlong 393b1c365bfb0566142c49375f09f2b8289182f1f47Miao WangnInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID, 394b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray, 395b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jintArray sizeArray) { 396b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr); 397b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jsize jParamLength = _env->GetArrayLength(paramArray); 398b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 399b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 400b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 401b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang RsScriptFieldID* fieldIDs = 402b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length); 403b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang for (int i = 0; i< fieldIDs_length; i++) { 404b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 405b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang } 406b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 407b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 408b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jsize values_length = _env->GetArrayLength(valueArray); 409b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length); 410b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang for (int i = 0; i < values_length; i++) { 411b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang values[i] = (uintptr_t)jValues[i]; 412b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang } 413b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 414b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr); 415b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jsize sizes_length = _env->GetArrayLength(sizeArray); 416b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 417b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang return (jlong)(uintptr_t)dispatchTab.InvokeClosureCreate( 418b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, 419b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length, 4206be479e2c58a3ee7880f812f9b13970df8f7c529Miao Wang (int*)sizes, (size_t)sizes_length); 421b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang} 422b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 423936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void 424936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 425936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jint index, jlong value, jint size) { 426b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang dispatchTab.ClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, 427b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (uintptr_t)value, (size_t)size); 428936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 429936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 430936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void 431936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 432936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong fieldID, jlong value, jint size) { 433936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni dispatchTab.ClosureSetGlobal((RsContext)con, (RsClosure)closureID, 434b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (RsScriptFieldID)fieldID, (uintptr_t)value, (size_t)size); 435936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 436936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 437936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic long 438936fbd696aac243a514f74b6fee6efd5959527a4Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, 439b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jstring cacheDir, jlongArray closureArray) { 440b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 441b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 442936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 443936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 444936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 445936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni for (int i = 0; i < numClosures; i++) { 446936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni closures[i] = (RsClosure)jClosures[i]; 447936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 448936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 449b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang return (jlong)(uintptr_t)dispatchTab.ScriptGroup2Create( 450b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length(), 451b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang closures, numClosures); 452b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang} 453b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 454b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wangstatic void 455b1c365bfb0566142c49375f09f2b8289182f1f47Miao WangnScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 456b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 457936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 458936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 459c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 460bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 461c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 462bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 463bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ObjDestroy((RsContext)con, (void *)obj); 464c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 465c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 466c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 467bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 468c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceCreate(JNIEnv *_env, jobject _this) 469c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 470c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceCreate"); 471bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.DeviceCreate(); 472c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 473c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 475bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 476c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 477c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceDestroy"); 478470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return dispatchTab.DeviceDestroy((RsDevice)dev); 479c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 480c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 481c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 482bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 483c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 484c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 485470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return dispatchTab.DeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 486c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 487c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 488bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 489ecccf940f72679f7602c52b0b4bcb245acdad55bMiao WangnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 490ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang jint ct, jstring nativeLibDirJava) 491c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 492c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nContextCreate"); 493ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang // Access the NativeLibDir in the Java Context. 494ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang const char * nativeLibDir = _env->GetStringUTFChars(nativeLibDirJava, JNI_FALSE); 495ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang size_t length = (size_t)_env->GetStringUTFLength(nativeLibDirJava); 496ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 497ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang jlong id = (jlong)(uintptr_t)dispatchTab.ContextCreate((RsDevice)dev, ver, 498ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang sdkVer, 499ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang (RsContextType)ct, 0); 500ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang if (dispatchTab.SetNativeLibDir) { 501ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang dispatchTab.SetNativeLibDir((RsContext)id, nativeLibDir, length); 502ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang } 503ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 504ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang _env->ReleaseStringUTFChars(nativeLibDirJava, nativeLibDir); 505ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang return id; 506c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 507c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 508c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 509c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 510bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 511c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 512bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 513bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextSetPriority((RsContext)con, p); 514c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 515c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 516c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 517c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 518c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 519bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDestroy(JNIEnv *_env, jobject _this, jlong con) 520c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 521bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 522bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextDestroy((RsContext)con); 523c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 524c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 525c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 526bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 527c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 528c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 529470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang dispatchTab.ContextDump((RsContext)con, bits); 530c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 531c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 532c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 533c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jstring 534bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 535c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 536bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con); 537c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main char buf[1024]; 538c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 539c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 540c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 541bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextGetMessage((RsContext)con, 5426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang buf, sizeof(buf), 5436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &receiveLen, sizeof(receiveLen), 5446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &subID, sizeof(subID)); 545c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!id && receiveLen) { 546184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, 547184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "message receive buffer too small. %zu", receiveLen); 548c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 549c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return _env->NewStringUTF(buf); 550c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 551c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 552c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint 553bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 554c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 555c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 556bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 557c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = _env->GetIntArrayElements(data, NULL); 558c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 559c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 560bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextGetMessage((RsContext)con, 5616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len * 4, 5626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &receiveLen, sizeof(receiveLen), 5636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &subID, sizeof(subID)); 564c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!id && receiveLen) { 565184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, 566184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "message receive buffer too small. %zu", receiveLen); 567c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 568c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(data, ptr, 0); 569bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)id; 570c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 571c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 572c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint 573bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 574c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 575bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextPeekMessage, con(%p)", (RsContext)con); 576c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL); 577c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 578c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 579bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 580c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main &subID, sizeof(subID)); 581c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main auxDataPtr[0] = (jint)subID; 582c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main auxDataPtr[1] = (jint)receiveLen; 583c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 584bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)id; 585c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 586c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 587bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 588c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 589bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextInitToClient, con(%p)", (RsContext)con); 590bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextInitToClient((RsContext)con); 591c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 592c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 593bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 594c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 595bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con); 596bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextDeinitToClient((RsContext)con); 597c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 598c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 599c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 600bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 601c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 602c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = NULL; 603c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = 0; 604c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (data) { 605c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main len = _env->GetArrayLength(data); 606c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = _env->GetIntArrayElements(data, NULL); 607c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 608bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 609bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 610c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (data) { 611c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 612c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 613c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 614c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 615c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 616c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 617bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 618086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, 619086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni jboolean norm, jint size) 620c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 621bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 622bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang type, kind, norm, size); 623086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)(uintptr_t)dispatchTab.ElementCreate((RsContext)con, 624086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (RsDataType)type, 625086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (RsDataKind)kind, 626bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang norm, size); 627c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 628c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 629bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 630bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementCreate2(JNIEnv *_env, jobject _this, jlong con, 631bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 632c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 633c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main int fieldCount = _env->GetArrayLength(_ids); 634bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementCreate2, con(%p)", (RsContext)con); 635bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 636bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jIds = _env->GetLongArrayElements(_ids, NULL); 637bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL); 638c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 639bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 640bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 641bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 642bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < fieldCount; i ++) { 643bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ids[i] = (RsElement)jIds[i]; 644bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang arraySizes[i] = (uint32_t)jArraySizes[i]; 645bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 646c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 647c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 648c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 649c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **nameArray = names.c_str(); 650c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *sizeArray = names.c_str_len(); 651c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 6526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong id = (jlong)(uintptr_t)dispatchTab.ElementCreate2((RsContext)con, (RsElement *)ids, 6536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fieldCount, nameArray, 6546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fieldCount * sizeof(size_t), sizeArray, 6556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)arraySizes, fieldCount); 656c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 657bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(ids); 658bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(arraySizes); 659bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 660bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 661bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return id; 662c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 663c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 664c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 665c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 666bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 667c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 668bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 669bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _IDs, 670c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jobjectArray _names, 671c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jintArray _arraySizes) 672c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 673bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uint32_t dataSize = _env->GetArrayLength(_IDs); 674bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementGetSubElements, con(%p)", (RsContext)con); 675c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 676bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uintptr_t *ids = (uintptr_t *)malloc(dataSize * sizeof(uintptr_t)); 677c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *)); 678c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t)); 679c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 680bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 681bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)dataSize); 682c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 683bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(uint32_t i = 0; i < dataSize; i++) { 684bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang const jlong id = (jlong)(uintptr_t)ids[i]; 685bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang const jint arraySize = (jint)arraySizes[i]; 686c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 687bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->SetLongArrayRegion(_IDs, i, 1, &id); 688bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 689c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 690c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 691c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(ids); 692c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(names); 693c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(arraySizes); 694c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 695c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 696c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 697c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 698bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 699bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 700c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 701c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 702c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 703bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv); 704c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 705bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 706bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dimz, mips, faces, yuv); 707c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 708c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 709c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 710c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 711bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 712bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 713bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong pointer) 714c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 715bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 716bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 717bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t) dispatchTab.AllocationCreateTyped((RsContext)con, (RsType)type, 718bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mips, 719bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)usage, (uintptr_t)pointer); 720c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 721c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 722c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 723bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 724c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 725bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits); 726bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 727c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 728c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 729c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 730bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 731dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{ 732bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ioDispatch.sAllocationSetSurface(_env, _this, (RsContext)con, (RsAllocation)alloc, sur, dispatchTab); 733dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 734dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang 735dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void 736bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 737dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{ 738bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationIoSend((RsContext)con, (RsAllocation)alloc); 739dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 740dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang 741dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void 742bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 743c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 744bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 745bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 746c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 747c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 748c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic size_t GetBitmapSize(JNIEnv *env, jobject jbitmap) { 749c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 750c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 751c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(env, jbitmap, &info); 752c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t s = info.width * info.height; 753c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main switch (info.format) { 754c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGBA_8888: s *= 4; break; 755c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGB_565: s *= 2; break; 756c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGBA_4444: s *= 2; break; 757c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 758c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return s; 759c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 760c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 761bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 762bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 763bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jobject jbitmap, jint usage) 764c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 765bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 766257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines void *pixels = NULL; 767257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 768c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 769257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (pixels != NULL) { 770bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCreateFromBitmap((RsContext)con, 771bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 772bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 773bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang pixels, 774bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap), 775bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang usage); 776257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_unlockPixels(_env, jbitmap); 777257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 778c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 779c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 780c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 781bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 782bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, 783bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint mip, jobject jbitmap, jint usage) 784c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 785bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 786257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines void *pixels = NULL; 787257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 788c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 789257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (pixels != NULL) { 790bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCreateTyped((RsContext)con, 791bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 792bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 793bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)usage, 794bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uintptr_t)pixels); 795257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_unlockPixels(_env, jbitmap); 796257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 797c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 798c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 799c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 800bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 801bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, 802bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint mip, jobject jbitmap, jint usage) 803c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 804c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 805c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 806c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 807bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 808c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 809bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCubeCreateFromBitmap((RsContext)con, 810bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 811bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 812bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang pixels, 813bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap), 814bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang usage); 815c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 816c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 817c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 818c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 819c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 820c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 821bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 822c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 823c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 824c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 825c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(_env, jbitmap, &info); 826c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 827c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 828c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 829c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 830c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 831bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 0, 832bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, info.width, 833bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang info.height, pixels, GetBitmapSize(_env, jbitmap), 0); 834c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 835c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 836c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 837c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 838c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 839bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 840c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 841c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 842c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 843c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(_env, jbitmap, &info); 844c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 845c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 846c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 847c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 848c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 849bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, pixels, 850bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap)); 851c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 852c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 853c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //bitmap.notifyPixelsChanged(); 854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 855c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 8568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 857c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 8588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 8592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint count, jobject data, jint sizeBytes, jint dataType, jint mSize, 8602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jboolean usePadding) 861c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 8628352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 8638352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 8648352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 8658352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang dataType); 8662e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation1DData, true, 8672e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 868c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 869c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 870244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 871c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 872244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, 873244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 874c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 875c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 876244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocationElementData1D, con(%p), alloc(%p), xoff(%i), comp(%i), len(%i), " 877244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, compIdx, len, 878244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang sizeBytes); 879244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 880244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang dispatchTab.Allocation1DElementData((RsContext)con, (RsAllocation)alloc, xoff, 881244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, ptr, sizeBytes, compIdx); 882c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 883c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 884c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 885244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 886244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 887244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 888244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint xoff, jint yoff, jint zoff, 889244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 890244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 891244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint len = _env->GetArrayLength(data); 892244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 893244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 894244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang sizeBytes); 895244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 896244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang dispatchTab.AllocationElementData((RsContext)con, (RsAllocation)alloc, 897244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang xoff, yoff, zoff, 898244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, ptr, sizeBytes, compIdx); 899244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 900244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 901244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 902244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 9038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 904c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 9058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 9062e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize, 9072e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jboolean usePadding) 908c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 9098352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 9108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 9118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 9128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 9132e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h; 9142e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation2DData, true, 9152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 916c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 917c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 918c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 919bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 920bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong dstAlloc, jint dstXoff, jint dstYoff, 921c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dstMip, jint dstFace, 922c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint width, jint height, 923bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong srcAlloc, jint srcXoff, jint srcYoff, 924c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint srcMip, jint srcFace) 925c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 926c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 927c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " dstMip(%i), dstFace(%i), width(%i), height(%i)," 928c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 929bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 930c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 931c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 932bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopy2DRange((RsContext)con, 933bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)dstAlloc, 934bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstXoff, dstYoff, 935bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstMip, dstFace, 936bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang width, height, 937bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)srcAlloc, 938bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcXoff, srcYoff, 939bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcMip, srcFace); 940c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 941c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 9428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 943c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 9448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 9452e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType, 9462e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 947c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 9488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 9498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 9508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 9518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang lod, w, h, d, sizeBytes); 9522e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h * d; 9532e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DData, true, 9542e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 955c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 956c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 957c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 958bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 959bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 960c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dstMip, 961c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint width, jint height, jint depth, 962bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 963c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint srcMip) 964c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 965c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 966c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " dstMip(%i), width(%i), height(%i)," 967c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 968bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 969c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 970c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 971bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopy3DRange((RsContext)con, 972bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)dstAlloc, 973bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstXoff, dstYoff, dstZoff, dstMip, 974bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang width, height, depth, 975bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)srcAlloc, 976bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcXoff, srcYoff, srcZoff, srcMip); 977bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 978bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 9798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 980bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void 9812e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType, 9822e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 983bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 9848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 9858352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 9862e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = 0; 9872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.AllocationRead, false, 9882e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, ptr, len * typeBytes); 989c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 990c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 9918352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 992c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 9938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 9942e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint count, jobject data, jint sizeBytes, jint dataType, 9952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 996c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 9978352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 9988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 9998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 10002e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.Allocation1DRead, false, 10012e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1002c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1003c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1004244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data. 1005244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1006244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1007244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, 1008244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint xoff, jint yoff, jint zoff, 10093bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jint lod, jint compIdx, jobject data, jint sizeBytes) 1010244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 10113bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jint len = _env->GetArrayLength(data); 10123bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang LOG_API("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 10133bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 10143bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang sizeBytes); 10153bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 10163bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang dispatchTab.AllocationElementRead((RsContext)con, (RsAllocation)alloc, 10173bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang xoff, yoff, zoff, 10183bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang lod, ptr, sizeBytes, compIdx); 10193bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1020244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1021244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1022244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 10238352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1024c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 10258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 10262e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, 10272e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1028c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 10298352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 10308352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 10318352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 10328352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 10332e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h; 10342e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.Allocation2DRead, false, 10352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1036c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1037c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1038244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1039244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1040244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1041244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 10422e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jint d, jobject data, int sizeBytes, int dataType, 10432e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1044244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 1045244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 1046244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 1047244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 1048244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, w, h, d, sizeBytes); 10492e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h * d; 10502e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DRead, false, 10512e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1052244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1053244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1054244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 1055bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1056bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1057c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1058bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 1059bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t) dispatchTab.AllocationGetType((RsContext)con, (RsAllocation)a); 1060c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1061c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1062c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1063bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 1064c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1065bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 1066bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc, dimX); 1067bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 1068c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1069c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1070c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1071c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1072c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 10736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot, jboolean mUseInc) 1074c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1075bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", 1076bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 10776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 10786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 10796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 10806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 10816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1082c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1083c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1084c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 10856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val, jboolean mUseInc) 1086c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1087bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, 1088bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 10896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 10906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 10916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 10926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 10936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1094c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1095c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1096c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 10976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc) 1098c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1099bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, 1100bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 11016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 11036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 11056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1106c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1107c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1108c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc) 1110c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1111bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, 1112bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 11136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 11156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 11176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1118c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1119c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1120c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val, jboolean mUseInc) 1122c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1123bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, 1124bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 11256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 11276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 11296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1130c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1131c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1132c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val, jboolean mUseInc) 1134c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1135bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, 1136bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 11376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 11396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 11416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1142c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1143c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1144c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc) 1146c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1147bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1148c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1149c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 11506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 11526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 11546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1155c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1156c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1157c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1158c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1159bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 11606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong elem, jintArray dims, jboolean mUseInc) 1161c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1162bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1163c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1164c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 1165c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1166c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *dimsPtr = _env->GetIntArrayElements(dims, NULL); 11676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 11696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)dimsPtr, dimsLen); 11706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 11726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)dimsPtr, dimsLen); 11736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1174c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1175c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1176c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1177c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1178c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1179c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone, jboolean mUseInc) 1181c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1182bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", (RsContext)con, 1183bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, (const char *)timeZone); 1184c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1185c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint length = _env->GetArrayLength(timeZone); 1186c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* timeZone_ptr; 1187c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 11886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 11906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 11926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1193c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1194c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (timeZone_ptr) { 1195c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1196c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1197c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1198c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1199c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot, jboolean mUseInc) 1201c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1202bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 12036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptInvoke((RsContext)con, (RsScript)obj, slot); 12056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptInvoke((RsContext)con, (RsScript)obj, slot); 12076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1208c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1209c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1210c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc) 1212c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1213bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1214c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1215c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 12166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 12186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 12206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1221c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1222c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1223c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1224c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 12266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong script, jint slot, jlong ain, jlong aout, jboolean mUseInc) 1227c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1228bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 12296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 12316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 12326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, NULL, 0); 12346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 12366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, NULL, 0); 12386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1239c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 12426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong script, jint slot, jlong ain, jlong aout, jbyteArray params, jboolean mUseInc) 1243c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1244bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1245c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1246c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 12476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 12496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 12506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, NULL, 0); 12526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 12546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, NULL, 0); 12566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1257c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1258c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1259c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1260c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1262bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1263c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint xstart, jint xend, 12646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1265c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1266bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1267c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1268c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1269c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1270c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1271c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1272c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1273c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1274c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1275c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1276c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 12776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 12796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 12806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 12826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 12846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 12866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1287c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1288c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1289c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1291bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1292c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray params, jint xstart, jint xend, 12936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1294c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1295bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1296c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1297c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 1298c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1299c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1300c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1301c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1302c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1303c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1304c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1305c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1306c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1307c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 13086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 13106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 13116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 13126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 13136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 13156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 13166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 13176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1318c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1319c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1320c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1321c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1322c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1323bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1324bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 1325c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring resName, jstring cacheDir, 1326c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray scriptRef, jint length) 1327c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1328bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCCreate, con(%p)", (RsContext)con); 1329c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1330c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 resNameUTF(_env, resName); 1331c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 1332bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong ret = 0; 1333c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* script_ptr = NULL; 1334c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint _exception = 0; 1335c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint remaining; 1336c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!scriptRef) { 1337c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 1339c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1340c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1341c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (length < 0) { 1342c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1343c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 1344c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1345c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1346c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main remaining = _env->GetArrayLength(scriptRef); 1347c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (remaining < length) { 1348c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1349c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", 1350c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main // "length > script.length - offset"); 1351c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1352c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1353c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main script_ptr = (jbyte *) 1354c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 1355c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1356c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //rsScriptCSetText(con, (const char *)script_ptr, length); 1357c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1358bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ret = (jlong)(uintptr_t)dispatchTab.ScriptCCreate((RsContext)con, 1359bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang resNameUTF.c_str(), resNameUTF.length(), 1360bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang cacheDirUTF.c_str(), cacheDirUTF.length(), 1361bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (const char *)script_ptr, length); 1362c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1363c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainexit: 1364c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (script_ptr) { 1365c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 1366c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception ? JNI_ABORT: 0); 1367c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1368c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1369bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)ret; 1370c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1371c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1372bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 13736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid, jboolean mUseInc) 1374c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1375bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid); 13766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 13786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 13806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1381c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1382c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1383bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 13846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig, jboolean mUseInc) 1385c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1386bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 1387bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)sid, slot, sig); 13886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 13906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang slot, sig); 13916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 13936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang slot, sig); 13946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1395c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1396c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1397bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1398086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 1399086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{ 1400086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni LOG_API("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con, 1401086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (void *)sid, slot); 1402086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)dispatchTab.ScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 1403086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni} 1404086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni 1405086010500c28e2bca57ea583d3f38da9a2f2f414Yang Nistatic jlong 14066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jboolean mUseInc) 1407c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1408bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot); 14096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 14116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 14136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1414c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1415c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1416bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1417bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 1418bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _dstk, jlongArray _dstf, jlongArray _types) 1419bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 1420bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con); 1421bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1422bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint kernelsLen = _env->GetArrayLength(_kernels); 1423bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 1424bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 1425bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < kernelsLen; ++i) { 1426bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 1427bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1428bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1429bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint srcLen = _env->GetArrayLength(_src); 1430bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 1431bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 1432bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < srcLen; ++i) { 1433bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 1434bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1435bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1436bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint dstkLen = _env->GetArrayLength(_dstk); 1437bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 1438bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 1439bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstkLen; ++i) { 1440bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 1441bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1442bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1443bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint dstfLen = _env->GetArrayLength(_dstf); 1444bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 1445bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 1446bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstfLen; ++i) { 1447bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 1448bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1449bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1450bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint typesLen = _env->GetArrayLength(_types); 1451bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 1452bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 1453bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < typesLen; ++i) { 1454bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang typesPtr[i] = (RsType)jTypesPtr[i]; 1455bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1456bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1457bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = (jlong)(uintptr_t) dispatchTab.ScriptGroupCreate((RsContext)con, 1458bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 1459bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 1460bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 1461bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 1462bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType *)typesPtr, typesLen * sizeof(RsType)); 1463bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1464bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(kernelsPtr); 1465bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(srcPtr); 1466bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstkPtr); 1467bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstfPtr); 1468bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(typesPtr); 1469bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 1470bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 1471bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 1472bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 1473bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 1474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 1475c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1476c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1477c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1478bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 1479c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1480bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 1481bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 1482bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 1483bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 1484c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1485c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1486c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1487bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 1488c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1489bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 1490bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 1491bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 1492bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 1493c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1494c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1495c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1496bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 1497c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1498bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 1499bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 1500c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1501c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1502c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 1503c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1504bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1505bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 1506c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 1507c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1508bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nSamplerCreate, con(%p)", (RsContext)con); 1509bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.SamplerCreate((RsContext)con, 1510bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)magFilter, 1511bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)minFilter, 1512bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapS, 1513bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapT, 1514bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapR, 1515bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang aniso); 1516bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 1517bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1518bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jint 1519bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSystemGetPointerSize(JNIEnv *_env, jobject _this) { 1520bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)sizeof(void*); 1521c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1522c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 15236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// --------------------------------------------------------------------------- 15246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// For Incremental Intrinsic Support 1525e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wangstatic bool nIncLoadSO(jint deviceApi) { 15266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* handle = NULL; 15276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL); 15286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (handle == NULL) { 15296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("couldn't dlopen %s, %s", filename, dlerror()); 15306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 15316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 15326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 1533e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wang if (loadSymbols(handle, dispatchTabInc, deviceApi) == false) { 15346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("%s init failed!", filename); 15356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 15366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 15376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("Successfully loaded %s", filename); 15386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return true; 15396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 15426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// To create/destroy a dummy context 15436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 15446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 15456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 15476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ObjDestroy((RsContext)con, (void *)obj); 15486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 15526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceCreate(JNIEnv *_env, jobject _this) 15536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceCreate"); 15556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.DeviceCreate(); 15566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 15596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 15606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceDestroy"); 15626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return dispatchTabInc.DeviceDestroy((RsDevice)dev); 15636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 15666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct) 15676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextCreate"); 15696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang //The compat context for incremental support will be synchronous. 15706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ContextCreate((RsDevice)dev, ver, sdkVer, 15716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsContextType)ct, 15726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_CONTEXT_SYNCHRONOUS); 15736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15746f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 15766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextFinish(JNIEnv *_env, jobject _this, jlong con) 15776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextFinish, con(%p)", (RsContext)con); 15796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextFinish((RsContext)con); 15806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 15836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextDestroy(JNIEnv *_env, jobject _this, jlong con) 15846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 15866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextDestroy((RsContext)con); 15876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 15906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Element 15916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 15926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size) 15936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 15956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang type, kind, norm, size); 15966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ElementCreate((RsContext)con, (RsDataType)type, 15976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsDataKind)kind, norm, size); 15986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 16006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Type 16016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 16026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 16036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 16046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 16056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 16066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, eid, dimx, dimy, dimz, mips, faces, yuv); 16076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 16096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dimz, mips, faces, yuv); 16106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 16116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 16136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create Allocation from pointer 16146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 16156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong alloc, jlong type) 16166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 16176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 16186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, (RsElement)type, mips, usage, (void *)pointer); 16196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang size_t strideIn; 16206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* pIn = NULL; 16216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RsAllocation ainI = NULL; 16226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (alloc != 0) { 16236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang pIn = dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 16246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 16256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &strideIn, sizeof(size_t)); 16266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ainI = dispatchTabInc.AllocationCreateTyped((RsContext)incCon, (RsType)type, 16276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_MIPMAP_NONE, 16286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_SHARED, 16296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (uintptr_t)pIn); 16306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 16316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t) ainI; 16326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 1633c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 16342e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang// --------------------------------------------------------------------------- 1635c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1636bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1637c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic const char *classPathName = "android/support/v8/renderscript/RenderScript"; 1638c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1639c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic JNINativeMethod methods[] = { 16407c0de6383be18a1dae1297c54c56f3d9afbeaaadMiao Wang{"nLoadSO", "(ZI)Z", (bool*)nLoadSO }, 1641dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{"nLoadIOSO", "()Z", (bool*)nLoadIOSO }, 1642bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 1643bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 1644bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 1645bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 1646bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 1647bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 1648bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 1649bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 1650c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1651c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1652c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// All methods below are thread protected in java. 1653ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang{"rsnContextCreate", "(JIIILjava/lang/String;)J", (void*)nContextCreate }, 1654bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 1655bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 1656bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 1657bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDump", "(JI)V", (void*)nContextDump }, 1658bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 1659b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 1660b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 1661b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 1662b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 1663bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 1664bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1665bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 1666bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 1667bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 1668bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1669bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 1670bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1671bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 1672bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 1673bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 1674bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 1675bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1676bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 1677bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 1678bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1679bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 1680bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 1681bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 16822e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 1683bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D }, 1684244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang//{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 16852e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 1686bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 16872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 1688bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 16892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 16902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 16913bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang//{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 16922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 16932e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang//{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 1694bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 1695bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 1696bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 1697bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 16986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptBindAllocation", "(JJJIZ)V", (void*)nScriptBindAllocation }, 16996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetTimeZone", "(JJ[BZ)V", (void*)nScriptSetTimeZone }, 17006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvoke", "(JJIZ)V", (void*)nScriptInvoke }, 17016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvokeV", "(JJI[BZ)V", (void*)nScriptInvokeV }, 17026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJZ)V", (void*)nScriptForEach }, 17036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJ[BZ)V", (void*)nScriptForEachV }, 17046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJIIIIIIZ)V", (void*)nScriptForEachClipped }, 17056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJ[BIIIIIIZ)V", (void*)nScriptForEachClippedV }, 17066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarI", "(JJIIZ)V", (void*)nScriptSetVarI }, 17076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarJ", "(JJIJZ)V", (void*)nScriptSetVarJ }, 17086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarF", "(JJIFZ)V", (void*)nScriptSetVarF }, 17096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarD", "(JJIDZ)V", (void*)nScriptSetVarD }, 17106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarV", "(JJI[BZ)V", (void*)nScriptSetVarV }, 17116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarVE", "(JJI[BJ[IZ)V", (void*)nScriptSetVarVE }, 17126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarObj", "(JJIJZ)V", (void*)nScriptSetVarObj }, 1713bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1714bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 17156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptIntrinsicCreate", "(JIJZ)J", (void*)nScriptIntrinsicCreate }, 17166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptKernelIDCreate", "(JJIIZ)J", (void*)nScriptKernelIDCreate }, 1717086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 17186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptFieldIDCreate", "(JJIZ)J", (void*)nScriptFieldIDCreate }, 1719bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 1720b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnScriptGroup2Create", "(JLjava/lang/String;[J)J", (void*)nScriptGroup2Create }, 1721bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 1722bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 1723bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 1724b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 1725bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1726bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 1727c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1728bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 17296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 17306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Entry points for Inc libRSSupport 1731e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wang{"nIncLoadSO", "(I)Z", (bool*)nIncLoadSO }, 17326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceCreate", "()J", (void*)nIncDeviceCreate }, 17336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceDestroy", "(J)V", (void*)nIncDeviceDestroy }, 17346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextCreate", "(JIII)J", (void*)nIncContextCreate }, 17356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextFinish", "(J)V", (void*)nIncContextFinish }, 17366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextDestroy", "(J)V", (void*)nIncContextDestroy }, 17376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncObjDestroy", "(JJ)V", (void*)nIncObjDestroy }, 17386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncElementCreate", "(JJIZI)J", (void*)nIncElementCreate }, 17396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncTypeCreate", "(JJIIIZZI)J", (void*)nIncTypeCreate }, 17406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncAllocationCreateTyped", "(JJJJ)J", (void*)nIncAllocationCreateTyped }, 1741c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 1742c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1743c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 1744c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1745c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainjint JNI_OnLoad(JavaVM* vm, void* reserved) 1746c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1747c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv* env = NULL; 1748257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines jclass clazz = NULL; 1749c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint result = -1; 1750c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1751c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 1752184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 1753184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: GetEnv failed\n"); 1754257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 1755257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 1756257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env == NULL) { 1757184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: env == NULL"); 1758257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 1759257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 1760257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines 1761257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines clazz = env->FindClass(classPathName); 1762257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (clazz == NULL) { 1763c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 1764c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1765c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1766257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env->RegisterNatives(clazz, methods, NELEM(methods)) < 0) { 1767184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 1768184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: MediaPlayer native registration failed\n"); 1769c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 1770c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1771c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1772c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main /* success -- return valid version number */ 1773c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main result = JNI_VERSION_1_4; 1774c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1775c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainbail: 1776c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return result; 1777c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1778