android_renderscript_RenderScript.cpp revision e68c5973af1e80c77cab9aea0b77f46a801aef96
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 2727c0de6383be18a1dae1297c54c56f3d9afbeaaadMiao Wangstatic jboolean nLoadSO(JNIEnv *_env, jobject _this, jboolean useNative, jint deviceApi) { 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 2847c0de6383be18a1dae1297c54c56f3d9afbeaaadMiao Wang if (loadSymbols(handle, dispatchTab, deviceApi) == 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 438e68c5973af1e80c77cab9aea0b77f46a801aef96Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, jstring name, 439b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jstring cacheDir, jlongArray closureArray) { 440e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni AutoJavaStringToUTF8 nameUTF(_env, name); 441b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 442b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 443936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 444936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 445936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 446936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni for (int i = 0; i < numClosures; i++) { 447936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni closures[i] = (RsClosure)jClosures[i]; 448936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 449936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 450b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang return (jlong)(uintptr_t)dispatchTab.ScriptGroup2Create( 451e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni (RsContext)con, nameUTF.c_str(), nameUTF.length(), 452e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni cacheDirUTF.c_str(), cacheDirUTF.length(), 453b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang closures, numClosures); 454b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang} 455b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 456b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wangstatic void 457b1c365bfb0566142c49375f09f2b8289182f1f47Miao WangnScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 458b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 459936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 460936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 461c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 462bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 463c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 464bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 465bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ObjDestroy((RsContext)con, (void *)obj); 466c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 467c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 468c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 469bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 470c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceCreate(JNIEnv *_env, jobject _this) 471c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 472c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceCreate"); 473bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.DeviceCreate(); 474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 475c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 476c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 477bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 478c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 479c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceDestroy"); 480470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return dispatchTab.DeviceDestroy((RsDevice)dev); 481c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 482c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 483c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 484bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 485c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 486c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 487470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return dispatchTab.DeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 488c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 489c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 490bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 491ecccf940f72679f7602c52b0b4bcb245acdad55bMiao WangnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 492ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang jint ct, jstring nativeLibDirJava) 493c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 494c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nContextCreate"); 495ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang // Access the NativeLibDir in the Java Context. 496ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang const char * nativeLibDir = _env->GetStringUTFChars(nativeLibDirJava, JNI_FALSE); 497ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang size_t length = (size_t)_env->GetStringUTFLength(nativeLibDirJava); 498ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 499ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang jlong id = (jlong)(uintptr_t)dispatchTab.ContextCreate((RsDevice)dev, ver, 500ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang sdkVer, 501ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang (RsContextType)ct, 0); 502ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang if (dispatchTab.SetNativeLibDir) { 503ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang dispatchTab.SetNativeLibDir((RsContext)id, nativeLibDir, length); 504ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang } 505ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 506ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang _env->ReleaseStringUTFChars(nativeLibDirJava, nativeLibDir); 507ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang return id; 508c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 509c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 510c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 511c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 512bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 513c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 514bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 515bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextSetPriority((RsContext)con, p); 516c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 517c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 518c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 519c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 520c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 521bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDestroy(JNIEnv *_env, jobject _this, jlong con) 522c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 523bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 524bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextDestroy((RsContext)con); 525c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 526c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 527c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 528bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 529c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 530c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 531470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang dispatchTab.ContextDump((RsContext)con, bits); 532c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 533c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 534c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 535c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jstring 536bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 537c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 538bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con); 539c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main char buf[1024]; 540c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 541c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 542c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 543bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextGetMessage((RsContext)con, 5446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang buf, sizeof(buf), 5456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &receiveLen, sizeof(receiveLen), 5466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &subID, sizeof(subID)); 547c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!id && receiveLen) { 548184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, 549184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "message receive buffer too small. %zu", receiveLen); 550c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 551c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return _env->NewStringUTF(buf); 552c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 553c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 554c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint 555bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 556c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 557c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 558bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 559c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = _env->GetIntArrayElements(data, NULL); 560c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 561c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 562bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextGetMessage((RsContext)con, 5636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len * 4, 5646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &receiveLen, sizeof(receiveLen), 5656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &subID, sizeof(subID)); 566c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!id && receiveLen) { 567184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, 568184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "message receive buffer too small. %zu", receiveLen); 569c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 570c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(data, ptr, 0); 571bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)id; 572c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 573c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 574c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint 575bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 576c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 577bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextPeekMessage, con(%p)", (RsContext)con); 578c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL); 579c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 580c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 581bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 582c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main &subID, sizeof(subID)); 583c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main auxDataPtr[0] = (jint)subID; 584c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main auxDataPtr[1] = (jint)receiveLen; 585c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 586bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)id; 587c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 588c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 589bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 590c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 591bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextInitToClient, con(%p)", (RsContext)con); 592bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextInitToClient((RsContext)con); 593c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 594c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 595bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 596c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 597bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con); 598bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextDeinitToClient((RsContext)con); 599c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 600c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 601c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 602bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 603c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 604c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = NULL; 605c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = 0; 606c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (data) { 607c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main len = _env->GetArrayLength(data); 608c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = _env->GetIntArrayElements(data, NULL); 609c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 610bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 611bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 612c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (data) { 613c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 614c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 615c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 616c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 617c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 618c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 619bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 620086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, 621086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni jboolean norm, jint size) 622c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 623bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 624bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang type, kind, norm, size); 625086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)(uintptr_t)dispatchTab.ElementCreate((RsContext)con, 626086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (RsDataType)type, 627086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (RsDataKind)kind, 628bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang norm, size); 629c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 630c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 631bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 632bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementCreate2(JNIEnv *_env, jobject _this, jlong con, 633bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 634c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 635c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main int fieldCount = _env->GetArrayLength(_ids); 636bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementCreate2, con(%p)", (RsContext)con); 637bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 638bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jIds = _env->GetLongArrayElements(_ids, NULL); 639bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL); 640c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 641bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 642bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 643bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 644bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < fieldCount; i ++) { 645bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ids[i] = (RsElement)jIds[i]; 646bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang arraySizes[i] = (uint32_t)jArraySizes[i]; 647bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 648c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 649c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 650c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 651c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **nameArray = names.c_str(); 652c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *sizeArray = names.c_str_len(); 653c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 6546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong id = (jlong)(uintptr_t)dispatchTab.ElementCreate2((RsContext)con, (RsElement *)ids, 6556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fieldCount, nameArray, 6566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fieldCount * sizeof(size_t), sizeArray, 6576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)arraySizes, fieldCount); 658c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 659bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(ids); 660bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(arraySizes); 661bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 662bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 663bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return id; 664c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 665c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 666c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 667c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 668bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 669c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 670bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 671bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _IDs, 672c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jobjectArray _names, 673c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jintArray _arraySizes) 674c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 675bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uint32_t dataSize = _env->GetArrayLength(_IDs); 676bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementGetSubElements, con(%p)", (RsContext)con); 677c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 678bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uintptr_t *ids = (uintptr_t *)malloc(dataSize * sizeof(uintptr_t)); 679c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *)); 680c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t)); 681c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 682bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 683bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)dataSize); 684c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 685bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(uint32_t i = 0; i < dataSize; i++) { 686bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang const jlong id = (jlong)(uintptr_t)ids[i]; 687bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang const jint arraySize = (jint)arraySizes[i]; 688c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 689bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->SetLongArrayRegion(_IDs, i, 1, &id); 690bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 691c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 692c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 693c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(ids); 694c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(names); 695c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(arraySizes); 696c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 697c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 698c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 699c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 700bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 701bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 702c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 703c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 704c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 705bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv); 706c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 707bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 708bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dimz, mips, faces, yuv); 709c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 710c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 711c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 712c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 713bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 714bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 715bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong pointer) 716c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 717bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 718bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 719bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t) dispatchTab.AllocationCreateTyped((RsContext)con, (RsType)type, 720bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mips, 721bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)usage, (uintptr_t)pointer); 722c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 723c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 724c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 725bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 726c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 727bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits); 728bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 729c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 730c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 731c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 732bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 733dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{ 734bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ioDispatch.sAllocationSetSurface(_env, _this, (RsContext)con, (RsAllocation)alloc, sur, dispatchTab); 735dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 736dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang 737dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void 738bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 739dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{ 740bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationIoSend((RsContext)con, (RsAllocation)alloc); 741dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 742dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang 743dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void 744bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 745c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 746bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 747bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 748c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 749c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 750c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic size_t GetBitmapSize(JNIEnv *env, jobject jbitmap) { 751c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 752c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 753c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(env, jbitmap, &info); 754c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t s = info.width * info.height; 755c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main switch (info.format) { 756c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGBA_8888: s *= 4; break; 757c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGB_565: s *= 2; break; 758c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGBA_4444: s *= 2; break; 759c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 760c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return s; 761c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 762c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 763bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 764bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 765bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jobject jbitmap, jint usage) 766c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 767bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 768257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines void *pixels = NULL; 769257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 770c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 771257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (pixels != NULL) { 772bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCreateFromBitmap((RsContext)con, 773bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 774bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 775bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang pixels, 776bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap), 777bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang usage); 778257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_unlockPixels(_env, jbitmap); 779257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 780c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 781c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 782c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 783bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 784bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, 785bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint mip, jobject jbitmap, jint usage) 786c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 787bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 788257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines void *pixels = NULL; 789257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 790c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 791257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (pixels != NULL) { 792bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCreateTyped((RsContext)con, 793bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 794bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 795bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)usage, 796bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uintptr_t)pixels); 797257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_unlockPixels(_env, jbitmap); 798257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 799c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 800c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 801c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 802bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 803bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, 804bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint mip, jobject jbitmap, jint usage) 805c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 806c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 807c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 808c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 809bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 810c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 811bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCubeCreateFromBitmap((RsContext)con, 812bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 813bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 814bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang pixels, 815bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap), 816bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang usage); 817c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 818c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 819c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 820c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 821c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 822c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 823bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 824c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 825c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 826c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 827c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(_env, jbitmap, &info); 828c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 829c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 830c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 831c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 832c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 833bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 0, 834bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, info.width, 835bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang info.height, pixels, GetBitmapSize(_env, jbitmap), 0); 836c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 837c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 838c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 839c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 840c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 841bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 842c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 843c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 844c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 845c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(_env, jbitmap, &info); 846c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 847c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 848c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 849c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 850c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 851bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, pixels, 852bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap)); 853c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 855c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //bitmap.notifyPixelsChanged(); 856c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 857c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 8588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 859c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 8608352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 8612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint count, jobject data, jint sizeBytes, jint dataType, jint mSize, 8622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jboolean usePadding) 863c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 8648352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 8658352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 8668352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 8678352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang dataType); 8682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation1DData, true, 8692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 870c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 871c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 872244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 873c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 874244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, 875244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 876c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 877c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 878244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocationElementData1D, con(%p), alloc(%p), xoff(%i), comp(%i), len(%i), " 879244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, compIdx, len, 880244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang sizeBytes); 881244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 882244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang dispatchTab.Allocation1DElementData((RsContext)con, (RsAllocation)alloc, xoff, 883244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, ptr, sizeBytes, compIdx); 884c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 885c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 886c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 887244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 888244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 889244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 890244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint xoff, jint yoff, jint zoff, 891244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 892244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 893244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint len = _env->GetArrayLength(data); 894244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 895244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 896244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang sizeBytes); 897244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 898244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang dispatchTab.AllocationElementData((RsContext)con, (RsAllocation)alloc, 899244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang xoff, yoff, zoff, 900244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, ptr, sizeBytes, compIdx); 901244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 902244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 903244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 904244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 9058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 906c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 9078352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 9082e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize, 9092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jboolean usePadding) 910c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 9118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 9128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 9138352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 9148352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 9152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h; 9162e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation2DData, true, 9172e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 918c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 919c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 920c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 921bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 922bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong dstAlloc, jint dstXoff, jint dstYoff, 923c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dstMip, jint dstFace, 924c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint width, jint height, 925bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong srcAlloc, jint srcXoff, jint srcYoff, 926c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint srcMip, jint srcFace) 927c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 928c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 929c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " dstMip(%i), dstFace(%i), width(%i), height(%i)," 930c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 931bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 932c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 933c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 934bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopy2DRange((RsContext)con, 935bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)dstAlloc, 936bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstXoff, dstYoff, 937bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstMip, dstFace, 938bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang width, height, 939bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)srcAlloc, 940bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcXoff, srcYoff, 941bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcMip, srcFace); 942c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 943c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 9448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 945c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 9468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 9472e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType, 9482e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 949c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 9508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 9518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 9528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 9538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang lod, w, h, d, sizeBytes); 9542e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h * d; 9552e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DData, true, 9562e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 957c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 958c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 959c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 960bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 961bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 962c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dstMip, 963c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint width, jint height, jint depth, 964bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 965c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint srcMip) 966c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 967c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 968c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " dstMip(%i), width(%i), height(%i)," 969c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 970bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 971c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 972c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 973bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopy3DRange((RsContext)con, 974bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)dstAlloc, 975bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstXoff, dstYoff, dstZoff, dstMip, 976bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang width, height, depth, 977bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)srcAlloc, 978bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcXoff, srcYoff, srcZoff, srcMip); 979bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 980bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 9818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 982bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void 9832e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType, 9842e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 985bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 9868352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 9878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 9882e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = 0; 9892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.AllocationRead, false, 9902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, ptr, len * typeBytes); 991c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 992c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 9938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 994c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 9958352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 9962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint count, jobject data, jint sizeBytes, jint dataType, 9972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 998c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 9998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 10008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 10018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 10022e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.Allocation1DRead, false, 10032e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1004c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1005c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1006244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data. 1007244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1008244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1009244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, 1010244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint xoff, jint yoff, jint zoff, 10113bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jint lod, jint compIdx, jobject data, jint sizeBytes) 1012244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 10133bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jint len = _env->GetArrayLength(data); 10143bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang LOG_API("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 10153bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 10163bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang sizeBytes); 10173bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 10183bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang dispatchTab.AllocationElementRead((RsContext)con, (RsAllocation)alloc, 10193bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang xoff, yoff, zoff, 10203bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang lod, ptr, sizeBytes, compIdx); 10213bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1022244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1023244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1024244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 10258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1026c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 10278352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 10282e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, 10292e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1030c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 10318352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 10328352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 10338352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 10348352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 10352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h; 10362e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.Allocation2DRead, false, 10372e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1038c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1039c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1040244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1041244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1042244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1043244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 10442e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jint d, jobject data, int sizeBytes, int dataType, 10452e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1046244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 1047244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 1048244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 1049244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 1050244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, w, h, d, sizeBytes); 10512e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h * d; 10522e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DRead, false, 10532e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1054244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1055244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1056244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 1057bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1058bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1059c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1060bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 1061bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t) dispatchTab.AllocationGetType((RsContext)con, (RsAllocation)a); 1062c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1063c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1064c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1065bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 1066c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1067bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 1068bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc, dimX); 1069bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 1070c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1071c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1072c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1073c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1074c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 10756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot, jboolean mUseInc) 1076c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1077bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", 1078bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 10796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 10806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 10816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 10826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 10836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1084c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1085c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1086c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 10876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val, jboolean mUseInc) 1088c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1089bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, 1090bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 10916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 10926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 10936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 10946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 10956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1096c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1097c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1098c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 10996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc) 1100c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1101bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, 1102bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 11036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 11056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 11076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1108c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1109c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1110c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc) 1112c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1113bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, 1114bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 11156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 11176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 11196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1120c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1121c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1122c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val, jboolean mUseInc) 1124c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1125bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, 1126bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 11276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 11296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 11316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1132c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1133c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1134c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val, jboolean mUseInc) 1136c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1137bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, 1138bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 11396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 11416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 11436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1144c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1145c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1146c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc) 1148c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1149bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1150c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1151c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 11526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 11546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 11566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1157c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1158c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1159c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1160c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1161bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 11626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong elem, jintArray dims, jboolean mUseInc) 1163c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1164bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1165c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1166c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 1167c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1168c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *dimsPtr = _env->GetIntArrayElements(dims, NULL); 11696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 11716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)dimsPtr, dimsLen); 11726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 11746f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)dimsPtr, dimsLen); 11756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1176c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1177c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1178c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1179c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1180c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1181c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone, jboolean mUseInc) 1183c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1184bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", (RsContext)con, 1185bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, (const char *)timeZone); 1186c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1187c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint length = _env->GetArrayLength(timeZone); 1188c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* timeZone_ptr; 1189c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 11906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 11926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 11946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1195c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1196c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (timeZone_ptr) { 1197c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1198c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1199c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1200c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1201c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot, jboolean mUseInc) 1203c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1204bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 12056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptInvoke((RsContext)con, (RsScript)obj, slot); 12076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptInvoke((RsContext)con, (RsScript)obj, slot); 12096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1210c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1211c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1212c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc) 1214c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1215bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1216c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1217c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 12186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 12206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 12226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1223c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1224c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1225c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1226c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 12286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong script, jint slot, jlong ain, jlong aout, jboolean mUseInc) 1229c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1230bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 12316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 12336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 12346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, NULL, 0); 12366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 12386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, NULL, 0); 12406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1242c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 12446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong script, jint slot, jlong ain, jlong aout, jbyteArray params, jboolean mUseInc) 1245c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1246bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1247c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1248c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 12496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 12516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 12526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, NULL, 0); 12546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 12566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, NULL, 0); 12586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1259c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1260c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1261c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1262c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1264bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1265c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint xstart, jint xend, 12666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1267c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1268bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1269c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1270c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1271c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1272c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1273c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1274c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1275c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1276c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1277c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1278c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 12796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 12816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 12826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 12846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 12866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 12876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 12886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1289c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1290c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1291c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1293bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1294c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray params, jint xstart, jint xend, 12956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1296c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1297bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1298c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1299c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 1300c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1301c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1302c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1303c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1304c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1305c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1306c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1307c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1308c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1309c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 13106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 13126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 13136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 13146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 13156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 13176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 13186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 13196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1320c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1321c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1322c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1323c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1324c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1325bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1326bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 1327c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring resName, jstring cacheDir, 1328c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray scriptRef, jint length) 1329c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1330bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCCreate, con(%p)", (RsContext)con); 1331c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1332c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 resNameUTF(_env, resName); 1333c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 1334bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong ret = 0; 1335c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* script_ptr = NULL; 1336c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint _exception = 0; 1337c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint remaining; 1338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!scriptRef) { 1339c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1340c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 1341c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1342c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1343c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (length < 0) { 1344c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1345c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 1346c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1347c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1348c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main remaining = _env->GetArrayLength(scriptRef); 1349c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (remaining < length) { 1350c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1351c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", 1352c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main // "length > script.length - offset"); 1353c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1354c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1355c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main script_ptr = (jbyte *) 1356c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 1357c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1358c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //rsScriptCSetText(con, (const char *)script_ptr, length); 1359c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1360bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ret = (jlong)(uintptr_t)dispatchTab.ScriptCCreate((RsContext)con, 1361bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang resNameUTF.c_str(), resNameUTF.length(), 1362bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang cacheDirUTF.c_str(), cacheDirUTF.length(), 1363bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (const char *)script_ptr, length); 1364c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1365c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainexit: 1366c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (script_ptr) { 1367c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 1368c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception ? JNI_ABORT: 0); 1369c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1370c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1371bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)ret; 1372c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1373c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1374bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 13756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid, jboolean mUseInc) 1376c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1377bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid); 13786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 13806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 13826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1383c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1384c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1385bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 13866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig, jboolean mUseInc) 1387c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1388bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 1389bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)sid, slot, sig); 13906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 13926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang slot, sig); 13936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 13956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang slot, sig); 13966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1397c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1398c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1399bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1400086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 1401086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{ 1402086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni LOG_API("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con, 1403086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (void *)sid, slot); 1404086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)dispatchTab.ScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 1405086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni} 1406086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni 1407086010500c28e2bca57ea583d3f38da9a2f2f414Yang Nistatic jlong 14086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jboolean mUseInc) 1409c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1410bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot); 14116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 14136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 14156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1416c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1417c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1418bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1419bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 1420bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _dstk, jlongArray _dstf, jlongArray _types) 1421bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 1422bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con); 1423bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1424bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint kernelsLen = _env->GetArrayLength(_kernels); 1425bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 1426bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 1427bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < kernelsLen; ++i) { 1428bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 1429bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1430bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1431bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint srcLen = _env->GetArrayLength(_src); 1432bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 1433bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 1434bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < srcLen; ++i) { 1435bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 1436bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1437bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1438bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint dstkLen = _env->GetArrayLength(_dstk); 1439bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 1440bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 1441bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstkLen; ++i) { 1442bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 1443bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1444bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1445bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint dstfLen = _env->GetArrayLength(_dstf); 1446bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 1447bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 1448bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstfLen; ++i) { 1449bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 1450bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1451bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1452bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint typesLen = _env->GetArrayLength(_types); 1453bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 1454bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 1455bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < typesLen; ++i) { 1456bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang typesPtr[i] = (RsType)jTypesPtr[i]; 1457bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1458bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1459bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = (jlong)(uintptr_t) dispatchTab.ScriptGroupCreate((RsContext)con, 1460bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 1461bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 1462bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 1463bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 1464bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType *)typesPtr, typesLen * sizeof(RsType)); 1465bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1466bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(kernelsPtr); 1467bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(srcPtr); 1468bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstkPtr); 1469bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstfPtr); 1470bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(typesPtr); 1471bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 1472bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 1473bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 1474bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 1475bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 1476c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 1477c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1478c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1479c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1480bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 1481c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1482bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 1483bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 1484bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 1485bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 1486c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1487c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1488c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1489bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 1490c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1491bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 1492bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 1493bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 1494bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 1495c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1496c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1497c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1498bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 1499c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1500bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 1501bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 1502c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1503c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1504c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 1505c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1506bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1507bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 1508c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 1509c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1510bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nSamplerCreate, con(%p)", (RsContext)con); 1511bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.SamplerCreate((RsContext)con, 1512bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)magFilter, 1513bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)minFilter, 1514bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapS, 1515bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapT, 1516bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapR, 1517bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang aniso); 1518bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 1519bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1520bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jint 1521bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSystemGetPointerSize(JNIEnv *_env, jobject _this) { 1522bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)sizeof(void*); 1523c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1524c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 15256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// --------------------------------------------------------------------------- 15266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// For Incremental Intrinsic Support 15276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic bool nIncLoadSO() { 15286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* handle = NULL; 15296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL); 15306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (handle == NULL) { 15316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("couldn't dlopen %s, %s", filename, dlerror()); 15326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 15336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 15346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (loadSymbols(handle, dispatchTabInc) == false) { 15366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("%s init failed!", filename); 15376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 15386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 15396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("Successfully loaded %s", filename); 15406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return true; 15416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 15446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// To create/destroy a dummy context 15456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 15466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 15476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 15496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ObjDestroy((RsContext)con, (void *)obj); 15506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 15546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceCreate(JNIEnv *_env, jobject _this) 15556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceCreate"); 15576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.DeviceCreate(); 15586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 15616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 15626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceDestroy"); 15646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return dispatchTabInc.DeviceDestroy((RsDevice)dev); 15656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 15686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct) 15696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextCreate"); 15716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang //The compat context for incremental support will be synchronous. 15726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ContextCreate((RsDevice)dev, ver, sdkVer, 15736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsContextType)ct, 15746f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_CONTEXT_SYNCHRONOUS); 15756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 15786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextFinish(JNIEnv *_env, jobject _this, jlong con) 15796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextFinish, con(%p)", (RsContext)con); 15816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextFinish((RsContext)con); 15826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 15856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextDestroy(JNIEnv *_env, jobject _this, jlong con) 15866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 15886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextDestroy((RsContext)con); 15896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 15906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 15916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 15926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Element 15936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 15946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size) 15956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 15966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 15976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang type, kind, norm, size); 15986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ElementCreate((RsContext)con, (RsDataType)type, 15996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsDataKind)kind, norm, size); 16006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 16016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 16026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Type 16036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 16046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 16056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 16066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 16076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 16086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, eid, dimx, dimy, dimz, mips, faces, yuv); 16096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 16116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dimz, mips, faces, yuv); 16126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 16136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 16156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create Allocation from pointer 16166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 16176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong alloc, jlong type) 16186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 16196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 16206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, (RsElement)type, mips, usage, (void *)pointer); 16216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang size_t strideIn; 16226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* pIn = NULL; 16236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RsAllocation ainI = NULL; 16246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (alloc != 0) { 16256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang pIn = dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 16266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 16276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &strideIn, sizeof(size_t)); 16286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ainI = dispatchTabInc.AllocationCreateTyped((RsContext)incCon, (RsType)type, 16296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_MIPMAP_NONE, 16306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_SHARED, 16316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (uintptr_t)pIn); 16326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 16336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t) ainI; 16346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 1635c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 16362e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang// --------------------------------------------------------------------------- 1637c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1638bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1639c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic const char *classPathName = "android/support/v8/renderscript/RenderScript"; 1640c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1641c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic JNINativeMethod methods[] = { 16427c0de6383be18a1dae1297c54c56f3d9afbeaaadMiao Wang{"nLoadSO", "(ZI)Z", (bool*)nLoadSO }, 1643dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{"nLoadIOSO", "()Z", (bool*)nLoadIOSO }, 1644bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 1645bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 1646bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 1647bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 1648bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 1649bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 1650bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 1651bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 1652c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1653c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1654c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// All methods below are thread protected in java. 1655ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang{"rsnContextCreate", "(JIIILjava/lang/String;)J", (void*)nContextCreate }, 1656bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 1657bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 1658bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 1659bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDump", "(JI)V", (void*)nContextDump }, 1660bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 1661b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 1662b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 1663b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 1664b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 1665bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 1666bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1667bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 1668bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 1669bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 1670bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1671bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 1672bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1673bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 1674bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 1675bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 1676bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 1677bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1678bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 1679bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 1680bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1681bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 1682bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 1683bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 16842e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 1685bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D }, 1686244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang//{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 16872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 1688bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 16892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 1690bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 16912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 16922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 16933bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang//{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 16942e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 16952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang//{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 1696bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 1697bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 1698bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 1699bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 17006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptBindAllocation", "(JJJIZ)V", (void*)nScriptBindAllocation }, 17016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetTimeZone", "(JJ[BZ)V", (void*)nScriptSetTimeZone }, 17026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvoke", "(JJIZ)V", (void*)nScriptInvoke }, 17036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvokeV", "(JJI[BZ)V", (void*)nScriptInvokeV }, 17046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJZ)V", (void*)nScriptForEach }, 17056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJ[BZ)V", (void*)nScriptForEachV }, 17066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJIIIIIIZ)V", (void*)nScriptForEachClipped }, 17076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJ[BIIIIIIZ)V", (void*)nScriptForEachClippedV }, 17086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarI", "(JJIIZ)V", (void*)nScriptSetVarI }, 17096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarJ", "(JJIJZ)V", (void*)nScriptSetVarJ }, 17106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarF", "(JJIFZ)V", (void*)nScriptSetVarF }, 17116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarD", "(JJIDZ)V", (void*)nScriptSetVarD }, 17126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarV", "(JJI[BZ)V", (void*)nScriptSetVarV }, 17136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarVE", "(JJI[BJ[IZ)V", (void*)nScriptSetVarVE }, 17146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarObj", "(JJIJZ)V", (void*)nScriptSetVarObj }, 1715bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1716bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 17176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptIntrinsicCreate", "(JIJZ)J", (void*)nScriptIntrinsicCreate }, 17186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptKernelIDCreate", "(JJIIZ)J", (void*)nScriptKernelIDCreate }, 1719086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 17206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptFieldIDCreate", "(JJIZ)J", (void*)nScriptFieldIDCreate }, 1721bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 1722e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;Ljava/lang/String;[J)J", (void*)nScriptGroup2Create }, 1723bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 1724bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 1725bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 1726b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 1727bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1728bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 1729c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1730bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 17316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 17326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Entry points for Inc libRSSupport 17336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncLoadSO", "()Z", (bool*)nIncLoadSO }, 17346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceCreate", "()J", (void*)nIncDeviceCreate }, 17356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceDestroy", "(J)V", (void*)nIncDeviceDestroy }, 17366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextCreate", "(JIII)J", (void*)nIncContextCreate }, 17376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextFinish", "(J)V", (void*)nIncContextFinish }, 17386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextDestroy", "(J)V", (void*)nIncContextDestroy }, 17396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncObjDestroy", "(JJ)V", (void*)nIncObjDestroy }, 17406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncElementCreate", "(JJIZI)J", (void*)nIncElementCreate }, 17416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncTypeCreate", "(JJIIIZZI)J", (void*)nIncTypeCreate }, 17426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncAllocationCreateTyped", "(JJJJ)J", (void*)nIncAllocationCreateTyped }, 1743c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 1744c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1745c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 1746c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1747c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainjint JNI_OnLoad(JavaVM* vm, void* reserved) 1748c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1749c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv* env = NULL; 1750257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines jclass clazz = NULL; 1751c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint result = -1; 1752c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1753c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 1754184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 1755184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: GetEnv failed\n"); 1756257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 1757257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 1758257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env == NULL) { 1759184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: env == NULL"); 1760257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 1761257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 1762257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines 1763257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines clazz = env->FindClass(classPathName); 1764257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (clazz == NULL) { 1765c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 1766c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1767c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1768257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env->RegisterNatives(clazz, methods, NELEM(methods)) < 0) { 1769184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 1770184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: MediaPlayer native registration failed\n"); 1771c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 1772c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1773c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1774c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main /* success -- return valid version number */ 1775c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main result = JNI_VERSION_1_4; 1776c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1777c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainbail: 1778c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return result; 1779c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1780