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(...) 33d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang#define LOG_ERR(...) __android_log_print(ANDROID_LOG_ERROR, "RenderScript JNI", __VA_ARGS__); 34d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang#define RS_JNI_VERSION 2301 35c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 36257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#define NELEM(m) (sizeof(m) / sizeof((m)[0])) 37c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wangtemplate <typename... T> 398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wangvoid UNUSED(T... t) {} 408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ 418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang jint len = 0; \ 428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang void *ptr = nullptr; \ 432e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang void *srcPtr = nullptr; \ 448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang size_t typeBytes = 0; \ 458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang jint relFlag = 0; \ 468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (readonly) { \ 478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \ 482e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang /* readonly = true, also indicates we are copying to the allocation . */ \ 498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang relFlag = JNI_ABORT; \ 508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } \ 518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang switch(dataType) { \ 528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_FLOAT_32: \ 538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jfloatArray)data); \ 548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \ 558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 4; \ 562e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 572e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 582e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 642e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 652e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 662e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 672e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 702e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 712e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 722e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 732e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 742e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \ 768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_FLOAT_64: \ 788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jdoubleArray)data); \ 798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \ 808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 8; \ 812e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 822e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 832e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 842e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 852e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 862e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 882e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 932e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 942e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 982e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 992e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \ 1018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_8: \ 1038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_8: \ 1048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jbyteArray)data); \ 1058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \ 1068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 1; \ 1072e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1082e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1102e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1112e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1122e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1132e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1142e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1162e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1172e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1182e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1192e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1202e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1212e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1222e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1232e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1242e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1252e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1268352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \ 1278352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1288352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_16: \ 1298352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_16: \ 1308352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jshortArray)data); \ 1318352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetShortArrayElements((jshortArray)data, flag); \ 1328352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 2; \ 1332e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1342e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1362e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1372e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1382e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1392e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1402e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1412e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1422e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1432e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1442e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1452e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1462e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1472e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1482e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1492e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1502e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1512e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \ 1538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_32: \ 1558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_32: \ 1568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jintArray)data); \ 1578352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetIntArrayElements((jintArray)data, flag); \ 1588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 4; \ 1592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1642e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1652e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1662e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1672e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1702e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1712e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1722e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1732e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1742e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1752e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1762e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1772e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \ 1798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_64: \ 1818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_64: \ 1828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jlongArray)data); \ 1838352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetLongArrayElements((jlongArray)data, flag); \ 1848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 8; \ 1852e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1862e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1882e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1932e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1942e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1982e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1992e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 2002e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 2012e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 2022e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 2032e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 2048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \ 2058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 2068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang default: \ 2078352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang break; \ 2088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } \ 2092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang UNUSED(len, ptr, srcPtr, typeBytes, relFlag); \ 2108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang} 2118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 2128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 213c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringToUTF8 { 214c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic: 215c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) { 216c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fCStr = env->GetStringUTFChars(str, NULL); 217c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fLength = env->GetStringUTFLength(str); 218c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 219c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main ~AutoJavaStringToUTF8() { 220c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fEnv->ReleaseStringUTFChars(fJStr, fCStr); 221c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 222c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char* c_str() const { return fCStr; } 223c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize length() const { return fLength; } 224c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 225c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate: 226c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv* fEnv; 227c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring fJStr; 228c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char* fCStr; 229c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize fLength; 230c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 231c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 232c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringArrayToUTF8 { 233c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic: 234c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength) 235c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main : mEnv(env), mStrings(strings), mStringsLength(stringsLength) { 236c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings = NULL; 237c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray = NULL; 238c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (stringsLength > 0) { 239c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings = (const char **)calloc(stringsLength, sizeof(char *)); 240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t)); 241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main for (jsize ct = 0; ct < stringsLength; ct ++) { 242c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 243c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL); 244c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray[ct] = mEnv->GetStringUTFLength(s); 245c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 246c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 247c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 248c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main ~AutoJavaStringArrayToUTF8() { 249c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main for (jsize ct=0; ct < mStringsLength; ct++) { 250c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 251c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mEnv->ReleaseStringUTFChars(s, mCStrings[ct]); 252c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 253c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(mCStrings); 254c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(mSizeArray); 255c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 256c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **c_str() const { return mCStrings; } 257c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *c_str_len() const { return mSizeArray; } 258c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize length() const { return mStringsLength; } 259c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 260c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate: 261c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv *mEnv; 262c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jobjectArray mStrings; 263c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **mCStrings; 264c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *mSizeArray; 265c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize mStringsLength; 266c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 267c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 268470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 269470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang// --------------------------------------------------------------------------- 270470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic dispatchTable dispatchTab; 2716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Incremental Support lib 2726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic dispatchTable dispatchTabInc; 273470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 274d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wangstatic jboolean nLoadSO(JNIEnv *_env, jobject _this, jboolean useNative, jint targetApi, jstring libPath) { 275470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang void* handle = NULL; 276470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang if (useNative) { 277470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang handle = dlopen("libRS.so", RTLD_LAZY | RTLD_LOCAL); 278470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } else { 279d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang // For API 9+, dlopen the full path of libRSSupport. 280d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang if (libPath != NULL) { 281d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang const char * libPathJni = _env->GetStringUTFChars(libPath, JNI_FALSE); 282d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang handle = dlopen(libPathJni, RTLD_LAZY | RTLD_LOCAL); 283d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang _env->ReleaseStringUTFChars(libPath, libPathJni); 284d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang } else { 285d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL); 286d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang } 287470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 288470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang if (handle == NULL) { 289d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("couldn't dlopen %s; librsjni version: %d", dlerror(), RS_JNI_VERSION); 290470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return false; 291470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 292470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 293e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wang if (loadSymbols(handle, dispatchTab, targetApi) == false) { 294d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Dispatch table init failed! librsjni version: %d", RS_JNI_VERSION); 295d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang dlclose(handle); 296470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return false; 297470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 298d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_API("Successfully loaded runtime"); 299470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return true; 300470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang} 301470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 302dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic ioSuppDT ioDispatch; 303dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic jboolean nLoadIOSO(JNIEnv *_env, jobject _this) { 304dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang void* handleIO = NULL; 305dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang handleIO = dlopen("libRSSupportIO.so", RTLD_LAZY | RTLD_LOCAL); 306dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang if (handleIO == NULL) { 307d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Couldn't load libRSSupportIO.so, librsjni version: %d", RS_JNI_VERSION); 308dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return false; 309dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang } 310dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang if (loadIOSuppSyms(handleIO, ioDispatch) == false) { 311d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("libRSSupportIO init failed! librsjni version: %d", RS_JNI_VERSION); 312dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return false; 313dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang } 314dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return true; 315dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 316ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 317c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 318c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 3192e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wangstatic void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) { 3202e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytesPad = mSize * 4; 3212e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytes = mSize * 3; 3222e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 3232e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 3242e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang for (int i = 0; i < count; i++) { 3252e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang memcpy(dst, src, sizeBytes); 3262e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang dst += sizeBytesPad; 3272e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang src += sizeBytes; 3282e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } 3292e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang} 3302e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3312e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wangstatic void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) { 3322e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytesPad = mSize * 4; 3332e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytes = mSize * 3; 3342e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 3352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 3362e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang for (int i = 0; i < count; i++) { 3372e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang memcpy(dst, src, sizeBytes); 3382e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang dst += sizeBytes; 3392e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang src += sizeBytesPad; 3402e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } 3412e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang} 3422e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3432e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3442e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang// --------------------------------------------------------------------------- 3452e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 346c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 347bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextFinish(JNIEnv *_env, jobject _this, jlong con) 348c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 349bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextFinish, con(%p)", (RsContext)con); 350bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextFinish((RsContext)con); 351c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 352c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 353936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic jlong 354936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID, 355936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong returnValue, jlongArray fieldIDArray, 356936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlongArray valueArray, jintArray sizeArray, 357936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlongArray depClosureArray, jlongArray depFieldIDArray) { 358d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong ret = 0; 359d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 360936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 361936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 362d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 363d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 364d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 365d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 366d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jDepClosures = 367d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->GetLongArrayElements(depClosureArray, nullptr); 368d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize depClosures_length = _env->GetArrayLength(depClosureArray); 369d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jDepFieldIDs = 370d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->GetLongArrayElements(depFieldIDArray, nullptr); 371d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray); 372d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 373d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni size_t numValues, numDependencies; 374d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsScriptFieldID* fieldIDs; 375d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsClosure* depClosures; 376d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsScriptFieldID* depFieldIDs; 377d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 378d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 379d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Unmatched field IDs, values, and sizes in closure creation."); 380d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 381d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 382d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 383d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni numValues = (size_t)fieldIDs_length; 384d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 385d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (depClosures_length != depFieldIDs_length) { 386d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Unmatched closures and field IDs for dependencies in closure creation."); 387d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 388d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 389d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 390d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni numDependencies = (size_t)depClosures_length; 391d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 392d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numDependencies > numValues) { 393d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Unexpected number of dependencies in closure creation"); 394d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 395d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 396d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 397d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 398d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Too many arguments or globals in closure creation"); 399d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 400d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 401d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 402e5125574a68ee6283c300732a11662d8f9945624Yang Ni if (numValues > 0) { 403e5125574a68ee6283c300732a11662d8f9945624Yang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 404e5125574a68ee6283c300732a11662d8f9945624Yang Ni if (fieldIDs == nullptr) { 405e5125574a68ee6283c300732a11662d8f9945624Yang Ni goto exit; 406e5125574a68ee6283c300732a11662d8f9945624Yang Ni } 407e5125574a68ee6283c300732a11662d8f9945624Yang Ni } else { 408e5125574a68ee6283c300732a11662d8f9945624Yang Ni // numValues == 0 409e5125574a68ee6283c300732a11662d8f9945624Yang Ni // alloca(0) implementation is platform dependent 410e5125574a68ee6283c300732a11662d8f9945624Yang Ni fieldIDs = nullptr; 411d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 412d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 413d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numValues; i++) { 414936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 415936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 416936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 417e5125574a68ee6283c300732a11662d8f9945624Yang Ni if (numDependencies > 0) { 418e5125574a68ee6283c300732a11662d8f9945624Yang Ni depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies); 419e5125574a68ee6283c300732a11662d8f9945624Yang Ni if (depClosures == nullptr) { 420e5125574a68ee6283c300732a11662d8f9945624Yang Ni goto exit; 421e5125574a68ee6283c300732a11662d8f9945624Yang Ni } 422e5125574a68ee6283c300732a11662d8f9945624Yang Ni 423e5125574a68ee6283c300732a11662d8f9945624Yang Ni for (size_t i = 0; i < numDependencies; i++) { 424e5125574a68ee6283c300732a11662d8f9945624Yang Ni depClosures[i] = (RsClosure)jDepClosures[i]; 425e5125574a68ee6283c300732a11662d8f9945624Yang Ni } 426e5125574a68ee6283c300732a11662d8f9945624Yang Ni 427e5125574a68ee6283c300732a11662d8f9945624Yang Ni depFieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numDependencies); 428e5125574a68ee6283c300732a11662d8f9945624Yang Ni if (depFieldIDs == nullptr) { 429e5125574a68ee6283c300732a11662d8f9945624Yang Ni goto exit; 430e5125574a68ee6283c300732a11662d8f9945624Yang Ni } 431e5125574a68ee6283c300732a11662d8f9945624Yang Ni 432e5125574a68ee6283c300732a11662d8f9945624Yang Ni for (size_t i = 0; i < numDependencies; i++) { 433e5125574a68ee6283c300732a11662d8f9945624Yang Ni depFieldIDs[i] = (RsClosure)jDepFieldIDs[i]; 434e5125574a68ee6283c300732a11662d8f9945624Yang Ni } 435e5125574a68ee6283c300732a11662d8f9945624Yang Ni } else { 436e5125574a68ee6283c300732a11662d8f9945624Yang Ni // numDependencies == 0 437e5125574a68ee6283c300732a11662d8f9945624Yang Ni // alloca(0) implementation is platform dependent 438e5125574a68ee6283c300732a11662d8f9945624Yang Ni depClosures = nullptr; 439e5125574a68ee6283c300732a11662d8f9945624Yang Ni depFieldIDs = nullptr; 440936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 441936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 442d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni ret = (jlong)(uintptr_t)dispatchTab.ClosureCreate( 443936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, 44475c84f43017db82b547665436e7abda2caa2a645Yang Ni fieldIDs, numValues, jValues, numValues, 445d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni (int*)jSizes, numValues, 446d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni depClosures, numDependencies, 447d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni depFieldIDs, numDependencies); 448d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 449d454f4541683a6bddfa1d00424a71f5855675e86Yang Niexit: 450d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 451d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(depFieldIDArray, jDepFieldIDs, JNI_ABORT); 452d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(depClosureArray, jDepClosures, JNI_ABORT); 453d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 454d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 455d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 456d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 457d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni return ret; 458936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 459936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 460b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wangstatic jlong 461b1c365bfb0566142c49375f09f2b8289182f1f47Miao WangnInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID, 462b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray, 463b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jintArray sizeArray) { 464d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong ret = 0; 465d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 466b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr); 467b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jsize jParamLength = _env->GetArrayLength(paramArray); 468b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 469b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 470d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 471d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 472d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 473d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 474d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 475d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni size_t numValues; 476d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsScriptFieldID* fieldIDs; 477d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 478d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 479d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Unmatched field IDs, values, and sizes in closure creation."); 480d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 481d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 482d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 483d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni numValues = (size_t) fieldIDs_length; 484d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 485d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 486d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Too many arguments or globals in closure creation"); 487d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 488d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 489d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 490d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 491d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs == nullptr) { 492d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 493d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 494d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 495d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numValues; i++) { 496b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 497b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang } 498b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 499d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni ret = (jlong)(uintptr_t)dispatchTab.InvokeClosureCreate( 500b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, 50175c84f43017db82b547665436e7abda2caa2a645Yang Ni fieldIDs, numValues, jValues, numValues, 502d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni (int*)jSizes, numValues); 503d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 504d454f4541683a6bddfa1d00424a71f5855675e86Yang Niexit: 505d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 506d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 507d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 508d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 509d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseByteArrayElements(paramArray, jParams, JNI_ABORT); 510d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 511d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni return ret; 512b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang} 513b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 514936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void 515936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 516936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jint index, jlong value, jint size) { 51775c84f43017db82b547665436e7abda2caa2a645Yang Ni // Size is signed with -1 indicating the values is an Allocation 518b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang dispatchTab.ClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, 51975c84f43017db82b547665436e7abda2caa2a645Yang Ni (uintptr_t)value, size); 520936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 521936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 522936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void 523936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 524936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong fieldID, jlong value, jint size) { 52575c84f43017db82b547665436e7abda2caa2a645Yang Ni // Size is signed with -1 indicating the values is an Allocation 526936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni dispatchTab.ClosureSetGlobal((RsContext)con, (RsClosure)closureID, 52775c84f43017db82b547665436e7abda2caa2a645Yang Ni (RsScriptFieldID)fieldID, (int64_t)value, size); 528936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 529936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 530936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic long 531e68c5973af1e80c77cab9aea0b77f46a801aef96Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, jstring name, 532b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jstring cacheDir, jlongArray closureArray) { 533d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong ret = 0; 534d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 535e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni AutoJavaStringToUTF8 nameUTF(_env, name); 536b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 537b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 538936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 539936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 540d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 541d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsClosure* closures; 542d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 543d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numClosures > (jsize) RS_SCRIPT_GROUP_MAX_NUMBER_CLOSURES) { 544d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Too many closures in script group"); 545d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 546d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 547d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 548d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 549d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (closures == nullptr) { 550d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 551d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 552d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 553936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni for (int i = 0; i < numClosures; i++) { 554936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni closures[i] = (RsClosure)jClosures[i]; 555936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 556936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 557d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni ret = (jlong)(uintptr_t)dispatchTab.ScriptGroup2Create( 558e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni (RsContext)con, nameUTF.c_str(), nameUTF.length(), 559e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni cacheDirUTF.c_str(), cacheDirUTF.length(), 560b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang closures, numClosures); 561d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 562d454f4541683a6bddfa1d00424a71f5855675e86Yang Niexit: 563d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 564d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(closureArray, jClosures, JNI_ABORT); 565d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 566d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni return ret; 567b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang} 568b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 569b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wangstatic void 570b1c365bfb0566142c49375f09f2b8289182f1f47Miao WangnScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 571b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 572936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 573936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 574c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 575bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 576c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 577bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 578bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ObjDestroy((RsContext)con, (void *)obj); 579c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 580c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 5818919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 5828919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic void 5838919a441f977cb787d244aa42cc2d4dda1cbfa11Miao WangnScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA, 5848919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 5858919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY, 5868919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint KL, jint KU, jboolean mUseInc) { 5878919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsBlasCall call; 5888919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang memset(&call, 0, sizeof(call)); 5898919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.func = (RsBlasFunction)func; 5908919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transA = (RsBlasTranspose)TransA; 5918919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transB = (RsBlasTranspose)TransB; 5928919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.side = (RsBlasSide)Side; 5938919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.uplo = (RsBlasUplo)Uplo; 5948919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.diag = (RsBlasDiag)Diag; 5958919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.M = M; 5968919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.N = N; 5978919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.K = K; 5988919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.f = alpha; 5998919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.f = beta; 6008919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incX = incX; 6018919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incY = incY; 6028919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KL = KL; 6038919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KU = KU; 6048919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6058919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsAllocation in_allocs[3]; 6068919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[0] = (RsAllocation)A; 6078919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[1] = (RsAllocation)B; 6088919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[2] = (RsAllocation)C; 6098919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6108919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang if (mUseInc) { 6118919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ContextFinish((RsContext)con); 6128919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0, 6131e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6148919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6158919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } else { 6168919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0, 6171e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6188919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6198919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } 6208919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang} 6218919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6228919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic void 6238919a441f977cb787d244aa42cc2d4dda1cbfa11Miao WangnScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA, 6248919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 6258919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY, 6268919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint KL, jint KU, jboolean mUseInc) { 6278919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsBlasCall call; 6288919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang memset(&call, 0, sizeof(call)); 6298919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.func = (RsBlasFunction)func; 6308919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transA = (RsBlasTranspose)TransA; 6318919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transB = (RsBlasTranspose)TransB; 6328919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.side = (RsBlasSide)Side; 6338919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.uplo = (RsBlasUplo)Uplo; 6348919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.diag = (RsBlasDiag)Diag; 6358919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.M = M; 6368919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.N = N; 6378919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.K = K; 6388919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.d = alpha; 6398919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.d = beta; 6408919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incX = incX; 6418919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incY = incY; 6428919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KL = KL; 6438919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KU = KU; 6448919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6458919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsAllocation in_allocs[3]; 6468919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[0] = (RsAllocation)A; 6478919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[1] = (RsAllocation)B; 6488919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[2] = (RsAllocation)C; 6498919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6508919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang if (mUseInc) { 6518919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ContextFinish((RsContext)con); 6528919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0, 6531e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6548919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6558919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } else { 6568919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0, 6571e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6588919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6598919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } 6608919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang} 6618919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6628919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic void 6638919a441f977cb787d244aa42cc2d4dda1cbfa11Miao WangnScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA, 6648919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 6658919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX, 6668919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU, jboolean mUseInc) { 6678919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsBlasCall call; 6688919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang memset(&call, 0, sizeof(call)); 6698919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.func = (RsBlasFunction)func; 6708919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transA = (RsBlasTranspose)TransA; 6718919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transB = (RsBlasTranspose)TransB; 6728919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.side = (RsBlasSide)Side; 6738919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.uplo = (RsBlasUplo)Uplo; 6748919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.diag = (RsBlasDiag)Diag; 6758919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.M = M; 6768919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.N = N; 6778919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.K = K; 6788919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.c.r = alphaX; 6798919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.c.i = alphaY; 6808919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.c.r = betaX; 6818919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.c.i = betaY; 6828919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incX = incX; 6838919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incY = incY; 6848919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KL = KL; 6858919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KU = KU; 6868919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6878919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsAllocation in_allocs[3]; 6888919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[0] = (RsAllocation)A; 6898919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[1] = (RsAllocation)B; 6908919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[2] = (RsAllocation)C; 6918919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6928919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 6938919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang if (mUseInc) { 6948919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ContextFinish((RsContext)con); 6958919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0, 6961e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 6978919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 6988919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } else { 6998919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7001e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7018919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 7028919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } 7038919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang} 7048919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7058919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic void 7068919a441f977cb787d244aa42cc2d4dda1cbfa11Miao WangnScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint func, jint TransA, 7078919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 7088919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX, 7098919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU, jboolean mUseInc) { 7108919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsBlasCall call; 7118919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang memset(&call, 0, sizeof(call)); 7128919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.func = (RsBlasFunction)func; 7138919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transA = (RsBlasTranspose)TransA; 7148919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.transB = (RsBlasTranspose)TransB; 7158919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.side = (RsBlasSide)Side; 7168919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.uplo = (RsBlasUplo)Uplo; 7178919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.diag = (RsBlasDiag)Diag; 7188919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.M = M; 7198919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.N = N; 7208919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.K = K; 7218919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.z.r = alphaX; 7228919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.alpha.z.i = alphaY; 7238919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.z.r = betaX; 7248919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.beta.z.i = betaY; 7258919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incX = incX; 7268919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.incY = incY; 7278919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KL = KL; 7288919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.KU = KU; 7298919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7308919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsAllocation in_allocs[3]; 7318919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[0] = (RsAllocation)A; 7328919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[1] = (RsAllocation)B; 7338919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[2] = (RsAllocation)C; 7348919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7358919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7368919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang if (mUseInc) { 7378919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ContextFinish((RsContext)con); 7388919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0, 7391e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7408919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 7418919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } else { 7428919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7431e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7448919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 7458919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } 7468919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang} 7478919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7488919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7498919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wangstatic void 7508919a441f977cb787d244aa42cc2d4dda1cbfa11Miao WangnScriptIntrinsicBLAS_BNNM(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong id, jint M, jint N, jint K, 7518919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jlong A, jint a_offset, jlong B, jint b_offset, jlong C, jint c_offset, 7528919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang jint c_mult_int, jboolean mUseInc) { 7538919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsBlasCall call; 7548919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang memset(&call, 0, sizeof(call)); 7558919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.func = RsBlas_bnnm; 7568919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.M = M; 7578919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.N = N; 7588919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.K = K; 759341032cd8e6c1a8a8ddceccdafbf02687d0828acMiao Wang call.a_offset = a_offset & 0xFF; 760341032cd8e6c1a8a8ddceccdafbf02687d0828acMiao Wang call.b_offset = b_offset & 0xFF; 7618919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.c_offset = c_offset; 7628919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang call.c_mult_int = c_mult_int; 7638919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7648919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang RsAllocation in_allocs[3]; 7658919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[0] = (RsAllocation)A; 7668919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[1] = (RsAllocation)B; 7678919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang in_allocs[2] = (RsAllocation)C; 7688919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 7698919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang if (mUseInc) { 7708919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ContextFinish((RsContext)con); 7718919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)incCon, (RsScript)id, 0, 7721e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7738919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 7748919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } else { 7758919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7761e46e4458cd167070301ecbc81ceea73c49eb0f6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7778919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang &call, sizeof(call), nullptr, 0); 7788919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang } 7798919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang} 780c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 781bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 782c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceCreate(JNIEnv *_env, jobject _this) 783c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 784c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceCreate"); 785bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.DeviceCreate(); 786c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 787c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 788c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 789bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 790c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 791c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceDestroy"); 792470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return dispatchTab.DeviceDestroy((RsDevice)dev); 793c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 794c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 795c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 796bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 797c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 798c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 799470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return dispatchTab.DeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 800c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 801c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 802bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 803ecccf940f72679f7602c52b0b4bcb245acdad55bMiao WangnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 804ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang jint ct, jstring nativeLibDirJava) 805c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 806c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nContextCreate"); 807ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang // Access the NativeLibDir in the Java Context. 808ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang const char * nativeLibDir = _env->GetStringUTFChars(nativeLibDirJava, JNI_FALSE); 809ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang size_t length = (size_t)_env->GetStringUTFLength(nativeLibDirJava); 810ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 811ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang jlong id = (jlong)(uintptr_t)dispatchTab.ContextCreate((RsDevice)dev, ver, 812ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang sdkVer, 813ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang (RsContextType)ct, 0); 814ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang if (dispatchTab.SetNativeLibDir) { 815ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang dispatchTab.SetNativeLibDir((RsContext)id, nativeLibDir, length); 816ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang } 817ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 818ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang _env->ReleaseStringUTFChars(nativeLibDirJava, nativeLibDir); 819ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang return id; 820c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 821c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 822c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 823c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 824bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 825c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 826bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 827bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextSetPriority((RsContext)con, p); 828c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 829c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 830c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 831c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 832c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 833bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDestroy(JNIEnv *_env, jobject _this, jlong con) 834c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 835bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 836bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextDestroy((RsContext)con); 837c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 838c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 839c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 840bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 841c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 842c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 843470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang dispatchTab.ContextDump((RsContext)con, bits); 844c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 845c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 846c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 847c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jstring 848bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 849c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 850bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con); 851c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main char buf[1024]; 852c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 853c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 855bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextGetMessage((RsContext)con, 8566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang buf, sizeof(buf), 8576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &receiveLen, sizeof(receiveLen), 8586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &subID, sizeof(subID)); 859c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!id && receiveLen) { 860184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, 861184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "message receive buffer too small. %zu", receiveLen); 862c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 863c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return _env->NewStringUTF(buf); 864c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 865c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 866c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint 867bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 868c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 869c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 870bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 871c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = _env->GetIntArrayElements(data, NULL); 872c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 873c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 874bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextGetMessage((RsContext)con, 8756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len * 4, 8766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &receiveLen, sizeof(receiveLen), 8776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &subID, sizeof(subID)); 878c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!id && receiveLen) { 879184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, 880184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "message receive buffer too small. %zu", receiveLen); 881c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 882c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(data, ptr, 0); 883bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)id; 884c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 885c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 886c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint 887bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 888c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 889bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextPeekMessage, con(%p)", (RsContext)con); 890c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL); 891c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 892c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 893bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 894c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main &subID, sizeof(subID)); 895c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main auxDataPtr[0] = (jint)subID; 896c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main auxDataPtr[1] = (jint)receiveLen; 897c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 898bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)id; 899c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 900c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 901bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 902c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 903bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextInitToClient, con(%p)", (RsContext)con); 904bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextInitToClient((RsContext)con); 905c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 906c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 907bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 908c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 909bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con); 910bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextDeinitToClient((RsContext)con); 911c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 912c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 913c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 914bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 915c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 916c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = NULL; 917c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = 0; 918c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (data) { 919c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main len = _env->GetArrayLength(data); 92038ac0d48403bd7e46bd32de0285e1de4c93afc74Miao Wang ptr = _env->GetIntArrayElements(data, NULL); 921c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 922bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 923bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 924c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (data) { 925c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 926c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 927c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 928c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 929c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 930c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 931bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 932086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, 933086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni jboolean norm, jint size) 934c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 935bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 936bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang type, kind, norm, size); 937086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)(uintptr_t)dispatchTab.ElementCreate((RsContext)con, 938086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (RsDataType)type, 939086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (RsDataKind)kind, 940bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang norm, size); 941c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 942c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 943bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 944bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementCreate2(JNIEnv *_env, jobject _this, jlong con, 945bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 946c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 947c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main int fieldCount = _env->GetArrayLength(_ids); 948bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementCreate2, con(%p)", (RsContext)con); 949bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 950bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jIds = _env->GetLongArrayElements(_ids, NULL); 951bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL); 952c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 953bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 954bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 955bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 956bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < fieldCount; i ++) { 957bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ids[i] = (RsElement)jIds[i]; 958bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang arraySizes[i] = (uint32_t)jArraySizes[i]; 959bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 960c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 961c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 962c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 963c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **nameArray = names.c_str(); 964c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *sizeArray = names.c_str_len(); 965c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 9666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong id = (jlong)(uintptr_t)dispatchTab.ElementCreate2((RsContext)con, (RsElement *)ids, 9676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fieldCount, nameArray, 9686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fieldCount * sizeof(size_t), sizeArray, 9696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)arraySizes, fieldCount); 970c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 971bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(ids); 972bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(arraySizes); 973bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 974bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 975bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return id; 976c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 977c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 978c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 979c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 980bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 981c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 982bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 983bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _IDs, 984c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jobjectArray _names, 985c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jintArray _arraySizes) 986c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 987bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uint32_t dataSize = _env->GetArrayLength(_IDs); 988bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementGetSubElements, con(%p)", (RsContext)con); 989c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 990bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uintptr_t *ids = (uintptr_t *)malloc(dataSize * sizeof(uintptr_t)); 991c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *)); 992c020bdd35e30a0478c1d642a64abb26ccd1d372cMiao Wang size_t *arraySizes = (size_t *)malloc(dataSize * sizeof(size_t)); 993c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 994bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 995bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)dataSize); 996c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 997bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(uint32_t i = 0; i < dataSize; i++) { 998bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang const jlong id = (jlong)(uintptr_t)ids[i]; 999bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang const jint arraySize = (jint)arraySizes[i]; 1000c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 1001bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->SetLongArrayRegion(_IDs, i, 1, &id); 1002bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 1003c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1004c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1005c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(ids); 1006c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(names); 1007c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(arraySizes); 1008c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1009c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1010c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1011c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1012bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1013bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 1014c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 1015c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1016c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 1017bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv); 1018c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1019bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 1020bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dimz, mips, faces, yuv); 1021c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1022c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1023c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1024c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1025bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1026bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 1027bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong pointer) 1028c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1029bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 1030bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 1031bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t) dispatchTab.AllocationCreateTyped((RsContext)con, (RsType)type, 1032bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mips, 1033bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)usage, (uintptr_t)pointer); 1034c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1035c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1036c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1037bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 1038c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1039bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits); 1040bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 1041c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1042c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1043c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1044bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 1045dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{ 1046bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ioDispatch.sAllocationSetSurface(_env, _this, (RsContext)con, (RsAllocation)alloc, sur, dispatchTab); 1047dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 1048dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang 1049dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void 1050bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1051dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{ 1052bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationIoSend((RsContext)con, (RsAllocation)alloc); 1053dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 1054dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang 1055dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void 1056bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1057c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1058bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 1059bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 1060c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1061c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1062c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic size_t GetBitmapSize(JNIEnv *env, jobject jbitmap) { 1063c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 1064c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 1065c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(env, jbitmap, &info); 1066c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t s = info.width * info.height; 1067c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main switch (info.format) { 1068c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGBA_8888: s *= 4; break; 1069c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGB_565: s *= 2; break; 1070c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGBA_4444: s *= 2; break; 1071c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1072c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return s; 1073c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1074c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1075bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1076bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 1077bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jobject jbitmap, jint usage) 1078c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1079bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 1080257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines void *pixels = NULL; 1081257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 1082c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1083257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (pixels != NULL) { 1084bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCreateFromBitmap((RsContext)con, 1085bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 1086bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 1087bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang pixels, 1088bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap), 1089bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang usage); 1090257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_unlockPixels(_env, jbitmap); 1091257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 1092c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 1093c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1094c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1095bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1096bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, 1097bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint mip, jobject jbitmap, jint usage) 1098c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1099bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 1100257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines void *pixels = NULL; 1101257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 1102c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1103257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (pixels != NULL) { 1104bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCreateTyped((RsContext)con, 1105bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 1106bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 1107bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)usage, 1108bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uintptr_t)pixels); 1109257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_unlockPixels(_env, jbitmap); 1110257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 1111c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 1112c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1113c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1114bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1115bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, 1116bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint mip, jobject jbitmap, jint usage) 1117c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1118c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 1119c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 1120c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1121bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 1122c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 1123bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCubeCreateFromBitmap((RsContext)con, 1124bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 1125bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 1126bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang pixels, 1127bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap), 1128bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang usage); 1129c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 1130c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1131c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 1132c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1133c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1134c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1135bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 1136c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1137c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 1138c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 1139c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(_env, jbitmap, &info); 1140c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1141c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 1142c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 1143c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1144c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 1145bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 0, 1146bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, info.width, 1147bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang info.height, pixels, GetBitmapSize(_env, jbitmap), 0); 1148c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 1149c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1150c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1151c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1152c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1153bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 1154c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1155c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 1156c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 1157c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(_env, jbitmap, &info); 1158c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1159c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 1160c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 1161c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1162c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 1163bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, pixels, 1164bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap)); 1165c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 1166c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1167c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //bitmap.notifyPixelsChanged(); 1168c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1169c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 11708352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 1171c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 11732e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint count, jobject data, jint sizeBytes, jint dataType, jint mSize, 11742e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jboolean usePadding) 1175c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 11768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 11778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 11788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 11798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang dataType); 11802e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation1DData, true, 11812e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1182c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1183c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1184244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 1185c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1186244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, 1187244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 1188c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1189244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocationElementData1D, con(%p), alloc(%p), xoff(%i), comp(%i), len(%i), " 1190e5125574a68ee6283c300732a11662d8f9945624Yang Ni "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, compIdx, 1191e5125574a68ee6283c300732a11662d8f9945624Yang Ni _env->GetArrayLength(data), 1192244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang sizeBytes); 1193244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1194244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang dispatchTab.Allocation1DElementData((RsContext)con, (RsAllocation)alloc, xoff, 1195244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, ptr, sizeBytes, compIdx); 1196c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1197c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1198c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1199244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1200244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1201244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1202244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint xoff, jint yoff, jint zoff, 1203244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 1204244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 1205244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint len = _env->GetArrayLength(data); 1206244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 1207244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 1208244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang sizeBytes); 1209244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1210244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang dispatchTab.AllocationElementData((RsContext)con, (RsAllocation)alloc, 1211244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang xoff, yoff, zoff, 1212244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, ptr, sizeBytes, compIdx); 1213244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1214244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1215244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1216244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 12178352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 1218c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12198352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 12202e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize, 12212e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jboolean usePadding) 1222c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 12238352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 12248352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 12258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 12268352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 12272e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h; 12282e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation2DData, true, 12292e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1230c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1231c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1232c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1233bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 1234bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong dstAlloc, jint dstXoff, jint dstYoff, 1235c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dstMip, jint dstFace, 1236c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint width, jint height, 1237bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong srcAlloc, jint srcXoff, jint srcYoff, 1238c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint srcMip, jint srcFace) 1239c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 1241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " dstMip(%i), dstFace(%i), width(%i), height(%i)," 1242c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 1243bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 1244c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 1245c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1246bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopy2DRange((RsContext)con, 1247bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)dstAlloc, 1248bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstXoff, dstYoff, 1249bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstMip, dstFace, 1250bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang width, height, 1251bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)srcAlloc, 1252bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcXoff, srcYoff, 1253bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcMip, srcFace); 1254c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1255c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 12568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 1257c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 12592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType, 12602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1261c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 12628352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 12638352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 12648352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 12658352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang lod, w, h, d, sizeBytes); 12662e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h * d; 12672e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DData, true, 12682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1269c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1270c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1271c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1272bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 1273bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 1274c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dstMip, 1275c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint width, jint height, jint depth, 1276bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 1277c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint srcMip) 1278c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1279c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 1280c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " dstMip(%i), width(%i), height(%i)," 1281c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 1282bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 1283c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 1284c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1285bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopy3DRange((RsContext)con, 1286bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)dstAlloc, 1287bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstXoff, dstYoff, dstZoff, dstMip, 1288bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang width, height, depth, 1289bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)srcAlloc, 1290bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcXoff, srcYoff, srcZoff, srcMip); 1291bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 1292bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 12938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1294bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void 12952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType, 12962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1297bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 12988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 12998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 13002e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = 0; 13012e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.AllocationRead, false, 13022e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, ptr, len * typeBytes); 1303c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1304c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 13058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1306c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13078352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 13082e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint count, jobject data, jint sizeBytes, jint dataType, 13092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1310c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 13118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 13128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 13138352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 13142e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.Allocation1DRead, false, 13152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1316c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1317c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1318244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data. 1319244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1320244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1321244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, 1322244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint xoff, jint yoff, jint zoff, 13233bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jint lod, jint compIdx, jobject data, jint sizeBytes) 1324244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 13253bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jint len = _env->GetArrayLength(data); 13263bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang LOG_API("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 13273bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 13283bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang sizeBytes); 13293bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 13303bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang dispatchTab.AllocationElementRead((RsContext)con, (RsAllocation)alloc, 13313bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang xoff, yoff, zoff, 13323bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang lod, ptr, sizeBytes, compIdx); 13333bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1334244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1335244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1336244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 13378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 13402e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, 13412e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1342c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 13438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 13448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 13458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 13468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 13472e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h; 13482e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.Allocation2DRead, false, 13492e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1350c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1351c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1352244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1353244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1354244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1355244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 13562e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jint d, jobject data, int sizeBytes, int dataType, 13572e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1358244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 1359244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 1360244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 1361244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 1362244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, w, h, d, sizeBytes); 13632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h * d; 13642e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DRead, false, 13652e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1366244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1367244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1368244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 1369bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1370bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1371c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1372bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 1373bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t) dispatchTab.AllocationGetType((RsContext)con, (RsAllocation)a); 1374c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1375c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1376c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1377bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 1378c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1379bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 1380bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc, dimX); 1381bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 1382c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1383c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1384c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1385c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1386c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot, jboolean mUseInc) 1388c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1389bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", 1390bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 13916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 13936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 13956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1396c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1397c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1398c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val, jboolean mUseInc) 1400c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1401bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, 1402bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 14036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 14056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 14076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1408c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1409c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1410c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc) 1412c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1413bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, 1414bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 14156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 14176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 14196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1420c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1421c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1422c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc) 1424c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1425bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, 1426bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 14276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 14296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 14316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1432c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1433c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1434c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val, jboolean mUseInc) 1436c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1437bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, 1438bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 14396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 14416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 14436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1444c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1445c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1446c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val, jboolean mUseInc) 1448c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1449bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, 1450bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 14516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 1453d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } else { 14546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 14556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1456c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1457c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1458c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc) 1460c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1461bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1462c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1463c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 14646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 14666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 14686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1469c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1470c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1471c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1472c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1473bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 14746f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong elem, jintArray dims, jboolean mUseInc) 1475c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1476bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1477c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1478c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 1479c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1480c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *dimsPtr = _env->GetIntArrayElements(dims, NULL); 14816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 14836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)dimsPtr, dimsLen); 14846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 14866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)dimsPtr, dimsLen); 14876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1488c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1489c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1490c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1491c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1492c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1493c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone, jboolean mUseInc) 1495c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1496bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", (RsContext)con, 1497bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, (const char *)timeZone); 1498c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1499c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint length = _env->GetArrayLength(timeZone); 1500c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* timeZone_ptr; 1501c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 15026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 15046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 15066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1507c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1508c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (timeZone_ptr) { 1509c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1510c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1511c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1512c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1513c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 15146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot, jboolean mUseInc) 1515c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1516bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 15176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptInvoke((RsContext)con, (RsScript)obj, slot); 15196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptInvoke((RsContext)con, (RsScript)obj, slot); 15216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1522c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1523c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1524c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 15256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc) 1526c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1527bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1528c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1529c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 15306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 15326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 15346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1535c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1536c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1537c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1538c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 15396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 15406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong script, jint slot, jlong ain, jlong aout, jboolean mUseInc) 1541c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1542bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 15436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 15456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 15466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, NULL, 0); 15486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 15506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, NULL, 0); 15526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1553c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 15545154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 1555c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 15566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 15576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong script, jint slot, jlong ain, jlong aout, jbyteArray params, jboolean mUseInc) 1558c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1559bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1560c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1561c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 15626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 15646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 15656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, NULL, 0); 15676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 15696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, NULL, 0); 15716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1572c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1573c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1574c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1575c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 15766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1577bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1578c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint xstart, jint xend, 15796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1580c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1581bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1582c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1583c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1584c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1585c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1586c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1587c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1588c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1589c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1590c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1591c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 1592cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array2Start = 0; 1593cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array2End = 0; 1594cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array3Start = 0; 1595cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array3End = 0; 1596cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array4Start = 0; 1597cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array4End = 0; 15986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 16006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 16016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 16026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 16036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 16046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 16056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 16066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 16076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1608c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1609c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1610c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 16116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1612bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1613c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray params, jint xstart, jint xend, 16146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1615c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1616bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1617c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1618c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 1619c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1620c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1621c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1622c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1623c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1624c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1625c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1626c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1627c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1628c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 1629cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array2Start = 0; 1630cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array2End = 0; 1631cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array3Start = 0; 1632cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array3End = 0; 1633cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array4Start = 0; 1634cf8cd79a6e480ef1b92cab2a113c1192de5d623fYang Ni sc.array4End = 0; 16356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 16366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 16376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 16386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 16396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 16406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 16416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 16426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 16436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 16446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1645c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1646c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1647c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 164889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wangstatic void 164989b58238694d7d1eebaac0aa59b0bdd67a779582Miao WangnScriptForEachMulti(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 165089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jlongArray ains, jlong aout, jbyteArray params, 165189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jintArray limits) 165289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang{ 165389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 165489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 165589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint in_len = 0; 165689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jlong *in_ptr = nullptr; 165789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 165889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang RsAllocation *in_allocs = nullptr; 165989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 166089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (ains != nullptr) { 166189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_len = _env->GetArrayLength(ains); 166289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 1663d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Too many arguments in kernel launch."); 166489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang // TODO (b/20758983): Report back to Java and throw an exception 166589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang return; 166689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 166789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 166889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang // TODO (b/20760800): Check in_ptr is not null 166989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_ptr = _env->GetLongArrayElements(ains, nullptr); 167089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (sizeof(RsAllocation) == sizeof(jlong)) { 167189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs = (RsAllocation*)in_ptr; 167289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 167389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } else { 167489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang // Convert from 64-bit jlong types to the native pointer type. 167589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 167689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 167789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (in_allocs == nullptr) { 1678d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Failed launching kernel for lack of memory."); 167989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 168089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang return; 168189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 168289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 168389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang for (int index = in_len; --index >= 0;) { 168489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs[index] = (RsAllocation)in_ptr[index]; 168589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 168689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 168789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 168889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 168989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint param_len = 0; 169089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jbyte *param_ptr = nullptr; 169189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 169289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (params != nullptr) { 169389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang param_len = _env->GetArrayLength(params); 169489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang param_ptr = _env->GetByteArrayElements(params, nullptr); 169589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 169689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 169789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang RsScriptCall sc, *sca = nullptr; 169889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang uint32_t sc_size = 0; 169989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 170089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint limit_len = 0; 170189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint *limit_ptr = nullptr; 170289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 170389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (limits != nullptr) { 170489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limit_len = _env->GetArrayLength(limits); 170589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limit_ptr = _env->GetIntArrayElements(limits, nullptr); 170689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 170789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (limit_len != 6) { 1708d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("LaunchOptions cannot be recognized."); 170989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang goto exit; 171089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 171189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 171289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.xStart = limit_ptr[0]; 171389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.xEnd = limit_ptr[1]; 171489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.yStart = limit_ptr[2]; 171589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.yEnd = limit_ptr[3]; 171689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.zStart = limit_ptr[4]; 171789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.zEnd = limit_ptr[5]; 171889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 171989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.arrayStart = 0; 172089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.arrayEnd = 0; 172189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array2Start = 0; 172289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array2End = 0; 172389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array3Start = 0; 172489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array3End = 0; 172589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array4Start = 0; 172689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array4End = 0; 172789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 172889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sca = ≻ 172989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 173089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 1731f186c5d799bf401d0384d0145f01de76a6ab6e0eMiao Wang dispatchTab.ScriptForEachMulti((RsContext)con, (RsScript)script, slot, 1732f186c5d799bf401d0384d0145f01de76a6ab6e0eMiao Wang in_allocs, in_len, (RsAllocation)aout, 1733f186c5d799bf401d0384d0145f01de76a6ab6e0eMiao Wang param_ptr, param_len, sca, sc_size); 173489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 173589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wangexit: 173689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 173789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (ains != nullptr) { 173889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 173989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 174089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 174189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (params != nullptr) { 174289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT); 174389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 174489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 174589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (limits != nullptr) { 174689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 174789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 174889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang} 174989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 17505154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Walastatic void 17515154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt WalanScriptReduce(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 17522141e9b9d98b6f4e2f4124f9b67a7819e8d40a4cDavid Gross jlongArray ains, jlong aout, jintArray limits) 17535154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala{ 17542141e9b9d98b6f4e2f4124f9b67a7819e8d40a4cDavid Gross LOG_API("nScriptReduce, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 1755043d28678b7e52ed1011286af57173c2c7bec749David Gross 1756043d28678b7e52ed1011286af57173c2c7bec749David Gross if (ains == nullptr) { 1757043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("At least one input required."); 1758043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1759043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1760043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1761043d28678b7e52ed1011286af57173c2c7bec749David Gross jint in_len = _env->GetArrayLength(ains); 1762043d28678b7e52ed1011286af57173c2c7bec749David Gross if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 1763043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("Too many arguments in kernel launch."); 1764043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1765043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1766043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1767043d28678b7e52ed1011286af57173c2c7bec749David Gross 1768043d28678b7e52ed1011286af57173c2c7bec749David Gross jlong *in_ptr = _env->GetLongArrayElements(ains, nullptr); 1769043d28678b7e52ed1011286af57173c2c7bec749David Gross if (in_ptr == nullptr) { 1770043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("Failed to get Java array elements"); 1771043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1772043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1773043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1774043d28678b7e52ed1011286af57173c2c7bec749David Gross 1775043d28678b7e52ed1011286af57173c2c7bec749David Gross RsAllocation *in_allocs = nullptr; 1776043d28678b7e52ed1011286af57173c2c7bec749David Gross if (sizeof(RsAllocation) == sizeof(jlong)) { 1777043d28678b7e52ed1011286af57173c2c7bec749David Gross in_allocs = (RsAllocation*)in_ptr; 1778043d28678b7e52ed1011286af57173c2c7bec749David Gross } else { 1779043d28678b7e52ed1011286af57173c2c7bec749David Gross // Convert from 64-bit jlong types to the native pointer type. 1780043d28678b7e52ed1011286af57173c2c7bec749David Gross 1781043d28678b7e52ed1011286af57173c2c7bec749David Gross in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 1782043d28678b7e52ed1011286af57173c2c7bec749David Gross if (in_allocs == nullptr) { 1783043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("Failed launching kernel for lack of memory."); 1784043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1785043d28678b7e52ed1011286af57173c2c7bec749David Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1786043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1787043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1788043d28678b7e52ed1011286af57173c2c7bec749David Gross 1789043d28678b7e52ed1011286af57173c2c7bec749David Gross for (int index = in_len; --index >= 0;) { 1790043d28678b7e52ed1011286af57173c2c7bec749David Gross in_allocs[index] = (RsAllocation)in_ptr[index]; 1791043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1792043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1793043d28678b7e52ed1011286af57173c2c7bec749David Gross 1794043d28678b7e52ed1011286af57173c2c7bec749David Gross RsScriptCall sc, *sca = nullptr; 1795043d28678b7e52ed1011286af57173c2c7bec749David Gross uint32_t sc_size = 0; 1796043d28678b7e52ed1011286af57173c2c7bec749David Gross 1797043d28678b7e52ed1011286af57173c2c7bec749David Gross jint limit_len = 0; 1798043d28678b7e52ed1011286af57173c2c7bec749David Gross jint *limit_ptr = nullptr; 1799043d28678b7e52ed1011286af57173c2c7bec749David Gross 1800043d28678b7e52ed1011286af57173c2c7bec749David Gross if (limits != nullptr) { 1801043d28678b7e52ed1011286af57173c2c7bec749David Gross limit_len = _env->GetArrayLength(limits); 1802043d28678b7e52ed1011286af57173c2c7bec749David Gross limit_ptr = _env->GetIntArrayElements(limits, nullptr); 1803043d28678b7e52ed1011286af57173c2c7bec749David Gross if (limit_ptr == nullptr) { 1804043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("Failed to get Java array elements"); 1805043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1806043d28678b7e52ed1011286af57173c2c7bec749David Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1807043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1808043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1809043d28678b7e52ed1011286af57173c2c7bec749David Gross 1810043d28678b7e52ed1011286af57173c2c7bec749David Gross if (limit_len != 6) { 1811043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("LaunchOptions cannot be recognized"); 1812043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1813043d28678b7e52ed1011286af57173c2c7bec749David Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1814043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1815043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1816043d28678b7e52ed1011286af57173c2c7bec749David Gross 1817043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.xStart = limit_ptr[0]; 1818043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.xEnd = limit_ptr[1]; 1819043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.yStart = limit_ptr[2]; 1820043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.yEnd = limit_ptr[3]; 1821043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.zStart = limit_ptr[4]; 1822043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.zEnd = limit_ptr[5]; 1823043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1824043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.arrayStart = 0; 1825043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.arrayEnd = 0; 1826043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array2Start = 0; 1827043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array2End = 0; 1828043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array3Start = 0; 1829043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array3End = 0; 1830043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array4Start = 0; 1831043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array4End = 0; 1832043d28678b7e52ed1011286af57173c2c7bec749David Gross 1833043d28678b7e52ed1011286af57173c2c7bec749David Gross sca = ≻ 1834043d28678b7e52ed1011286af57173c2c7bec749David Gross sc_size = sizeof(sc); 1835043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1836043d28678b7e52ed1011286af57173c2c7bec749David Gross 18372141e9b9d98b6f4e2f4124f9b67a7819e8d40a4cDavid Gross dispatchTab.ScriptReduce((RsContext)con, (RsScript)script, slot, 18382141e9b9d98b6f4e2f4124f9b67a7819e8d40a4cDavid Gross in_allocs, in_len, (RsAllocation)aout, 18392141e9b9d98b6f4e2f4124f9b67a7819e8d40a4cDavid Gross sca, sc_size); 1840043d28678b7e52ed1011286af57173c2c7bec749David Gross 1841043d28678b7e52ed1011286af57173c2c7bec749David Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1842043d28678b7e52ed1011286af57173c2c7bec749David Gross 1843043d28678b7e52ed1011286af57173c2c7bec749David Gross if (limits != nullptr) { 1844043d28678b7e52ed1011286af57173c2c7bec749David Gross _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 1845043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1846043d28678b7e52ed1011286af57173c2c7bec749David Gross} 1847043d28678b7e52ed1011286af57173c2c7bec749David Gross 1848c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1849c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1850bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1851bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 1852c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring resName, jstring cacheDir, 1853c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray scriptRef, jint length) 1854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1855bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCCreate, con(%p)", (RsContext)con); 1856c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1857c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 resNameUTF(_env, resName); 1858c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 1859bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong ret = 0; 1860c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* script_ptr = NULL; 1861c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint _exception = 0; 1862c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint remaining; 1863c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!scriptRef) { 1864c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1865c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 1866c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1867c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1868c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (length < 0) { 1869c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1870c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 1871c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1872c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1873c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main remaining = _env->GetArrayLength(scriptRef); 1874c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (remaining < length) { 1875c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1876c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", 1877c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main // "length > script.length - offset"); 1878c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1879c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1880c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main script_ptr = (jbyte *) 1881c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 1882c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1883c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //rsScriptCSetText(con, (const char *)script_ptr, length); 1884c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1885bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ret = (jlong)(uintptr_t)dispatchTab.ScriptCCreate((RsContext)con, 1886bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang resNameUTF.c_str(), resNameUTF.length(), 1887bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang cacheDirUTF.c_str(), cacheDirUTF.length(), 1888bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (const char *)script_ptr, length); 1889c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1890c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainexit: 1891c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (script_ptr) { 1892c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 1893c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception ? JNI_ABORT: 0); 1894c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1895c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1896bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)ret; 1897c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1898c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1899bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 19006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid, jboolean mUseInc) 1901c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1902bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid); 19036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 19046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 19056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 19066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 19076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1908c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1909c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1910bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 19116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig, jboolean mUseInc) 1912c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1913bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 1914bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)sid, slot, sig); 19156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 19166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 1917d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni slot, sig); 19186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 19196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 19206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang slot, sig); 19216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1922c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1923c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1924bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1925086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 1926086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{ 1927086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni LOG_API("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con, 1928086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (void *)sid, slot); 1929086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)dispatchTab.ScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 1930086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni} 1931086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni 1932086010500c28e2bca57ea583d3f38da9a2f2f414Yang Nistatic jlong 19336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jboolean mUseInc) 1934c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1935bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot); 19366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 19376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 19386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 19396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 19406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1941c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1942c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1943bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1944bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 1945bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _dstk, jlongArray _dstf, jlongArray _types) 1946bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 1947bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con); 1948bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1949cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jlong id = 0; 1950cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 1951cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang RsScriptKernelID* kernelsPtr; 1952bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint kernelsLen = _env->GetArrayLength(_kernels); 1953bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 1954cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 1955cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang RsScriptKernelID* srcPtr; 1956cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jint srcLen = _env->GetArrayLength(_src); 1957cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 1958cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 1959cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang RsScriptKernelID* dstkPtr; 1960cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jint dstkLen = _env->GetArrayLength(_dstk); 1961cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 1962cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 1963cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang RsScriptKernelID* dstfPtr; 1964cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jint dstfLen = _env->GetArrayLength(_dstf); 1965cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 1966cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 1967cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang RsType* typesPtr; 1968cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jint typesLen = _env->GetArrayLength(_types); 1969cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 1970cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 1971cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jKernelsPtr == nullptr) { 1972cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang LOG_ERR("Failed to get Java array elements: kernels"); 1973cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang goto cleanup; 1974cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 1975cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jSrcPtr == nullptr) { 1976cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang LOG_ERR("Failed to get Java array elements: src"); 1977cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang goto cleanup; 1978cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 1979cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jDstkPtr == nullptr) { 1980cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang LOG_ERR("Failed to get Java array elements: dstk"); 1981cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang goto cleanup; 1982cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 1983cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jDstfPtr == nullptr) { 1984cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang LOG_ERR("Failed to get Java array elements: dstf"); 1985cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang goto cleanup; 1986cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 1987cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jTypesPtr == nullptr) { 1988cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang LOG_ERR("Failed to get Java array elements: types"); 1989cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang goto cleanup; 1990cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 1991cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 1992cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 1993bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < kernelsLen; ++i) { 1994bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 1995bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1996bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1997cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 1998bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < srcLen; ++i) { 1999bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 2000bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 2001bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2002cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 2003bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstkLen; ++i) { 2004bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 2005bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 2006bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2007cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 2008bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstfLen; ++i) { 2009bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 2010bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 2011bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2012cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 2013bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < typesLen; ++i) { 2014bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang typesPtr[i] = (RsType)jTypesPtr[i]; 2015bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 2016bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2017cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang id = (jlong)(uintptr_t) dispatchTab.ScriptGroupCreate((RsContext)con, 2018bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 2019bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 2020bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 2021bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 2022bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType *)typesPtr, typesLen * sizeof(RsType)); 2023bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2024bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(kernelsPtr); 2025bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(srcPtr); 2026bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstkPtr); 2027bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstfPtr); 2028bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(typesPtr); 2029cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 2030cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wangcleanup: 2031cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jKernelsPtr != nullptr) { 2032cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 2033cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2034cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jSrcPtr != nullptr) { 2035cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 2036cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2037cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jDstkPtr != nullptr) { 2038cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 2039cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2040cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jDstfPtr != nullptr) { 2041cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 2042cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2043cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jTypesPtr != nullptr) { 2044cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 2045cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2046cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 2047c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 2048c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2049c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2050c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 2051bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 2052c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2053bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 2054bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 2055bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 2056bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 2057c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2058c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2059c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 2060bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 2061c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2062bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 2063bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 2064bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 2065bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 2066c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2067c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2068c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 2069bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 2070c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2071bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 2072bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 2073c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2074c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2075c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 2076c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2077bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 2078bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 2079c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 2080c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2081bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nSamplerCreate, con(%p)", (RsContext)con); 2082bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.SamplerCreate((RsContext)con, 2083bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)magFilter, 2084bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)minFilter, 2085bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapS, 2086bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapT, 2087bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapR, 2088bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang aniso); 2089bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 2090bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2091bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jint 2092bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSystemGetPointerSize(JNIEnv *_env, jobject _this) { 2093bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)sizeof(void*); 2094c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2095c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 20966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// --------------------------------------------------------------------------- 20976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// For Incremental Intrinsic Support 2098d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wangstatic jboolean nIncLoadSO(JNIEnv *_env, jobject _this, jint deviceApi, jstring libPath) { 20996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* handle = NULL; 2100d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang // For API 9+, dlopen the full path of libRSSupport. 2101d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang if (libPath != NULL) { 2102d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang const char * libPathJni = _env->GetStringUTFChars(libPath, JNI_FALSE); 2103d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang handle = dlopen(libPathJni, RTLD_LAZY | RTLD_LOCAL); 2104d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang _env->ReleaseStringUTFChars(libPath, libPathJni); 2105d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang } else { 2106d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL); 2107d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang } 2108d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang 21096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (handle == NULL) { 2110d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("couldn't dlopen %s; librsjni version: %d", dlerror(), RS_JNI_VERSION); 21116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 21126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 21136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 2114e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wang if (loadSymbols(handle, dispatchTabInc, deviceApi) == false) { 2115d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Dispatch Table init failed! librsjni version: %d", RS_JNI_VERSION); 2116d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang dlclose(handle); 21176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 21186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 211994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang dispatchTabInc.AllocationCreateStrided = (AllocationCreateStridedFnPtr)dlsym(handle, "rsAllocationCreateStrided"); 212094ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang if (dispatchTabInc.AllocationCreateStrided == NULL) { 2121d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Couldn't initialize dispatchTabInc.AllocationCreateStrided"); 2122d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang dlclose(handle); 212394ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang return false; 212494ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang } 2125d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_API("Successfully loaded compat runtime"); 21266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return true; 21276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 21306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// To create/destroy a dummy context 21316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 21326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 21336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 21356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ObjDestroy((RsContext)con, (void *)obj); 21366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 21406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceCreate(JNIEnv *_env, jobject _this) 21416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceCreate"); 21436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.DeviceCreate(); 21446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 21476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 21486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceDestroy"); 21506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return dispatchTabInc.DeviceDestroy((RsDevice)dev); 21516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 21546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct) 21556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextCreate"); 21576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang //The compat context for incremental support will be synchronous. 21586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ContextCreate((RsDevice)dev, ver, sdkVer, 21596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsContextType)ct, 21606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_CONTEXT_SYNCHRONOUS); 21616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 21646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextFinish(JNIEnv *_env, jobject _this, jlong con) 21656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextFinish, con(%p)", (RsContext)con); 21676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextFinish((RsContext)con); 21686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 21716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextDestroy(JNIEnv *_env, jobject _this, jlong con) 21726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 21746f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextDestroy((RsContext)con); 21756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 21786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Element 21796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 21806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size) 21816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 21836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang type, kind, norm, size); 21846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ElementCreate((RsContext)con, (RsDataType)type, 21856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsDataKind)kind, norm, size); 21866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 21886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Type 21896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 21906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 21916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 21926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 21946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, eid, dimx, dimy, dimz, mips, faces, yuv); 21956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 21976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dimz, mips, faces, yuv); 21986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 22006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 22016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create Allocation from pointer 22026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 220394ded3567e0f2a567887e5d8ab896634da855a2eMiao WangnIncAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong alloc, jlong type, jint xBytesSize) 22046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 22056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 22066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, (RsElement)type, mips, usage, (void *)pointer); 22076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang size_t strideIn; 22086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* pIn = NULL; 22096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RsAllocation ainI = NULL; 22106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (alloc != 0) { 22116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang pIn = dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 22126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 22136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &strideIn, sizeof(size_t)); 221494ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang /* 221594ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * By definition stride is a roundup of xBytesSize with requiredAlignment, so requiredAlignment must 221694ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * be strictly larger than the difference of (stride - xBytesSize). 221794ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 221894ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * We can prove that as long as requiredAlignment satisfies the following two conditions, the 221994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * memory layout will be identical : 222094ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 1. Smaller or equal than stride; 222194ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 2. Larger than minRequiredAlignment. 222294ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 222394ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * In this case we can simply choose the first power of 2 that satisfies both conditions. 222494ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang */ 222594ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang size_t requiredAlignment = 16; 222694ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang size_t minRequiredAlignment = strideIn - xBytesSize; 222794ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang while (requiredAlignment <= minRequiredAlignment) { 222894ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang requiredAlignment <<= 1; 222994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang } 223094ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang ainI = dispatchTabInc.AllocationCreateStrided((RsContext)incCon, (RsType)type, 223194ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang RS_ALLOCATION_MIPMAP_NONE, 223294ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang RS_ALLOCATION_USAGE_INCREMENTAL_SUPPORT | RS_ALLOCATION_USAGE_SHARED, 223394ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang (uintptr_t)pIn, requiredAlignment); 22346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 22356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t) ainI; 22366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 2237c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 223829f8636ee81c93588204e54273df97d8326b103cMiao Wangstatic jobject 223929f8636ee81c93588204e54273df97d8326b103cMiao WangnAllocationGetByteBuffer(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xBytesSize, jint dimY, jint dimZ) 224029f8636ee81c93588204e54273df97d8326b103cMiao Wang{ 224129f8636ee81c93588204e54273df97d8326b103cMiao Wang LOG_API("nAllocationGetByteBuffer, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 224229f8636ee81c93588204e54273df97d8326b103cMiao Wang size_t strideIn = xBytesSize; 224329f8636ee81c93588204e54273df97d8326b103cMiao Wang void* ptr = NULL; 224429f8636ee81c93588204e54273df97d8326b103cMiao Wang if (alloc != 0 && dispatchTab.AllocationGetPointer != nullptr) { 224529f8636ee81c93588204e54273df97d8326b103cMiao Wang ptr = dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 224629f8636ee81c93588204e54273df97d8326b103cMiao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, dimZ, 0, 224729f8636ee81c93588204e54273df97d8326b103cMiao Wang &strideIn, sizeof(size_t)); 224829f8636ee81c93588204e54273df97d8326b103cMiao Wang } 224929f8636ee81c93588204e54273df97d8326b103cMiao Wang if (ptr != NULL) { 225029f8636ee81c93588204e54273df97d8326b103cMiao Wang size_t bufferSize = strideIn; 225129f8636ee81c93588204e54273df97d8326b103cMiao Wang if (dimY > 0) { 225229f8636ee81c93588204e54273df97d8326b103cMiao Wang bufferSize *= dimY; 225329f8636ee81c93588204e54273df97d8326b103cMiao Wang } 225429f8636ee81c93588204e54273df97d8326b103cMiao Wang if (dimZ > 0) { 225529f8636ee81c93588204e54273df97d8326b103cMiao Wang bufferSize *= dimZ; 225629f8636ee81c93588204e54273df97d8326b103cMiao Wang } 225729f8636ee81c93588204e54273df97d8326b103cMiao Wang jobject byteBuffer = _env->NewDirectByteBuffer(ptr, (jlong) bufferSize); 225829f8636ee81c93588204e54273df97d8326b103cMiao Wang return byteBuffer; 225929f8636ee81c93588204e54273df97d8326b103cMiao Wang } else { 226029f8636ee81c93588204e54273df97d8326b103cMiao Wang return NULL; 226129f8636ee81c93588204e54273df97d8326b103cMiao Wang } 226229f8636ee81c93588204e54273df97d8326b103cMiao Wang} 226329f8636ee81c93588204e54273df97d8326b103cMiao Wang 226429f8636ee81c93588204e54273df97d8326b103cMiao Wangstatic jlong 226529f8636ee81c93588204e54273df97d8326b103cMiao WangnAllocationGetStride(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 226629f8636ee81c93588204e54273df97d8326b103cMiao Wang{ 226729f8636ee81c93588204e54273df97d8326b103cMiao Wang LOG_API("nAllocationGetStride, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 22686a8ec7ed1b46523ad0b468c4345801fb9454ebefStephen Hines size_t strideIn = 0; 226929f8636ee81c93588204e54273df97d8326b103cMiao Wang if (alloc != 0 && dispatchTab.AllocationGetPointer != nullptr) { 2270e5125574a68ee6283c300732a11662d8f9945624Yang Ni dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 2271e5125574a68ee6283c300732a11662d8f9945624Yang Ni RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 2272e5125574a68ee6283c300732a11662d8f9945624Yang Ni &strideIn, sizeof(size_t)); 227329f8636ee81c93588204e54273df97d8326b103cMiao Wang } 227429f8636ee81c93588204e54273df97d8326b103cMiao Wang return (jlong)strideIn; 227529f8636ee81c93588204e54273df97d8326b103cMiao Wang} 227629f8636ee81c93588204e54273df97d8326b103cMiao Wang 22772e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang// --------------------------------------------------------------------------- 2278c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2279bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2280c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic const char *classPathName = "android/support/v8/renderscript/RenderScript"; 2281c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2282c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic JNINativeMethod methods[] = { 2283d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang{"nLoadSO", "(ZILjava/lang/String;)Z", (bool*)nLoadSO }, 2284dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{"nLoadIOSO", "()Z", (bool*)nLoadIOSO }, 2285bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 2286bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 2287bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 2288bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 2289bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 2290bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 2291bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 2292bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 2293c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2294c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2295c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// All methods below are thread protected in java. 2296ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang{"rsnContextCreate", "(JIIILjava/lang/String;)J", (void*)nContextCreate }, 2297bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 2298bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 2299bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 2300bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDump", "(JI)V", (void*)nContextDump }, 2301bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 2302b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 2303b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 2304b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 2305b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 2306bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 2307bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2308bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 2309bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 2310bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 2311bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2312bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 2313bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2314bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 2315bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 2316bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 2317bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 2318bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2319bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 2320bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 2321bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2322bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 2323bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 2324bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 23252e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 2326bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D }, 2327244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang//{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 23282e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 2329bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 23302e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 2331bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 23322e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 23332e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 23343bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang//{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 23352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 23362e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang//{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 2337bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 2338bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 2339bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 2340bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 23416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptBindAllocation", "(JJJIZ)V", (void*)nScriptBindAllocation }, 23426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetTimeZone", "(JJ[BZ)V", (void*)nScriptSetTimeZone }, 23436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvoke", "(JJIZ)V", (void*)nScriptInvoke }, 23446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvokeV", "(JJI[BZ)V", (void*)nScriptInvokeV }, 23456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJZ)V", (void*)nScriptForEach }, 23466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJ[BZ)V", (void*)nScriptForEachV }, 234789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEachMulti }, 23486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJIIIIIIZ)V", (void*)nScriptForEachClipped }, 23496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJ[BIIIIIIZ)V", (void*)nScriptForEachClippedV }, 23502141e9b9d98b6f4e2f4124f9b67a7819e8d40a4cDavid Gross{"rsnScriptReduce", "(JJI[JJ[I)V", (void*)nScriptReduce }, 23516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarI", "(JJIIZ)V", (void*)nScriptSetVarI }, 23526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarJ", "(JJIJZ)V", (void*)nScriptSetVarJ }, 23536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarF", "(JJIFZ)V", (void*)nScriptSetVarF }, 23546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarD", "(JJIDZ)V", (void*)nScriptSetVarD }, 23556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarV", "(JJI[BZ)V", (void*)nScriptSetVarV }, 23566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarVE", "(JJI[BJ[IZ)V", (void*)nScriptSetVarVE }, 23576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarObj", "(JJIJZ)V", (void*)nScriptSetVarObj }, 2358bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2359bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 23606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptIntrinsicCreate", "(JIJZ)J", (void*)nScriptIntrinsicCreate }, 23616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptKernelIDCreate", "(JJIIZ)J", (void*)nScriptKernelIDCreate }, 2362086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 23636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptFieldIDCreate", "(JJIZ)J", (void*)nScriptFieldIDCreate }, 2364bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 2365e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;Ljava/lang/String;[J)J", (void*)nScriptGroup2Create }, 2366bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 2367bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 2368bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 2369b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 2370bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 23718919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Single", "(JJJIIIIIIIIIFJJFJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Single }, 23728919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Double", "(JJJIIIIIIIIIDJJDJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Double }, 23738919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Complex", "(JJJIIIIIIIIIFFJJFFJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Complex }, 23748919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Z", "(JJJIIIIIIIIIDDJJDDJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Z }, 23758919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 23768919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_BNNM", "(JJJIIIJIJIJIIZ)V", (void*)nScriptIntrinsicBLAS_BNNM }, 23778919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 2378bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 2379c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2380bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 23816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 23826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Entry points for Inc libRSSupport 2383d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang{"nIncLoadSO", "(ILjava/lang/String;)Z", (bool*)nIncLoadSO }, 23846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceCreate", "()J", (void*)nIncDeviceCreate }, 23856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceDestroy", "(J)V", (void*)nIncDeviceDestroy }, 23866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextCreate", "(JIII)J", (void*)nIncContextCreate }, 23876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextFinish", "(J)V", (void*)nIncContextFinish }, 23886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextDestroy", "(J)V", (void*)nIncContextDestroy }, 23896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncObjDestroy", "(JJ)V", (void*)nIncObjDestroy }, 23906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncElementCreate", "(JJIZI)J", (void*)nIncElementCreate }, 23916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncTypeCreate", "(JJIIIZZI)J", (void*)nIncTypeCreate }, 239294ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang{"rsnIncAllocationCreateTyped", "(JJJJI)J", (void*)nIncAllocationCreateTyped }, 239329f8636ee81c93588204e54273df97d8326b103cMiao Wang{"rsnAllocationGetByteBuffer", "(JJIII)Ljava/nio/ByteBuffer;", (void*)nAllocationGetByteBuffer }, 239429f8636ee81c93588204e54273df97d8326b103cMiao Wang{"rsnAllocationGetStride", "(JJ)J", (void*)nAllocationGetStride }, 2395c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 2396c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2397c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 2398c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2399c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainjint JNI_OnLoad(JavaVM* vm, void* reserved) 2400c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2401c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv* env = NULL; 2402257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines jclass clazz = NULL; 2403c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint result = -1; 2404c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2405c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 2406184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 2407184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: GetEnv failed\n"); 2408257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 2409257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 2410257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env == NULL) { 2411184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: env == NULL"); 2412257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 2413257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 2414257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines 2415257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines clazz = env->FindClass(classPathName); 2416257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (clazz == NULL) { 2417c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 2418c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 2419c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2420257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env->RegisterNatives(clazz, methods, NELEM(methods)) < 0) { 2421184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 2422184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: MediaPlayer native registration failed\n"); 2423c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 2424c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 2425c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2426c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main /* success -- return valid version number */ 2427c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main result = JNI_VERSION_1_4; 2428c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2429c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainbail: 2430c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return result; 2431c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2432