android_renderscript_RenderScript.cpp revision 1e46e4458cd167070301ecbc81ceea73c49eb0f6
1c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main/* 2c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Copyright (C) 2011-2012 The Android Open Source Project 3c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * 4c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Licensed under the Apache License, Version 2.0 (the "License"); 5c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * you may not use this file except in compliance with the License. 6c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * You may obtain a copy of the License at 7c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * 8c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * http://www.apache.org/licenses/LICENSE-2.0 9c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * 10c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Unless required by applicable law or agreed to in writing, software 11c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * distributed under the License is distributed on an "AS IS" BASIS, 12c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * See the License for the specific language governing permissions and 14c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * limitations under the License. 15c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main */ 16c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 17c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_TAG "libRS_jni" 18c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 19c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <stdlib.h> 20c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <stdio.h> 21c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <fcntl.h> 22c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <unistd.h> 23c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <math.h> 24c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <android/bitmap.h> 25257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#include <android/log.h> 26c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 27dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang#include <rsEnv.h> 28470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang#include "rsDispatch.h" 29470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang#include <dlfcn.h> 30470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 31c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//#define LOG_API ALOG 32c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_API(...) 33c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 34257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#define NELEM(m) (sizeof(m) / sizeof((m)[0])) 35c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 368352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wangtemplate <typename... T> 378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wangvoid UNUSED(T... t) {} 388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ 398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang jint len = 0; \ 408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang void *ptr = nullptr; \ 412e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang void *srcPtr = nullptr; \ 428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang size_t typeBytes = 0; \ 438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang jint relFlag = 0; \ 448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (readonly) { \ 458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \ 462e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang /* readonly = true, also indicates we are copying to the allocation . */ \ 478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang relFlag = JNI_ABORT; \ 488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } \ 498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang switch(dataType) { \ 508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_FLOAT_32: \ 518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jfloatArray)data); \ 528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \ 538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 4; \ 542e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 552e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 562e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 572e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 582e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 642e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 652e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 662e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 672e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 702e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 712e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 722e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \ 748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_FLOAT_64: \ 768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jdoubleArray)data); \ 778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \ 788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 8; \ 792e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 802e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 812e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 822e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 832e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 842e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 852e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 862e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 882e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 932e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 942e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \ 998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_8: \ 1018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_8: \ 1028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jbyteArray)data); \ 1038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \ 1048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 1; \ 1052e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1062e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1072e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1082e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1102e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1112e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1122e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1132e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1142e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1162e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1172e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1182e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1192e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1202e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1212e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1222e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1232e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1248352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \ 1258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1268352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_16: \ 1278352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_16: \ 1288352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jshortArray)data); \ 1298352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetShortArrayElements((jshortArray)data, flag); \ 1308352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 2; \ 1312e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1322e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1332e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1342e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1362e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1372e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1382e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1392e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1402e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1412e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1422e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1432e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1442e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1452e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1462e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1472e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1482e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1492e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \ 1518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_32: \ 1538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_32: \ 1548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jintArray)data); \ 1558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetIntArrayElements((jintArray)data, flag); \ 1568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 4; \ 1572e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1582e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1642e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1652e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1662e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1672e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1702e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1712e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1722e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1732e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1742e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1752e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \ 1778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_64: \ 1798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_64: \ 1808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jlongArray)data); \ 1818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetLongArrayElements((jlongArray)data, flag); \ 1828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 8; \ 1832e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1842e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1852e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1862e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1882e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1932e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1942e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1982e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1992e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 2002e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 2012e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 2028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \ 2038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 2048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang default: \ 2058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang break; \ 2068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } \ 2072e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang UNUSED(len, ptr, srcPtr, typeBytes, relFlag); \ 2088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang} 2098352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 2108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 211c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringToUTF8 { 212c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic: 213c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) { 214c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fCStr = env->GetStringUTFChars(str, NULL); 215c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fLength = env->GetStringUTFLength(str); 216c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 217c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main ~AutoJavaStringToUTF8() { 218c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fEnv->ReleaseStringUTFChars(fJStr, fCStr); 219c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 220c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char* c_str() const { return fCStr; } 221c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize length() const { return fLength; } 222c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 223c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate: 224c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv* fEnv; 225c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring fJStr; 226c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char* fCStr; 227c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize fLength; 228c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 229c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 230c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringArrayToUTF8 { 231c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic: 232c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength) 233c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main : mEnv(env), mStrings(strings), mStringsLength(stringsLength) { 234c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings = NULL; 235c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray = NULL; 236c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (stringsLength > 0) { 237c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings = (const char **)calloc(stringsLength, sizeof(char *)); 238c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t)); 239c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main for (jsize ct = 0; ct < stringsLength; ct ++) { 240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL); 242c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray[ct] = mEnv->GetStringUTFLength(s); 243c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 244c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 245c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 246c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main ~AutoJavaStringArrayToUTF8() { 247c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main for (jsize ct=0; ct < mStringsLength; ct++) { 248c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 249c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mEnv->ReleaseStringUTFChars(s, mCStrings[ct]); 250c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 251c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(mCStrings); 252c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(mSizeArray); 253c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 254c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **c_str() const { return mCStrings; } 255c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *c_str_len() const { return mSizeArray; } 256c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize length() const { return mStringsLength; } 257c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 258c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate: 259c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv *mEnv; 260c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jobjectArray mStrings; 261c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **mCStrings; 262c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *mSizeArray; 263c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize mStringsLength; 264c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 265c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 266470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 267470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang// --------------------------------------------------------------------------- 268470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic dispatchTable dispatchTab; 2696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Incremental Support lib 2706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic dispatchTable dispatchTabInc; 271470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 272e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wangstatic jboolean nLoadSO(JNIEnv *_env, jobject _this, jboolean useNative, jint targetApi) { 273470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang void* handle = NULL; 274470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang if (useNative) { 275470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang handle = dlopen("libRS.so", RTLD_LAZY | RTLD_LOCAL); 276470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } else { 277470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL); 278470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 279470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang if (handle == NULL) { 280470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang LOG_API("couldn't dlopen %s, %s", filename, dlerror()); 281470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return false; 282470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 283470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 284e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wang if (loadSymbols(handle, dispatchTab, targetApi) == false) { 285470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang LOG_API("%s init failed!", filename); 286470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return false; 287470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 288470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang LOG_API("Successfully loaded %s", filename); 289470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return true; 290470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang} 291470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 292dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic ioSuppDT ioDispatch; 293dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic jboolean nLoadIOSO(JNIEnv *_env, jobject _this) { 294dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang void* handleIO = NULL; 295dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang handleIO = dlopen("libRSSupportIO.so", RTLD_LAZY | RTLD_LOCAL); 296dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang if (handleIO == NULL) { 297dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang LOG_API("Couldn't load libRSSupportIO.so"); 298dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return false; 299dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang } 300dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang if (loadIOSuppSyms(handleIO, ioDispatch) == false) { 301dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang LOG_API("libRSSupportIO init failed!"); 302dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return false; 303dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang } 304dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return true; 305dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 306ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 307c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 308c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 3092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wangstatic void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) { 3102e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytesPad = mSize * 4; 3112e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytes = mSize * 3; 3122e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 3132e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 3142e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang for (int i = 0; i < count; i++) { 3152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang memcpy(dst, src, sizeBytes); 3162e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang dst += sizeBytesPad; 3172e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang src += sizeBytes; 3182e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } 3192e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang} 3202e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3212e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wangstatic void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) { 3222e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytesPad = mSize * 4; 3232e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytes = mSize * 3; 3242e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 3252e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 3262e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang for (int i = 0; i < count; i++) { 3272e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang memcpy(dst, src, sizeBytes); 3282e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang dst += sizeBytes; 3292e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang src += sizeBytesPad; 3302e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } 3312e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang} 3322e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3332e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3342e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang// --------------------------------------------------------------------------- 3352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 336c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 337bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextFinish(JNIEnv *_env, jobject _this, jlong con) 338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 339bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextFinish, con(%p)", (RsContext)con); 340bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextFinish((RsContext)con); 341c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 342c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 343936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic jlong 344936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID, 345936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong returnValue, jlongArray fieldIDArray, 346936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlongArray valueArray, jintArray sizeArray, 347936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlongArray depClosureArray, jlongArray depFieldIDArray) { 348d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong ret = 0; 349d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 350936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 351936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 352d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 353d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 354d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 355d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 356d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jDepClosures = 357d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->GetLongArrayElements(depClosureArray, nullptr); 358d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize depClosures_length = _env->GetArrayLength(depClosureArray); 359d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jDepFieldIDs = 360d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->GetLongArrayElements(depFieldIDArray, nullptr); 361d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray); 362d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 363d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni size_t numValues, numDependencies; 364d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsScriptFieldID* fieldIDs; 365d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni uintptr_t* values; 366d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsClosure* depClosures; 367d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsScriptFieldID* depFieldIDs; 368d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 369d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 370d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Unmatched field IDs, values, and sizes in closure creation."); 371d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 372d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 373d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 374d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni numValues = (size_t)fieldIDs_length; 375d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 376d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (depClosures_length != depFieldIDs_length) { 377d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Unmatched closures and field IDs for dependencies in closure creation."); 378d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 379d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 380d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 381d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni numDependencies = (size_t)depClosures_length; 382d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 383d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numDependencies > numValues) { 384d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Unexpected number of dependencies in closure creation"); 385d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 386d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 387d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 388d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 389d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Too many arguments or globals in closure creation"); 390d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 391d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 392d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 393d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 394d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs == nullptr) { 395d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 396d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 397d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 398d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numValues; i++) { 399936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 400936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 401936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 402d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni values = (uintptr_t*)alloca(sizeof(uintptr_t) * numValues); 403d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (values == nullptr) { 404d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 405d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 406d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 407d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numValues; i++) { 408936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni values[i] = (uintptr_t)jValues[i]; 409936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 410936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 411d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies); 412d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (depClosures == nullptr) { 413d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 414d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 415936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 416d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numDependencies; i++) { 417936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni depClosures[i] = (RsClosure)jDepClosures[i]; 418936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 419936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 420d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni depFieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numDependencies); 421d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (depFieldIDs == nullptr) { 422d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 423d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 424d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 425d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numDependencies; i++) { 426936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni depFieldIDs[i] = (RsClosure)jDepFieldIDs[i]; 427936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 428936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 429d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni ret = (jlong)(uintptr_t)dispatchTab.ClosureCreate( 430936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, 431d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni fieldIDs, numValues, values, numValues, 432d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni (int*)jSizes, numValues, 433d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni depClosures, numDependencies, 434d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni depFieldIDs, numDependencies); 435d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 436d454f4541683a6bddfa1d00424a71f5855675e86Yang Niexit: 437d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 438d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(depFieldIDArray, jDepFieldIDs, JNI_ABORT); 439d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(depClosureArray, jDepClosures, JNI_ABORT); 440d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 441d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 442d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 443d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 444d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni return ret; 445936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 446936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 447b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wangstatic jlong 448b1c365bfb0566142c49375f09f2b8289182f1f47Miao WangnInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID, 449b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray, 450b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jintArray sizeArray) { 451d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong ret = 0; 452d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 453b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr); 454b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jsize jParamLength = _env->GetArrayLength(paramArray); 455b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 456b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 457d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 458d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 459d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 460d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 461d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 462d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni size_t numValues; 463d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsScriptFieldID* fieldIDs; 464d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni uintptr_t* values; 465d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 466d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 467d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Unmatched field IDs, values, and sizes in closure creation."); 468d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 469d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 470d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 471d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni numValues = (size_t) fieldIDs_length; 472d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 473d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 474d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Too many arguments or globals in closure creation"); 475d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 476d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 477d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 478d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 479d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs == nullptr) { 480d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 481d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 482d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 483d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numValues; i++) { 484b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 485b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang } 486b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 487d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni values = (uintptr_t*)alloca(sizeof(uintptr_t) * numValues); 488d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (values == nullptr) { 489d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 490b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang } 491b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 492d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numValues; i++) { 493d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni values[i] = (uintptr_t)jValues[i]; 494d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 495b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 496d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni ret = (jlong)(uintptr_t)dispatchTab.InvokeClosureCreate( 497b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, 498d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni fieldIDs, numValues, values, numValues, 499d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni (int*)jSizes, numValues); 500d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 501d454f4541683a6bddfa1d00424a71f5855675e86Yang Niexit: 502d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 503d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 504d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 505d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 506d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseByteArrayElements(paramArray, jParams, JNI_ABORT); 507d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 508d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni return ret; 509b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang} 510b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 511936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void 512936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 513936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jint index, jlong value, jint size) { 514b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang dispatchTab.ClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, 515b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (uintptr_t)value, (size_t)size); 516936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 517936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 518936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void 519936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 520936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong fieldID, jlong value, jint size) { 521936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni dispatchTab.ClosureSetGlobal((RsContext)con, (RsClosure)closureID, 522b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (RsScriptFieldID)fieldID, (uintptr_t)value, (size_t)size); 523936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 524936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 525936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic long 526e68c5973af1e80c77cab9aea0b77f46a801aef96Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, jstring name, 527b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jstring cacheDir, jlongArray closureArray) { 528d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong ret = 0; 529d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 530e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni AutoJavaStringToUTF8 nameUTF(_env, name); 531b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 532b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 533936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 534936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 535d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 536d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsClosure* closures; 537d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 538d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numClosures > (jsize) RS_SCRIPT_GROUP_MAX_NUMBER_CLOSURES) { 539d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Too many closures in script group"); 540d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 541d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 542d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 543d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 544d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (closures == nullptr) { 545d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 546d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 547d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 548936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni for (int i = 0; i < numClosures; i++) { 549936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni closures[i] = (RsClosure)jClosures[i]; 550936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 551936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 552d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni ret = (jlong)(uintptr_t)dispatchTab.ScriptGroup2Create( 553e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni (RsContext)con, nameUTF.c_str(), nameUTF.length(), 554e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni cacheDirUTF.c_str(), cacheDirUTF.length(), 555b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang closures, numClosures); 556d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 557d454f4541683a6bddfa1d00424a71f5855675e86Yang Niexit: 558d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 559d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(closureArray, jClosures, JNI_ABORT); 560d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 561d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni return ret; 562b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang} 563b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 564b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wangstatic void 565b1c365bfb0566142c49375f09f2b8289182f1f47Miao WangnScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 566b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 567936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 568936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 569c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 570bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 571c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 572bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 573bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ObjDestroy((RsContext)con, (void *)obj); 574c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 575c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 5768919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 5778919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic void 5788919a441f977cb787d244aa42cc2d4dda1cbfa11Miao WangnScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA, 5798919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 5808919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY, 5818919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint KL, jint KU, jboolean mUseInc) { 5828919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsBlasCall call; 5838919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang memset(&call, 0, sizeof(call)); 5848919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.func = (RsBlasFunction)func; 5858919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transA = (RsBlasTranspose)TransA; 5868919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transB = (RsBlasTranspose)TransB; 5878919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.side = (RsBlasSide)Side; 5888919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.uplo = (RsBlasUplo)Uplo; 5898919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.diag = (RsBlasDiag)Diag; 5908919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.M = M; 5918919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.N = N; 5928919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.K = K; 5938919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.f = alpha; 5948919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.f = beta; 5958919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incX = incX; 5968919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incY = incY; 5978919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KL = KL; 5988919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KU = KU; 5998919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6008919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsAllocation in_allocs[3]; 6018919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[0] = (RsAllocation)A; 6028919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[1] = (RsAllocation)B; 6038919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[2] = (RsAllocation)C; 6048919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6058919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang if (mUseInc) { 6068919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ContextFinish((RsContext)con); 6078919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0, 6081e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6098919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6108919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } else { 6118919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0, 6121e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6138919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6148919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } 6158919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang} 6168919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6178919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic void 6188919a441f977cb787d244aa42cc2d4dda1cbfa11Miao WangnScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA, 6198919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 6208919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY, 6218919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint KL, jint KU, jboolean mUseInc) { 6228919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsBlasCall call; 6238919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang memset(&call, 0, sizeof(call)); 6248919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.func = (RsBlasFunction)func; 6258919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transA = (RsBlasTranspose)TransA; 6268919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transB = (RsBlasTranspose)TransB; 6278919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.side = (RsBlasSide)Side; 6288919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.uplo = (RsBlasUplo)Uplo; 6298919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.diag = (RsBlasDiag)Diag; 6308919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.M = M; 6318919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.N = N; 6328919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.K = K; 6338919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.d = alpha; 6348919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.d = beta; 6358919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incX = incX; 6368919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incY = incY; 6378919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KL = KL; 6388919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KU = KU; 6398919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6408919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsAllocation in_allocs[3]; 6418919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[0] = (RsAllocation)A; 6428919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[1] = (RsAllocation)B; 6438919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[2] = (RsAllocation)C; 6448919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6458919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang if (mUseInc) { 6468919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ContextFinish((RsContext)con); 6478919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0, 6481e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6498919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6508919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } else { 6518919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0, 6521e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6538919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6548919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } 6558919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang} 6568919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6578919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic void 6588919a441f977cb787d244aa42cc2d4dda1cbfa11Miao WangnScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA, 6598919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 6608919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX, 6618919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU, jboolean mUseInc) { 6628919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsBlasCall call; 6638919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang memset(&call, 0, sizeof(call)); 6648919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.func = (RsBlasFunction)func; 6658919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transA = (RsBlasTranspose)TransA; 6668919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transB = (RsBlasTranspose)TransB; 6678919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.side = (RsBlasSide)Side; 6688919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.uplo = (RsBlasUplo)Uplo; 6698919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.diag = (RsBlasDiag)Diag; 6708919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.M = M; 6718919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.N = N; 6728919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.K = K; 6738919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.c.r = alphaX; 6748919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.c.i = alphaY; 6758919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.c.r = betaX; 6768919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.c.i = betaY; 6778919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incX = incX; 6788919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incY = incY; 6798919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KL = KL; 6808919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KU = KU; 6818919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6828919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsAllocation in_allocs[3]; 6838919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[0] = (RsAllocation)A; 6848919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[1] = (RsAllocation)B; 6858919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[2] = (RsAllocation)C; 6868919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6878919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6888919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang if (mUseInc) { 6898919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ContextFinish((RsContext)con); 6908919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0, 6911e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6928919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6938919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } else { 6948919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0, 6951e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6968919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6978919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } 6988919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang} 6998919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7008919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic void 7018919a441f977cb787d244aa42cc2d4dda1cbfa11Miao WangnScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA, 7028919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 7038919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX, 7048919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU, jboolean mUseInc) { 7058919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsBlasCall call; 7068919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang memset(&call, 0, sizeof(call)); 7078919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.func = (RsBlasFunction)func; 7088919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transA = (RsBlasTranspose)TransA; 7098919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transB = (RsBlasTranspose)TransB; 7108919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.side = (RsBlasSide)Side; 7118919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.uplo = (RsBlasUplo)Uplo; 7128919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.diag = (RsBlasDiag)Diag; 7138919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.M = M; 7148919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.N = N; 7158919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.K = K; 7168919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.z.r = alphaX; 7178919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.z.i = alphaY; 7188919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.z.r = betaX; 7198919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.z.i = betaY; 7208919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incX = incX; 7218919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incY = incY; 7228919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KL = KL; 7238919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KU = KU; 7248919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7258919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsAllocation in_allocs[3]; 7268919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[0] = (RsAllocation)A; 7278919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[1] = (RsAllocation)B; 7288919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[2] = (RsAllocation)C; 7298919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7308919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7318919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang if (mUseInc) { 7328919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ContextFinish((RsContext)con); 7338919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0, 7341e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7358919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 7368919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } else { 7378919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7381e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7398919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 7408919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } 7418919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang} 7428919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7438919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7448919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic void 7458919a441f977cb787d244aa42cc2d4dda1cbfa11Miao WangnScriptIntrinsicBLAS_BNNM(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint M, jint N, jint K, 7468919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jlong A, jint a_offset, jlong B, jint b_offset, jlong C, jint c_offset, 7478919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint c_mult_int, jboolean mUseInc) { 7488919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsBlasCall call; 7498919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang memset(&call, 0, sizeof(call)); 7508919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.func = RsBlas_bnnm; 7518919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.M = M; 7528919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.N = N; 7538919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.K = K; 754341032cd8e6c1a8a8ddceccdafbf02687d0828acMiao Wang call.a_offset = a_offset & 0xFF; 755341032cd8e6c1a8a8ddceccdafbf02687d0828acMiao Wang call.b_offset = b_offset & 0xFF; 7568919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.c_offset = c_offset; 7578919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.c_mult_int = c_mult_int; 7588919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7598919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsAllocation in_allocs[3]; 7608919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[0] = (RsAllocation)A; 7618919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[1] = (RsAllocation)B; 7628919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[2] = (RsAllocation)C; 7638919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7648919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang if (mUseInc) { 7658919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ContextFinish((RsContext)con); 7668919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0, 7671e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7688919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 7698919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } else { 7708919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7711e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7728919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 7738919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } 7748919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang} 775c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 776bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 777c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceCreate(JNIEnv *_env, jobject _this) 778c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 779c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceCreate"); 780bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.DeviceCreate(); 781c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 782c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 783c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 784bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 785c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 786c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceDestroy"); 787470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return dispatchTab.DeviceDestroy((RsDevice)dev); 788c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 789c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 790c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 791bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 792c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 793c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 794470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return dispatchTab.DeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 795c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 796c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 797bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 798ecccf940f72679f7602c52b0b4bcb245acdad55bMiao WangnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 799ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang jint ct, jstring nativeLibDirJava) 800c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 801c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nContextCreate"); 802ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang // Access the NativeLibDir in the Java Context. 803ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang const char * nativeLibDir = _env->GetStringUTFChars(nativeLibDirJava, JNI_FALSE); 804ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang size_t length = (size_t)_env->GetStringUTFLength(nativeLibDirJava); 805ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 806ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang jlong id = (jlong)(uintptr_t)dispatchTab.ContextCreate((RsDevice)dev, ver, 807ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang sdkVer, 808ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang (RsContextType)ct, 0); 809ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang if (dispatchTab.SetNativeLibDir) { 810ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang dispatchTab.SetNativeLibDir((RsContext)id, nativeLibDir, length); 811ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang } 812ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 813ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang _env->ReleaseStringUTFChars(nativeLibDirJava, nativeLibDir); 814ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang return id; 815c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 816c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 817c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 818c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 819bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 820c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 821bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 822bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextSetPriority((RsContext)con, p); 823c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 824c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 825c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 826c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 827c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 828bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDestroy(JNIEnv *_env, jobject _this, jlong con) 829c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 830bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 831bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextDestroy((RsContext)con); 832c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 833c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 834c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 835bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 836c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 837c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 838470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang dispatchTab.ContextDump((RsContext)con, bits); 839c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 840c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 841c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 842c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jstring 843bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 844c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 845bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con); 846c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main char buf[1024]; 847c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 848c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 849c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 850bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextGetMessage((RsContext)con, 8516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang buf, sizeof(buf), 8526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &receiveLen, sizeof(receiveLen), 8536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &subID, sizeof(subID)); 854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!id && receiveLen) { 855184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, 856184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "message receive buffer too small. %zu", receiveLen); 857c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 858c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return _env->NewStringUTF(buf); 859c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 860c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 861c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint 862bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 863c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 864c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 865bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 866c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = _env->GetIntArrayElements(data, NULL); 867c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 868c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 869bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextGetMessage((RsContext)con, 8706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len * 4, 8716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &receiveLen, sizeof(receiveLen), 8726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &subID, sizeof(subID)); 873c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!id && receiveLen) { 874184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, 875184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "message receive buffer too small. %zu", receiveLen); 876c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 877c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(data, ptr, 0); 878bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)id; 879c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 880c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 881c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint 882bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 883c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 884bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextPeekMessage, con(%p)", (RsContext)con); 885c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL); 886c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 887c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 888bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 889c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main &subID, sizeof(subID)); 890c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main auxDataPtr[0] = (jint)subID; 891c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main auxDataPtr[1] = (jint)receiveLen; 892c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 893bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)id; 894c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 895c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 896bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 897c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 898bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextInitToClient, con(%p)", (RsContext)con); 899bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextInitToClient((RsContext)con); 900c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 901c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 902bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 903c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 904bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con); 905bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextDeinitToClient((RsContext)con); 906c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 907c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 908c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 909bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 910c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 911c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = NULL; 912c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = 0; 913c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (data) { 914c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main len = _env->GetArrayLength(data); 915c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = _env->GetIntArrayElements(data, NULL); 916c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 917bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 918bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 919c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (data) { 920c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 921c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 922c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 923c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 924c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 925c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 926bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 927086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, 928086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni jboolean norm, jint size) 929c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 930bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 931bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang type, kind, norm, size); 932086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)(uintptr_t)dispatchTab.ElementCreate((RsContext)con, 933086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (RsDataType)type, 934086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (RsDataKind)kind, 935bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang norm, size); 936c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 937c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 938bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 939bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementCreate2(JNIEnv *_env, jobject _this, jlong con, 940bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 941c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 942c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main int fieldCount = _env->GetArrayLength(_ids); 943bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementCreate2, con(%p)", (RsContext)con); 944bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 945bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jIds = _env->GetLongArrayElements(_ids, NULL); 946bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL); 947c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 948bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 949bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 950bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 951bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < fieldCount; i ++) { 952bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ids[i] = (RsElement)jIds[i]; 953bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang arraySizes[i] = (uint32_t)jArraySizes[i]; 954bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 955c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 956c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 957c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 958c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **nameArray = names.c_str(); 959c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *sizeArray = names.c_str_len(); 960c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 9616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong id = (jlong)(uintptr_t)dispatchTab.ElementCreate2((RsContext)con, (RsElement *)ids, 9626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fieldCount, nameArray, 9636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fieldCount * sizeof(size_t), sizeArray, 9646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)arraySizes, fieldCount); 965c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 966bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(ids); 967bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(arraySizes); 968bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 969bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 970bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return id; 971c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 972c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 973c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 974c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 975bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 976c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 977bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 978bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _IDs, 979c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jobjectArray _names, 980c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jintArray _arraySizes) 981c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 982bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uint32_t dataSize = _env->GetArrayLength(_IDs); 983bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementGetSubElements, con(%p)", (RsContext)con); 984c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 985bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uintptr_t *ids = (uintptr_t *)malloc(dataSize * sizeof(uintptr_t)); 986c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *)); 987c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t)); 988c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 989bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 990bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)dataSize); 991c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 992bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(uint32_t i = 0; i < dataSize; i++) { 993bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang const jlong id = (jlong)(uintptr_t)ids[i]; 994bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang const jint arraySize = (jint)arraySizes[i]; 995c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 996bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->SetLongArrayRegion(_IDs, i, 1, &id); 997bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 998c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 999c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1000c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(ids); 1001c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(names); 1002c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(arraySizes); 1003c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1004c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1005c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1006c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1007bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1008bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 1009c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 1010c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1011c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 1012bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv); 1013c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1014bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 1015bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dimz, mips, faces, yuv); 1016c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1017c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1018c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1019c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1020bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1021bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 1022bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong pointer) 1023c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1024bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 1025bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 1026bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t) dispatchTab.AllocationCreateTyped((RsContext)con, (RsType)type, 1027bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mips, 1028bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)usage, (uintptr_t)pointer); 1029c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1030c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1031c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1032bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 1033c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1034bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits); 1035bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 1036c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1037c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1038c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1039bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 1040dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{ 1041bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ioDispatch.sAllocationSetSurface(_env, _this, (RsContext)con, (RsAllocation)alloc, sur, dispatchTab); 1042dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 1043dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang 1044dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void 1045bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1046dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{ 1047bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationIoSend((RsContext)con, (RsAllocation)alloc); 1048dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 1049dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang 1050dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void 1051bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1052c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1053bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 1054bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 1055c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1056c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1057c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic size_t GetBitmapSize(JNIEnv *env, jobject jbitmap) { 1058c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 1059c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 1060c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(env, jbitmap, &info); 1061c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t s = info.width * info.height; 1062c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main switch (info.format) { 1063c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGBA_8888: s *= 4; break; 1064c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGB_565: s *= 2; break; 1065c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGBA_4444: s *= 2; break; 1066c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1067c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return s; 1068c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1069c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1070bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1071bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 1072bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jobject jbitmap, jint usage) 1073c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1074bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 1075257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines void *pixels = NULL; 1076257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 1077c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1078257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (pixels != NULL) { 1079bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCreateFromBitmap((RsContext)con, 1080bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 1081bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 1082bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang pixels, 1083bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap), 1084bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang usage); 1085257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_unlockPixels(_env, jbitmap); 1086257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 1087c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 1088c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1089c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1090bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1091bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, 1092bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint mip, jobject jbitmap, jint usage) 1093c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1094bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 1095257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines void *pixels = NULL; 1096257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 1097c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1098257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (pixels != NULL) { 1099bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCreateTyped((RsContext)con, 1100bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 1101bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 1102bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)usage, 1103bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uintptr_t)pixels); 1104257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_unlockPixels(_env, jbitmap); 1105257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 1106c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 1107c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1108c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1109bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1110bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, 1111bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint mip, jobject jbitmap, jint usage) 1112c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1113c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 1114c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 1115c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1116bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 1117c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 1118bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCubeCreateFromBitmap((RsContext)con, 1119bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 1120bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 1121bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang pixels, 1122bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap), 1123bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang usage); 1124c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 1125c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1126c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 1127c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1128c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1129c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1130bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 1131c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1132c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 1133c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 1134c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(_env, jbitmap, &info); 1135c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1136c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 1137c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 1138c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1139c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 1140bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 0, 1141bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, info.width, 1142bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang info.height, pixels, GetBitmapSize(_env, jbitmap), 0); 1143c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 1144c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1145c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1146c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1147c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1148bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 1149c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1150c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 1151c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 1152c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(_env, jbitmap, &info); 1153c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1154c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 1155c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 1156c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1157c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 1158bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, pixels, 1159bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap)); 1160c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 1161c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1162c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //bitmap.notifyPixelsChanged(); 1163c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1164c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 11658352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 1166c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11678352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 11682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint count, jobject data, jint sizeBytes, jint dataType, jint mSize, 11692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jboolean usePadding) 1170c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 11718352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 11728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 11738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 11748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang dataType); 11752e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation1DData, true, 11762e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1177c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1178c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1179244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 1180c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1181244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, 1182244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 1183c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1184c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1185244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocationElementData1D, con(%p), alloc(%p), xoff(%i), comp(%i), len(%i), " 1186244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, compIdx, len, 1187244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang sizeBytes); 1188244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1189244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang dispatchTab.Allocation1DElementData((RsContext)con, (RsAllocation)alloc, xoff, 1190244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, ptr, sizeBytes, compIdx); 1191c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1192c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1193c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1194244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1195244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1196244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1197244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint xoff, jint yoff, jint zoff, 1198244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 1199244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 1200244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint len = _env->GetArrayLength(data); 1201244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 1202244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 1203244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang sizeBytes); 1204244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1205244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang dispatchTab.AllocationElementData((RsContext)con, (RsAllocation)alloc, 1206244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang xoff, yoff, zoff, 1207244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, ptr, sizeBytes, compIdx); 1208244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1209244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1210244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1211244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 12128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 1213c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12148352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 12152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize, 12162e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jboolean usePadding) 1217c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 12188352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 12198352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 12208352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 12218352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 12222e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h; 12232e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation2DData, true, 12242e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1225c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1226c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1227c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1228bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 1229bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong dstAlloc, jint dstXoff, jint dstYoff, 1230c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dstMip, jint dstFace, 1231c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint width, jint height, 1232bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong srcAlloc, jint srcXoff, jint srcYoff, 1233c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint srcMip, jint srcFace) 1234c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1235c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 1236c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " dstMip(%i), dstFace(%i), width(%i), height(%i)," 1237c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 1238bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 1239c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 1240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1241bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopy2DRange((RsContext)con, 1242bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)dstAlloc, 1243bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstXoff, dstYoff, 1244bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstMip, dstFace, 1245bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang width, height, 1246bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)srcAlloc, 1247bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcXoff, srcYoff, 1248bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcMip, srcFace); 1249c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1250c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 12518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 1252c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 12542e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType, 12552e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1256c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 12578352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 12588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 12598352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 12608352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang lod, w, h, d, sizeBytes); 12612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h * d; 12622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DData, true, 12632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1264c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1265c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1266c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1267bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 1268bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 1269c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dstMip, 1270c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint width, jint height, jint depth, 1271bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 1272c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint srcMip) 1273c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1274c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 1275c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " dstMip(%i), width(%i), height(%i)," 1276c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 1277bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 1278c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 1279c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1280bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopy3DRange((RsContext)con, 1281bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)dstAlloc, 1282bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstXoff, dstYoff, dstZoff, dstMip, 1283bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang width, height, depth, 1284bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)srcAlloc, 1285bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcXoff, srcYoff, srcZoff, srcMip); 1286bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 1287bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 12888352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1289bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void 12902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType, 12912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1292bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 12938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 12948352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 12952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = 0; 12962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.AllocationRead, false, 12972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, ptr, len * typeBytes); 1298c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1299c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 13008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1301c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 13032e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint count, jobject data, jint sizeBytes, jint dataType, 13042e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1305c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 13068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 13078352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 13088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 13092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.Allocation1DRead, false, 13102e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1311c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1312c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1313244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data. 1314244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1315244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1316244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, 1317244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint xoff, jint yoff, jint zoff, 13183bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jint lod, jint compIdx, jobject data, jint sizeBytes) 1319244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 13203bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jint len = _env->GetArrayLength(data); 13213bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang LOG_API("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 13223bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 13233bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang sizeBytes); 13243bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 13253bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang dispatchTab.AllocationElementRead((RsContext)con, (RsAllocation)alloc, 13263bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang xoff, yoff, zoff, 13273bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang lod, ptr, sizeBytes, compIdx); 13283bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1329244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1330244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1331244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 13328352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1333c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13348352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 13352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, 13362e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1337c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 13388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 13398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 13408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 13418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 13422e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h; 13432e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.Allocation2DRead, false, 13442e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1345c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1346c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1347244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1348244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1349244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1350244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 13512e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jint d, jobject data, int sizeBytes, int dataType, 13522e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1353244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 1354244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 1355244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 1356244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 1357244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, w, h, d, sizeBytes); 13582e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h * d; 13592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DRead, false, 13602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1361244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1362244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1363244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 1364bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1365bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1366c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1367bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 1368bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t) dispatchTab.AllocationGetType((RsContext)con, (RsAllocation)a); 1369c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1370c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1371c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1372bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 1373c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1374bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 1375bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc, dimX); 1376bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 1377c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1378c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1379c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1380c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1381c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot, jboolean mUseInc) 1383c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1384bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", 1385bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 13866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 13886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 13906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1391c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1392c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1393c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val, jboolean mUseInc) 1395c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1396bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, 1397bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 13986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 14006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 14026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1403c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1404c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1405c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc) 1407c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1408bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, 1409bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 14106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 14126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 14146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1415c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1416c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1417c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc) 1419c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1420bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, 1421bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 14226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 14246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 14266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1427c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1428c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1429c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val, jboolean mUseInc) 1431c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1432bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, 1433bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 14346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 14366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 14386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1439c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1440c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1441c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val, jboolean mUseInc) 1443c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1444bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, 1445bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 14466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 1448d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } else { 14496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 14506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1451c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1452c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1453c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc) 1455c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1456bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1457c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1458c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 14596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 14616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 14636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1464c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1465c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1466c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1467c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1468bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 14696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong elem, jintArray dims, jboolean mUseInc) 1470c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1471bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1472c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1473c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 1474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1475c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *dimsPtr = _env->GetIntArrayElements(dims, NULL); 14766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 14786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)dimsPtr, dimsLen); 14796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 14816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)dimsPtr, dimsLen); 14826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1483c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1484c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1485c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1486c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1487c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1488c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone, jboolean mUseInc) 1490c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1491bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", (RsContext)con, 1492bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, (const char *)timeZone); 1493c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1494c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint length = _env->GetArrayLength(timeZone); 1495c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* timeZone_ptr; 1496c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 14976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 14996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 15016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1502c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1503c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (timeZone_ptr) { 1504c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1505c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1506c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1507c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1508c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 15096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot, jboolean mUseInc) 1510c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1511bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 15126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptInvoke((RsContext)con, (RsScript)obj, slot); 15146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptInvoke((RsContext)con, (RsScript)obj, slot); 15166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1517c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1518c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1519c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 15206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc) 1521c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1522bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1523c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1524c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 15256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 15276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 15296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1530c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1531c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1532c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1533c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 15346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 15356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong script, jint slot, jlong ain, jlong aout, jboolean mUseInc) 1536c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1537bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 15386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 15406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 15416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, NULL, 0); 15436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 15456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, NULL, 0); 15476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1548c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 15495154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 1550c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 15516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 15526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong script, jint slot, jlong ain, jlong aout, jbyteArray params, jboolean mUseInc) 1553c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1554bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1555c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1556c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 15576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 15596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 15606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, NULL, 0); 15626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 15646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, NULL, 0); 15666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1567c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1568c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1569c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1570c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 15716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1572bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1573c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint xstart, jint xend, 15746f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1575c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1576bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1577c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1578c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1579c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1580c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1581c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1582c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1583c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1584c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1585c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1586c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 15876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 15896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 15906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 15926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 15946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 15966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1597c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1598c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1599c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 16006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1601bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1602c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray params, jint xstart, jint xend, 16036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1604c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1605bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1606c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1607c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 1608c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1609c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1610c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1611c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1612c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1613c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1614c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1615c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1616c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1617c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 16186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 16196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 16206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 16216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 16226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 16236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 16246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 16256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 16266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 16276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1628c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1629c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1630c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 163189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wangstatic void 163289b58238694d7d1eebaac0aa59b0bdd67a779582Miao WangnScriptForEachMulti(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 163389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jlongArray ains, jlong aout, jbyteArray params, 163489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jintArray limits) 163589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang{ 163689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 163789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 163889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint in_len = 0; 163989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jlong *in_ptr = nullptr; 164089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 164189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang RsAllocation *in_allocs = nullptr; 164289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 164389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (ains != nullptr) { 164489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_len = _env->GetArrayLength(ains); 164589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 164689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang LOG_API("Too many arguments in kernel launch."); 164789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang // TODO (b/20758983): Report back to Java and throw an exception 164889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang return; 164989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 165089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 165189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang // TODO (b/20760800): Check in_ptr is not null 165289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_ptr = _env->GetLongArrayElements(ains, nullptr); 165389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (sizeof(RsAllocation) == sizeof(jlong)) { 165489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs = (RsAllocation*)in_ptr; 165589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 165689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } else { 165789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang // Convert from 64-bit jlong types to the native pointer type. 165889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 165989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 166089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (in_allocs == nullptr) { 166189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang LOG_API("Failed launching kernel for lack of memory."); 166289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 166389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang return; 166489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 166589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 166689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang for (int index = in_len; --index >= 0;) { 166789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs[index] = (RsAllocation)in_ptr[index]; 166889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 166989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 167089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 167189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 167289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint param_len = 0; 167389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jbyte *param_ptr = nullptr; 167489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 167589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (params != nullptr) { 167689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang param_len = _env->GetArrayLength(params); 167789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang param_ptr = _env->GetByteArrayElements(params, nullptr); 167889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 167989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 168089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang RsScriptCall sc, *sca = nullptr; 168189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang uint32_t sc_size = 0; 168289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 168389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint limit_len = 0; 168489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint *limit_ptr = nullptr; 168589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 168689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (limits != nullptr) { 168789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limit_len = _env->GetArrayLength(limits); 168889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limit_ptr = _env->GetIntArrayElements(limits, nullptr); 168989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 169089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (limit_len != 6) { 169189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang LOG_API("LaunchOptions cannot be recognized."); 169289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang goto exit; 169389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 169489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 169589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.xStart = limit_ptr[0]; 169689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.xEnd = limit_ptr[1]; 169789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.yStart = limit_ptr[2]; 169889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.yEnd = limit_ptr[3]; 169989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.zStart = limit_ptr[4]; 170089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.zEnd = limit_ptr[5]; 170189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 170289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.arrayStart = 0; 170389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.arrayEnd = 0; 170489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array2Start = 0; 170589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array2End = 0; 170689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array3Start = 0; 170789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array3End = 0; 170889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array4Start = 0; 170989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array4End = 0; 171089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 171189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sca = ≻ 171289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 171389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 171489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)con, (RsScript)script, slot, 171589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs, in_len, (RsAllocation)aout, 171689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang param_ptr, param_len, sca, sc_size); 171789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 171889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wangexit: 171989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 172089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (ains != nullptr) { 172189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 172289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 172389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 172489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (params != nullptr) { 172589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT); 172689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 172789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 172889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (limits != nullptr) { 172989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 173089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 173189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang} 173289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 17335154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Walastatic void 17345154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt WalanScriptReduce(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 17355154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala jlong ain, jlong aout, jintArray limits) 17365154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala{ 17375154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala LOG_API("nScriptReduce, con(%p), s(%p), slot(%i) ain(%" PRId64 ") aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ain, aout); 17385154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17395154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala RsScriptCall sc, *sca = nullptr; 17405154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala uint32_t sc_size = 0; 17415154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17425154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala jint limit_len = 0; 17435154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala jint *limit_ptr = nullptr; 17445154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17455154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala bool limitLengthValid = true; 17465154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17475154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala // If the caller passed limits, reflect them in the RsScriptCall. 17485154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala if (limits != nullptr) { 17495154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala limit_len = _env->GetArrayLength(limits); 17505154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala limit_ptr = _env->GetIntArrayElements(limits, nullptr); 17515154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17525154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala // We expect to be passed an array [x1, x2] which specifies 17535154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala // the sub-range for a 1-dimensional reduction. 17545154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala if (limit_len == 2) { 17555154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.xStart = limit_ptr[0]; 17565154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.xEnd = limit_ptr[1]; 17575154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.yStart = 0; 17585154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.yEnd = 0; 17595154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.zStart = 0; 17605154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.zEnd = 0; 17615154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 17625154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.arrayStart = 0; 17635154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.arrayEnd = 0; 17645154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array2Start = 0; 17655154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array2End = 0; 17665154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array3Start = 0; 17675154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array3End = 0; 17685154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array4Start = 0; 17695154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array4End = 0; 17705154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17715154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sca = ≻ 17725154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc_size = sizeof(sc); 17735154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala } else { 17745154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala LOG_API("LaunchOptions cannot be recognized."); 17755154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala limitLengthValid = false; 17765154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala } 17775154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala } 17785154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17795154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala if (limitLengthValid) { 17805154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala dispatchTab.ScriptReduce((RsContext)con, (RsScript)script, slot, 17815154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala (RsAllocation)ain, (RsAllocation)aout, 17825154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sca, sc_size); 17835154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala } 17845154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17855154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala if (limits != nullptr) { 17865154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 17875154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala } 17885154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala} 17895154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 1790c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1791c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1792bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1793bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 1794c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring resName, jstring cacheDir, 1795c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray scriptRef, jint length) 1796c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1797bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCCreate, con(%p)", (RsContext)con); 1798c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1799c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 resNameUTF(_env, resName); 1800c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 1801bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong ret = 0; 1802c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* script_ptr = NULL; 1803c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint _exception = 0; 1804c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint remaining; 1805c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!scriptRef) { 1806c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1807c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 1808c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1809c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1810c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (length < 0) { 1811c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1812c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 1813c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1814c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1815c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main remaining = _env->GetArrayLength(scriptRef); 1816c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (remaining < length) { 1817c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1818c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", 1819c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main // "length > script.length - offset"); 1820c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1821c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1822c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main script_ptr = (jbyte *) 1823c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 1824c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1825c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //rsScriptCSetText(con, (const char *)script_ptr, length); 1826c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1827bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ret = (jlong)(uintptr_t)dispatchTab.ScriptCCreate((RsContext)con, 1828bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang resNameUTF.c_str(), resNameUTF.length(), 1829bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang cacheDirUTF.c_str(), cacheDirUTF.length(), 1830bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (const char *)script_ptr, length); 1831c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1832c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainexit: 1833c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (script_ptr) { 1834c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 1835c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception ? JNI_ABORT: 0); 1836c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1837c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1838bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)ret; 1839c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1840c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1841bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 18426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid, jboolean mUseInc) 1843c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1844bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid); 18456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 18466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 18476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 18486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 18496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1850c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1851c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1852bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 18536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig, jboolean mUseInc) 1854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1855bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 1856bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)sid, slot, sig); 18576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 18586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 1859d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni slot, sig); 18606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 18616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 18626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang slot, sig); 18636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1864c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1865c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1866bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1867086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 1868086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{ 1869086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni LOG_API("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con, 1870086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (void *)sid, slot); 1871086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)dispatchTab.ScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 1872086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni} 1873086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni 1874086010500c28e2bca57ea583d3f38da9a2f2f414Yang Nistatic jlong 18756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jboolean mUseInc) 1876c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1877bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot); 18786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 18796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 18806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 18816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 18826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1883c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1884c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1885bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1886bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 1887bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _dstk, jlongArray _dstf, jlongArray _types) 1888bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 1889bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con); 1890bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1891bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint kernelsLen = _env->GetArrayLength(_kernels); 1892bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 1893bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 1894bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < kernelsLen; ++i) { 1895bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 1896bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1897bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1898bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint srcLen = _env->GetArrayLength(_src); 1899bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 1900bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 1901bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < srcLen; ++i) { 1902bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 1903bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1904bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1905bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint dstkLen = _env->GetArrayLength(_dstk); 1906bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 1907bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 1908bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstkLen; ++i) { 1909bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 1910bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1911bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1912bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint dstfLen = _env->GetArrayLength(_dstf); 1913bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 1914bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 1915bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstfLen; ++i) { 1916bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 1917bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1918bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1919bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint typesLen = _env->GetArrayLength(_types); 1920bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 1921bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 1922bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < typesLen; ++i) { 1923bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang typesPtr[i] = (RsType)jTypesPtr[i]; 1924bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1925bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1926bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = (jlong)(uintptr_t) dispatchTab.ScriptGroupCreate((RsContext)con, 1927bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 1928bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 1929bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 1930bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 1931bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType *)typesPtr, typesLen * sizeof(RsType)); 1932bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1933bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(kernelsPtr); 1934bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(srcPtr); 1935bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstkPtr); 1936bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstfPtr); 1937bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(typesPtr); 1938bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 1939bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 1940bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 1941bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 1942bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 1943c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 1944c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1945c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1946c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1947bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 1948c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1949bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 1950bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 1951bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 1952bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 1953c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1954c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1955c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1956bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 1957c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1958bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 1959bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 1960bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 1961bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 1962c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1963c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1964c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1965bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 1966c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1967bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 1968bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 1969c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1970c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1971c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 1972c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1973bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1974bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 1975c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 1976c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1977bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nSamplerCreate, con(%p)", (RsContext)con); 1978bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.SamplerCreate((RsContext)con, 1979bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)magFilter, 1980bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)minFilter, 1981bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapS, 1982bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapT, 1983bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapR, 1984bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang aniso); 1985bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 1986bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1987bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jint 1988bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSystemGetPointerSize(JNIEnv *_env, jobject _this) { 1989bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)sizeof(void*); 1990c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1991c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 19926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// --------------------------------------------------------------------------- 19936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// For Incremental Intrinsic Support 19948919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic jboolean nIncLoadSO(JNIEnv *_env, jobject _this, jint deviceApi) { 19956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* handle = NULL; 19966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL); 19976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (handle == NULL) { 19986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("couldn't dlopen %s, %s", filename, dlerror()); 19996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 20006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 20016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 2002e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wang if (loadSymbols(handle, dispatchTabInc, deviceApi) == false) { 20036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("%s init failed!", filename); 20046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 20056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 200694ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang dispatchTabInc.AllocationCreateStrided = (AllocationCreateStridedFnPtr)dlsym(handle, "rsAllocationCreateStrided"); 200794ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang if (dispatchTabInc.AllocationCreateStrided == NULL) { 200894ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang LOG_API("Couldn't initialize dispatchTabInc.AllocationCreateStrided"); 200994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang return false; 201094ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang } 20116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("Successfully loaded %s", filename); 20126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return true; 20136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 20146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 20156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 20166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// To create/destroy a dummy context 20176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 20186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 20196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 20206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 20216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ObjDestroy((RsContext)con, (void *)obj); 20226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 20236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 20246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 20256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 20266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceCreate(JNIEnv *_env, jobject _this) 20276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 20286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceCreate"); 20296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.DeviceCreate(); 20306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 20316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 20326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 20336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 20346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 20356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceDestroy"); 20366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return dispatchTabInc.DeviceDestroy((RsDevice)dev); 20376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 20386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 20396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 20406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct) 20416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 20426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextCreate"); 20436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang //The compat context for incremental support will be synchronous. 20446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ContextCreate((RsDevice)dev, ver, sdkVer, 20456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsContextType)ct, 20466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_CONTEXT_SYNCHRONOUS); 20476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 20486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 20496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 20506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextFinish(JNIEnv *_env, jobject _this, jlong con) 20516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 20526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextFinish, con(%p)", (RsContext)con); 20536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextFinish((RsContext)con); 20546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 20556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 20566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 20576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextDestroy(JNIEnv *_env, jobject _this, jlong con) 20586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 20596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 20606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextDestroy((RsContext)con); 20616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 20626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 20636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 20646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Element 20656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 20666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size) 20676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 20686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 20696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang type, kind, norm, size); 20706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ElementCreate((RsContext)con, (RsDataType)type, 20716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsDataKind)kind, norm, size); 20726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 20736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 20746f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Type 20756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 20766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 20776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 20786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 20796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 20806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, eid, dimx, dimy, dimz, mips, faces, yuv); 20816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 20826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 20836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dimz, mips, faces, yuv); 20846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 20856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 20866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 20876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create Allocation from pointer 20886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 208994ded3567e0f2a567887e5d8ab896634da855a2eMiao WangnIncAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong alloc, jlong type, jint xBytesSize) 20906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 20916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 20926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, (RsElement)type, mips, usage, (void *)pointer); 20936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang size_t strideIn; 20946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* pIn = NULL; 20956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RsAllocation ainI = NULL; 20966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (alloc != 0) { 20976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang pIn = dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 20986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 20996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &strideIn, sizeof(size_t)); 210094ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang /* 210194ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * By definition stride is a roundup of xBytesSize with requiredAlignment, so requiredAlignment must 210294ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * be strictly larger than the difference of (stride - xBytesSize). 210394ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 210494ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * We can prove that as long as requiredAlignment satisfies the following two conditions, the 210594ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * memory layout will be identical : 210694ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 1. Smaller or equal than stride; 210794ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 2. Larger than minRequiredAlignment. 210894ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 210994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * In this case we can simply choose the first power of 2 that satisfies both conditions. 211094ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang */ 211194ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang size_t requiredAlignment = 16; 211294ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang size_t minRequiredAlignment = strideIn - xBytesSize; 211394ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang while (requiredAlignment <= minRequiredAlignment) { 211494ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang requiredAlignment <<= 1; 211594ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang } 211694ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang ainI = dispatchTabInc.AllocationCreateStrided((RsContext)incCon, (RsType)type, 211794ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang RS_ALLOCATION_MIPMAP_NONE, 211894ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang RS_ALLOCATION_USAGE_INCREMENTAL_SUPPORT | RS_ALLOCATION_USAGE_SHARED, 211994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang (uintptr_t)pIn, requiredAlignment); 21206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 21216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t) ainI; 21226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 2123c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 21242e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang// --------------------------------------------------------------------------- 2125c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2126bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2127c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic const char *classPathName = "android/support/v8/renderscript/RenderScript"; 2128c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2129c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic JNINativeMethod methods[] = { 21307c0de6383be18a1dae1297c54c56f3d9afbeaaadMiao Wang{"nLoadSO", "(ZI)Z", (bool*)nLoadSO }, 2131dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{"nLoadIOSO", "()Z", (bool*)nLoadIOSO }, 2132bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 2133bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 2134bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 2135bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 2136bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 2137bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 2138bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 2139bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 2140c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2141c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2142c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// All methods below are thread protected in java. 2143ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang{"rsnContextCreate", "(JIIILjava/lang/String;)J", (void*)nContextCreate }, 2144bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 2145bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 2146bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 2147bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDump", "(JI)V", (void*)nContextDump }, 2148bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 2149b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 2150b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 2151b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 2152b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 2153bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 2154bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2155bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 2156bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 2157bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 2158bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2159bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 2160bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2161bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 2162bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 2163bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 2164bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 2165bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2166bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 2167bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 2168bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2169bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 2170bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 2171bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 21722e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 2173bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D }, 2174244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang//{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 21752e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 2176bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 21772e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 2178bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 21792e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 21802e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 21813bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang//{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 21822e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 21832e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang//{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 2184bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 2185bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 2186bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 2187bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 21886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptBindAllocation", "(JJJIZ)V", (void*)nScriptBindAllocation }, 21896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetTimeZone", "(JJ[BZ)V", (void*)nScriptSetTimeZone }, 21906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvoke", "(JJIZ)V", (void*)nScriptInvoke }, 21916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvokeV", "(JJI[BZ)V", (void*)nScriptInvokeV }, 21926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJZ)V", (void*)nScriptForEach }, 21936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJ[BZ)V", (void*)nScriptForEachV }, 219489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEachMulti }, 21956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJIIIIIIZ)V", (void*)nScriptForEachClipped }, 21966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJ[BIIIIIIZ)V", (void*)nScriptForEachClippedV }, 21975154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala{"rsnScriptReduce", "(JJIJJ[I)V", (void*)nScriptReduce }, 21986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarI", "(JJIIZ)V", (void*)nScriptSetVarI }, 21996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarJ", "(JJIJZ)V", (void*)nScriptSetVarJ }, 22006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarF", "(JJIFZ)V", (void*)nScriptSetVarF }, 22016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarD", "(JJIDZ)V", (void*)nScriptSetVarD }, 22026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarV", "(JJI[BZ)V", (void*)nScriptSetVarV }, 22036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarVE", "(JJI[BJ[IZ)V", (void*)nScriptSetVarVE }, 22046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarObj", "(JJIJZ)V", (void*)nScriptSetVarObj }, 2205bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2206bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 22076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptIntrinsicCreate", "(JIJZ)J", (void*)nScriptIntrinsicCreate }, 22086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptKernelIDCreate", "(JJIIZ)J", (void*)nScriptKernelIDCreate }, 2209086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 22106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptFieldIDCreate", "(JJIZ)J", (void*)nScriptFieldIDCreate }, 2211bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 2212e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;Ljava/lang/String;[J)J", (void*)nScriptGroup2Create }, 2213bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 2214bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 2215bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 2216b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 2217bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 22188919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Single", "(JJJIIIIIIIIIFJJFJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Single }, 22198919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Double", "(JJJIIIIIIIIIDJJDJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Double }, 22208919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Complex", "(JJJIIIIIIIIIFFJJFFJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Complex }, 22218919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Z", "(JJJIIIIIIIIIDDJJDDJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Z }, 22228919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 22238919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_BNNM", "(JJJIIIJIJIJIIZ)V", (void*)nScriptIntrinsicBLAS_BNNM }, 22248919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 2225bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 2226c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2227bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 22286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 22296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Entry points for Inc libRSSupport 2230e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wang{"nIncLoadSO", "(I)Z", (bool*)nIncLoadSO }, 22316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceCreate", "()J", (void*)nIncDeviceCreate }, 22326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceDestroy", "(J)V", (void*)nIncDeviceDestroy }, 22336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextCreate", "(JIII)J", (void*)nIncContextCreate }, 22346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextFinish", "(J)V", (void*)nIncContextFinish }, 22356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextDestroy", "(J)V", (void*)nIncContextDestroy }, 22366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncObjDestroy", "(JJ)V", (void*)nIncObjDestroy }, 22376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncElementCreate", "(JJIZI)J", (void*)nIncElementCreate }, 22386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncTypeCreate", "(JJIIIZZI)J", (void*)nIncTypeCreate }, 223994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang{"rsnIncAllocationCreateTyped", "(JJJJI)J", (void*)nIncAllocationCreateTyped }, 2240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 2241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2242c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 2243c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2244c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainjint JNI_OnLoad(JavaVM* vm, void* reserved) 2245c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2246c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv* env = NULL; 2247257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines jclass clazz = NULL; 2248c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint result = -1; 2249c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2250c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 2251184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 2252184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: GetEnv failed\n"); 2253257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 2254257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 2255257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env == NULL) { 2256184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: env == NULL"); 2257257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 2258257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 2259257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines 2260257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines clazz = env->FindClass(classPathName); 2261257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (clazz == NULL) { 2262c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 2263c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 2264c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2265257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env->RegisterNatives(clazz, methods, NELEM(methods)) < 0) { 2266184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 2267184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: MediaPlayer native registration failed\n"); 2268c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 2269c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 2270c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2271c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main /* success -- return valid version number */ 2272c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main result = JNI_VERSION_1_4; 2273c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2274c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainbail: 2275c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return result; 2276c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2277