android_renderscript_RenderScript.cpp revision e5125574a68ee6283c300732a11662d8f9945624
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 *)); 992c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_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; 15926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 15946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 15956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 15966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 15976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 15996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 16006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 16016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1602c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1603c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1604c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 16056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1606bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1607c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray params, jint xstart, jint xend, 16086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1609c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1610bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1611c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1612c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 1613c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1614c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1615c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1616c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1617c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1618c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1619c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1620c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1621c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1622c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 16236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 16246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 16256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 16266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 16276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 16286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 16296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 16306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 16316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 16326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1633c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1634c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1635c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 163689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wangstatic void 163789b58238694d7d1eebaac0aa59b0bdd67a779582Miao WangnScriptForEachMulti(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 163889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jlongArray ains, jlong aout, jbyteArray params, 163989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jintArray limits) 164089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang{ 164189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 164289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 164389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint in_len = 0; 164489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jlong *in_ptr = nullptr; 164589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 164689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang RsAllocation *in_allocs = nullptr; 164789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 164889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (ains != nullptr) { 164989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_len = _env->GetArrayLength(ains); 165089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 1651d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Too many arguments in kernel launch."); 165289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang // TODO (b/20758983): Report back to Java and throw an exception 165389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang return; 165489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 165589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 165689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang // TODO (b/20760800): Check in_ptr is not null 165789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_ptr = _env->GetLongArrayElements(ains, nullptr); 165889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (sizeof(RsAllocation) == sizeof(jlong)) { 165989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs = (RsAllocation*)in_ptr; 166089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 166189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } else { 166289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang // Convert from 64-bit jlong types to the native pointer type. 166389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 166489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 166589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (in_allocs == nullptr) { 1666d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Failed launching kernel for lack of memory."); 166789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 166889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang return; 166989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 167089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 167189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang for (int index = in_len; --index >= 0;) { 167289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs[index] = (RsAllocation)in_ptr[index]; 167389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 167489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 167589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 167689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 167789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint param_len = 0; 167889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jbyte *param_ptr = nullptr; 167989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 168089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (params != nullptr) { 168189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang param_len = _env->GetArrayLength(params); 168289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang param_ptr = _env->GetByteArrayElements(params, nullptr); 168389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 168489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 168589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang RsScriptCall sc, *sca = nullptr; 168689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang uint32_t sc_size = 0; 168789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 168889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint limit_len = 0; 168989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang jint *limit_ptr = nullptr; 169089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 169189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (limits != nullptr) { 169289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limit_len = _env->GetArrayLength(limits); 169389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limit_ptr = _env->GetIntArrayElements(limits, nullptr); 169489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 169589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (limit_len != 6) { 1696d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("LaunchOptions cannot be recognized."); 169789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang goto exit; 169889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 169989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 170089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.xStart = limit_ptr[0]; 170189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.xEnd = limit_ptr[1]; 170289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.yStart = limit_ptr[2]; 170389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.yEnd = limit_ptr[3]; 170489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.zStart = limit_ptr[4]; 170589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.zEnd = limit_ptr[5]; 170689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 170789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.arrayStart = 0; 170889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.arrayEnd = 0; 170989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array2Start = 0; 171089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array2End = 0; 171189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array3Start = 0; 171289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array3End = 0; 171389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array4Start = 0; 171489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sc.array4End = 0; 171589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 171689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang sca = ≻ 171789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 171889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 171989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang dispatchTabInc.ScriptForEachMulti((RsContext)con, (RsScript)script, slot, 172089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_allocs, in_len, (RsAllocation)aout, 172189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang param_ptr, param_len, sca, sc_size); 172289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 172389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wangexit: 172489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 172589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (ains != nullptr) { 172689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 172789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 172889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 172989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (params != nullptr) { 173089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT); 173189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 173289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 173389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (limits != nullptr) { 173489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 173589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 173689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang} 173789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 17385154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Walastatic void 17395154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt WalanScriptReduce(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 17405154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala jlong ain, jlong aout, jintArray limits) 17415154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala{ 17425154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala LOG_API("nScriptReduce, con(%p), s(%p), slot(%i) ain(%" PRId64 ") aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ain, aout); 17435154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17445154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala RsScriptCall sc, *sca = nullptr; 17455154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala uint32_t sc_size = 0; 17465154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17475154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala jint limit_len = 0; 17485154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala jint *limit_ptr = nullptr; 17495154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17505154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala bool limitLengthValid = true; 17515154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17525154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala // If the caller passed limits, reflect them in the RsScriptCall. 17535154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala if (limits != nullptr) { 17545154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala limit_len = _env->GetArrayLength(limits); 17555154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala limit_ptr = _env->GetIntArrayElements(limits, nullptr); 17565154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17575154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala // We expect to be passed an array [x1, x2] which specifies 17585154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala // the sub-range for a 1-dimensional reduction. 17595154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala if (limit_len == 2) { 17605154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.xStart = limit_ptr[0]; 17615154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.xEnd = limit_ptr[1]; 17625154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.yStart = 0; 17635154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.yEnd = 0; 17645154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.zStart = 0; 17655154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.zEnd = 0; 17665154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 17675154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.arrayStart = 0; 17685154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.arrayEnd = 0; 17695154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array2Start = 0; 17705154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array2End = 0; 17715154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array3Start = 0; 17725154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array3End = 0; 17735154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array4Start = 0; 17745154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc.array4End = 0; 17755154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17765154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sca = ≻ 17775154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sc_size = sizeof(sc); 17785154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala } else { 1779d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("LaunchOptions cannot be recognized."); 17805154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala limitLengthValid = false; 17815154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala } 17825154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala } 17835154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17845154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala if (limitLengthValid) { 17855154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala dispatchTab.ScriptReduce((RsContext)con, (RsScript)script, slot, 17865154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala (RsAllocation)ain, (RsAllocation)aout, 17875154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala sca, sc_size); 17885154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala } 17895154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 17905154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala if (limits != nullptr) { 17915154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 17925154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala } 17935154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala} 17945154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala 1795043d28678b7e52ed1011286af57173c2c7bec749David Grossstatic void 1796043d28678b7e52ed1011286af57173c2c7bec749David GrossnScriptReduceNew(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 1797043d28678b7e52ed1011286af57173c2c7bec749David Gross jlongArray ains, jlong aout, jintArray limits) 1798043d28678b7e52ed1011286af57173c2c7bec749David Gross{ 1799043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_API("nScriptReduceNew, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 1800043d28678b7e52ed1011286af57173c2c7bec749David Gross 1801043d28678b7e52ed1011286af57173c2c7bec749David Gross if (ains == nullptr) { 1802043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("At least one input required."); 1803043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1804043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1805043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1806043d28678b7e52ed1011286af57173c2c7bec749David Gross jint in_len = _env->GetArrayLength(ains); 1807043d28678b7e52ed1011286af57173c2c7bec749David Gross if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 1808043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("Too many arguments in kernel launch."); 1809043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1810043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1811043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1812043d28678b7e52ed1011286af57173c2c7bec749David Gross 1813043d28678b7e52ed1011286af57173c2c7bec749David Gross jlong *in_ptr = _env->GetLongArrayElements(ains, nullptr); 1814043d28678b7e52ed1011286af57173c2c7bec749David Gross if (in_ptr == nullptr) { 1815043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("Failed to get Java array elements"); 1816043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1817043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1818043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1819043d28678b7e52ed1011286af57173c2c7bec749David Gross 1820043d28678b7e52ed1011286af57173c2c7bec749David Gross RsAllocation *in_allocs = nullptr; 1821043d28678b7e52ed1011286af57173c2c7bec749David Gross if (sizeof(RsAllocation) == sizeof(jlong)) { 1822043d28678b7e52ed1011286af57173c2c7bec749David Gross in_allocs = (RsAllocation*)in_ptr; 1823043d28678b7e52ed1011286af57173c2c7bec749David Gross } else { 1824043d28678b7e52ed1011286af57173c2c7bec749David Gross // Convert from 64-bit jlong types to the native pointer type. 1825043d28678b7e52ed1011286af57173c2c7bec749David Gross 1826043d28678b7e52ed1011286af57173c2c7bec749David Gross in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 1827043d28678b7e52ed1011286af57173c2c7bec749David Gross if (in_allocs == nullptr) { 1828043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("Failed launching kernel for lack of memory."); 1829043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1830043d28678b7e52ed1011286af57173c2c7bec749David Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1831043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1832043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1833043d28678b7e52ed1011286af57173c2c7bec749David Gross 1834043d28678b7e52ed1011286af57173c2c7bec749David Gross for (int index = in_len; --index >= 0;) { 1835043d28678b7e52ed1011286af57173c2c7bec749David Gross in_allocs[index] = (RsAllocation)in_ptr[index]; 1836043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1837043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1838043d28678b7e52ed1011286af57173c2c7bec749David Gross 1839043d28678b7e52ed1011286af57173c2c7bec749David Gross RsScriptCall sc, *sca = nullptr; 1840043d28678b7e52ed1011286af57173c2c7bec749David Gross uint32_t sc_size = 0; 1841043d28678b7e52ed1011286af57173c2c7bec749David Gross 1842043d28678b7e52ed1011286af57173c2c7bec749David Gross jint limit_len = 0; 1843043d28678b7e52ed1011286af57173c2c7bec749David Gross jint *limit_ptr = nullptr; 1844043d28678b7e52ed1011286af57173c2c7bec749David Gross 1845043d28678b7e52ed1011286af57173c2c7bec749David Gross if (limits != nullptr) { 1846043d28678b7e52ed1011286af57173c2c7bec749David Gross limit_len = _env->GetArrayLength(limits); 1847043d28678b7e52ed1011286af57173c2c7bec749David Gross limit_ptr = _env->GetIntArrayElements(limits, nullptr); 1848043d28678b7e52ed1011286af57173c2c7bec749David Gross if (limit_ptr == nullptr) { 1849043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("Failed to get Java array elements"); 1850043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1851043d28678b7e52ed1011286af57173c2c7bec749David Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1852043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1853043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1854043d28678b7e52ed1011286af57173c2c7bec749David Gross 1855043d28678b7e52ed1011286af57173c2c7bec749David Gross if (limit_len != 6) { 1856043d28678b7e52ed1011286af57173c2c7bec749David Gross LOG_ERR("LaunchOptions cannot be recognized"); 1857043d28678b7e52ed1011286af57173c2c7bec749David Gross // TODO (b/20758983): Report back to Java and throw an exception 1858043d28678b7e52ed1011286af57173c2c7bec749David Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1859043d28678b7e52ed1011286af57173c2c7bec749David Gross return; 1860043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1861043d28678b7e52ed1011286af57173c2c7bec749David Gross 1862043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.xStart = limit_ptr[0]; 1863043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.xEnd = limit_ptr[1]; 1864043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.yStart = limit_ptr[2]; 1865043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.yEnd = limit_ptr[3]; 1866043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.zStart = limit_ptr[4]; 1867043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.zEnd = limit_ptr[5]; 1868043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1869043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.arrayStart = 0; 1870043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.arrayEnd = 0; 1871043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array2Start = 0; 1872043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array2End = 0; 1873043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array3Start = 0; 1874043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array3End = 0; 1875043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array4Start = 0; 1876043d28678b7e52ed1011286af57173c2c7bec749David Gross sc.array4End = 0; 1877043d28678b7e52ed1011286af57173c2c7bec749David Gross 1878043d28678b7e52ed1011286af57173c2c7bec749David Gross sca = ≻ 1879043d28678b7e52ed1011286af57173c2c7bec749David Gross sc_size = sizeof(sc); 1880043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1881043d28678b7e52ed1011286af57173c2c7bec749David Gross 1882043d28678b7e52ed1011286af57173c2c7bec749David Gross dispatchTab.ScriptReduceNew((RsContext)con, (RsScript)script, slot, 1883043d28678b7e52ed1011286af57173c2c7bec749David Gross in_allocs, in_len, (RsAllocation)aout, 1884043d28678b7e52ed1011286af57173c2c7bec749David Gross sca, sc_size); 1885043d28678b7e52ed1011286af57173c2c7bec749David Gross 1886043d28678b7e52ed1011286af57173c2c7bec749David Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1887043d28678b7e52ed1011286af57173c2c7bec749David Gross 1888043d28678b7e52ed1011286af57173c2c7bec749David Gross if (limits != nullptr) { 1889043d28678b7e52ed1011286af57173c2c7bec749David Gross _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 1890043d28678b7e52ed1011286af57173c2c7bec749David Gross } 1891043d28678b7e52ed1011286af57173c2c7bec749David Gross} 1892043d28678b7e52ed1011286af57173c2c7bec749David Gross 1893c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1894c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1895bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1896bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 1897c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring resName, jstring cacheDir, 1898c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray scriptRef, jint length) 1899c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1900bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCCreate, con(%p)", (RsContext)con); 1901c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1902c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 resNameUTF(_env, resName); 1903c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 1904bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong ret = 0; 1905c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* script_ptr = NULL; 1906c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint _exception = 0; 1907c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint remaining; 1908c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!scriptRef) { 1909c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1910c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 1911c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1912c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1913c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (length < 0) { 1914c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1915c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 1916c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1917c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1918c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main remaining = _env->GetArrayLength(scriptRef); 1919c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (remaining < length) { 1920c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1921c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", 1922c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main // "length > script.length - offset"); 1923c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1924c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1925c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main script_ptr = (jbyte *) 1926c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 1927c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1928c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //rsScriptCSetText(con, (const char *)script_ptr, length); 1929c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1930bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ret = (jlong)(uintptr_t)dispatchTab.ScriptCCreate((RsContext)con, 1931bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang resNameUTF.c_str(), resNameUTF.length(), 1932bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang cacheDirUTF.c_str(), cacheDirUTF.length(), 1933bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (const char *)script_ptr, length); 1934c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1935c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainexit: 1936c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (script_ptr) { 1937c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 1938c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception ? JNI_ABORT: 0); 1939c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1940c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1941bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)ret; 1942c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1943c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1944bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 19456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid, jboolean mUseInc) 1946c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1947bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid); 19486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 19496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 19506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 19516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 19526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1953c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1954c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1955bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 19566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig, jboolean mUseInc) 1957c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1958bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 1959bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)sid, slot, sig); 19606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 19616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 1962d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni slot, sig); 19636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 19646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 19656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang slot, sig); 19666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1967c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1968c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1969bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1970086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 1971086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{ 1972086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni LOG_API("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con, 1973086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (void *)sid, slot); 1974086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)dispatchTab.ScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 1975086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni} 1976086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni 1977086010500c28e2bca57ea583d3f38da9a2f2f414Yang Nistatic jlong 19786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jboolean mUseInc) 1979c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1980bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot); 19816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 19826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 19836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 19846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 19856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1986c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1987c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1988bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1989bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 1990bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _dstk, jlongArray _dstf, jlongArray _types) 1991bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 1992bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con); 1993bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1994cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jlong id = 0; 1995cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 1996cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang RsScriptKernelID* kernelsPtr; 1997bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint kernelsLen = _env->GetArrayLength(_kernels); 1998bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 1999cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 2000cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang RsScriptKernelID* srcPtr; 2001cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jint srcLen = _env->GetArrayLength(_src); 2002cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 2003cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 2004cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang RsScriptKernelID* dstkPtr; 2005cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jint dstkLen = _env->GetArrayLength(_dstk); 2006cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 2007cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 2008cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang RsScriptKernelID* dstfPtr; 2009cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jint dstfLen = _env->GetArrayLength(_dstf); 2010cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 2011cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 2012cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang RsType* typesPtr; 2013cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jint typesLen = _env->GetArrayLength(_types); 2014cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 2015cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 2016cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jKernelsPtr == nullptr) { 2017cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang LOG_ERR("Failed to get Java array elements: kernels"); 2018cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang goto cleanup; 2019cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2020cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jSrcPtr == nullptr) { 2021cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang LOG_ERR("Failed to get Java array elements: src"); 2022cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang goto cleanup; 2023cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2024cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jDstkPtr == nullptr) { 2025cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang LOG_ERR("Failed to get Java array elements: dstk"); 2026cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang goto cleanup; 2027cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2028cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jDstfPtr == nullptr) { 2029cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang LOG_ERR("Failed to get Java array elements: dstf"); 2030cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang goto cleanup; 2031cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2032cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jTypesPtr == nullptr) { 2033cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang LOG_ERR("Failed to get Java array elements: types"); 2034cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang goto cleanup; 2035cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2036cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 2037cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 2038bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < kernelsLen; ++i) { 2039bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 2040bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 2041bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2042cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 2043bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < srcLen; ++i) { 2044bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 2045bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 2046bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2047cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 2048bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstkLen; ++i) { 2049bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 2050bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 2051bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2052cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 2053bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstfLen; ++i) { 2054bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 2055bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 2056bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2057cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 2058bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < typesLen; ++i) { 2059bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang typesPtr[i] = (RsType)jTypesPtr[i]; 2060bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 2061bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2062cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang id = (jlong)(uintptr_t) dispatchTab.ScriptGroupCreate((RsContext)con, 2063bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 2064bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 2065bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 2066bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 2067bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType *)typesPtr, typesLen * sizeof(RsType)); 2068bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2069bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(kernelsPtr); 2070bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(srcPtr); 2071bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstkPtr); 2072bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstfPtr); 2073bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(typesPtr); 2074cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 2075cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wangcleanup: 2076cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jKernelsPtr != nullptr) { 2077cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 2078cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2079cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jSrcPtr != nullptr) { 2080cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 2081cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2082cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jDstkPtr != nullptr) { 2083cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 2084cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2085cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jDstfPtr != nullptr) { 2086cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 2087cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2088cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang if (jTypesPtr != nullptr) { 2089cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 2090cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang } 2091cc99363890bf2d4ef5da32bad794cad7089b1eecMiao Wang 2092c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 2093c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2094c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2095c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 2096bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 2097c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2098bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 2099bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 2100bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 2101bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 2102c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2103c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2104c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 2105bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 2106c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2107bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 2108bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 2109bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 2110bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 2111c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2112c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2113c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 2114bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 2115c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2116bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 2117bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 2118c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2119c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2120c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 2121c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2122bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 2123bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 2124c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 2125c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2126bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nSamplerCreate, con(%p)", (RsContext)con); 2127bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.SamplerCreate((RsContext)con, 2128bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)magFilter, 2129bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)minFilter, 2130bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapS, 2131bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapT, 2132bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapR, 2133bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang aniso); 2134bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 2135bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2136bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jint 2137bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSystemGetPointerSize(JNIEnv *_env, jobject _this) { 2138bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)sizeof(void*); 2139c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2140c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 21416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// --------------------------------------------------------------------------- 21426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// For Incremental Intrinsic Support 2143d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wangstatic jboolean nIncLoadSO(JNIEnv *_env, jobject _this, jint deviceApi, jstring libPath) { 21446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* handle = NULL; 2145d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang // For API 9+, dlopen the full path of libRSSupport. 2146d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang if (libPath != NULL) { 2147d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang const char * libPathJni = _env->GetStringUTFChars(libPath, JNI_FALSE); 2148d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang handle = dlopen(libPathJni, RTLD_LAZY | RTLD_LOCAL); 2149d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang _env->ReleaseStringUTFChars(libPath, libPathJni); 2150d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang } else { 2151d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL); 2152d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang } 2153d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang 21546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (handle == NULL) { 2155d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("couldn't dlopen %s; librsjni version: %d", dlerror(), RS_JNI_VERSION); 21566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 21576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 21586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 2159e27a340e3a55a3650e1f74bf1d350104596c4d4bMiao Wang if (loadSymbols(handle, dispatchTabInc, deviceApi) == false) { 2160d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Dispatch Table init failed! librsjni version: %d", RS_JNI_VERSION); 2161d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang dlclose(handle); 21626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 21636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 216494ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang dispatchTabInc.AllocationCreateStrided = (AllocationCreateStridedFnPtr)dlsym(handle, "rsAllocationCreateStrided"); 216594ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang if (dispatchTabInc.AllocationCreateStrided == NULL) { 2166d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_ERR("Couldn't initialize dispatchTabInc.AllocationCreateStrided"); 2167d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang dlclose(handle); 216894ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang return false; 216994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang } 2170d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang LOG_API("Successfully loaded compat runtime"); 21716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return true; 21726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21746f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 21756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// To create/destroy a dummy context 21766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 21776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 21786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 21806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ObjDestroy((RsContext)con, (void *)obj); 21816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 21856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceCreate(JNIEnv *_env, jobject _this) 21866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceCreate"); 21886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.DeviceCreate(); 21896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 21926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 21936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 21946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceDestroy"); 21956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return dispatchTabInc.DeviceDestroy((RsDevice)dev); 21966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 21976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 21986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 21996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct) 22006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 22016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextCreate"); 22026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang //The compat context for incremental support will be synchronous. 22036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ContextCreate((RsDevice)dev, ver, sdkVer, 22046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsContextType)ct, 22056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_CONTEXT_SYNCHRONOUS); 22066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 22076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 22086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 22096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextFinish(JNIEnv *_env, jobject _this, jlong con) 22106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 22116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextFinish, con(%p)", (RsContext)con); 22126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextFinish((RsContext)con); 22136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 22146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 22156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 22166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextDestroy(JNIEnv *_env, jobject _this, jlong con) 22176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 22186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 22196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextDestroy((RsContext)con); 22206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 22216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 22226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 22236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Element 22246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 22256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size) 22266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 22276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 22286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang type, kind, norm, size); 22296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ElementCreate((RsContext)con, (RsDataType)type, 22306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsDataKind)kind, norm, size); 22316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 22326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 22336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Type 22346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 22356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 22366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 22376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 22386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 22396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, eid, dimx, dimy, dimz, mips, faces, yuv); 22406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 22416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 22426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dimz, mips, faces, yuv); 22436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 22446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 22456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 22466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create Allocation from pointer 22476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 224894ded3567e0f2a567887e5d8ab896634da855a2eMiao WangnIncAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong alloc, jlong type, jint xBytesSize) 22496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 22506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 22516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, (RsElement)type, mips, usage, (void *)pointer); 22526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang size_t strideIn; 22536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* pIn = NULL; 22546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RsAllocation ainI = NULL; 22556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (alloc != 0) { 22566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang pIn = dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 22576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 22586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &strideIn, sizeof(size_t)); 225994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang /* 226094ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * By definition stride is a roundup of xBytesSize with requiredAlignment, so requiredAlignment must 226194ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * be strictly larger than the difference of (stride - xBytesSize). 226294ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 226394ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * We can prove that as long as requiredAlignment satisfies the following two conditions, the 226494ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * memory layout will be identical : 226594ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 1. Smaller or equal than stride; 226694ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 2. Larger than minRequiredAlignment. 226794ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * 226894ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang * In this case we can simply choose the first power of 2 that satisfies both conditions. 226994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang */ 227094ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang size_t requiredAlignment = 16; 227194ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang size_t minRequiredAlignment = strideIn - xBytesSize; 227294ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang while (requiredAlignment <= minRequiredAlignment) { 227394ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang requiredAlignment <<= 1; 227494ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang } 227594ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang ainI = dispatchTabInc.AllocationCreateStrided((RsContext)incCon, (RsType)type, 227694ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang RS_ALLOCATION_MIPMAP_NONE, 227794ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang RS_ALLOCATION_USAGE_INCREMENTAL_SUPPORT | RS_ALLOCATION_USAGE_SHARED, 227894ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang (uintptr_t)pIn, requiredAlignment); 22796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 22806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t) ainI; 22816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 2282c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 228329f8636ee81c93588204e54273df97d8326b103cMiao Wangstatic jobject 228429f8636ee81c93588204e54273df97d8326b103cMiao WangnAllocationGetByteBuffer(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xBytesSize, jint dimY, jint dimZ) 228529f8636ee81c93588204e54273df97d8326b103cMiao Wang{ 228629f8636ee81c93588204e54273df97d8326b103cMiao Wang LOG_API("nAllocationGetByteBuffer, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 228729f8636ee81c93588204e54273df97d8326b103cMiao Wang size_t strideIn = xBytesSize; 228829f8636ee81c93588204e54273df97d8326b103cMiao Wang void* ptr = NULL; 228929f8636ee81c93588204e54273df97d8326b103cMiao Wang if (alloc != 0 && dispatchTab.AllocationGetPointer != nullptr) { 229029f8636ee81c93588204e54273df97d8326b103cMiao Wang ptr = dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 229129f8636ee81c93588204e54273df97d8326b103cMiao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, dimZ, 0, 229229f8636ee81c93588204e54273df97d8326b103cMiao Wang &strideIn, sizeof(size_t)); 229329f8636ee81c93588204e54273df97d8326b103cMiao Wang } 229429f8636ee81c93588204e54273df97d8326b103cMiao Wang if (ptr != NULL) { 229529f8636ee81c93588204e54273df97d8326b103cMiao Wang size_t bufferSize = strideIn; 229629f8636ee81c93588204e54273df97d8326b103cMiao Wang if (dimY > 0) { 229729f8636ee81c93588204e54273df97d8326b103cMiao Wang bufferSize *= dimY; 229829f8636ee81c93588204e54273df97d8326b103cMiao Wang } 229929f8636ee81c93588204e54273df97d8326b103cMiao Wang if (dimZ > 0) { 230029f8636ee81c93588204e54273df97d8326b103cMiao Wang bufferSize *= dimZ; 230129f8636ee81c93588204e54273df97d8326b103cMiao Wang } 230229f8636ee81c93588204e54273df97d8326b103cMiao Wang jobject byteBuffer = _env->NewDirectByteBuffer(ptr, (jlong) bufferSize); 230329f8636ee81c93588204e54273df97d8326b103cMiao Wang return byteBuffer; 230429f8636ee81c93588204e54273df97d8326b103cMiao Wang } else { 230529f8636ee81c93588204e54273df97d8326b103cMiao Wang return NULL; 230629f8636ee81c93588204e54273df97d8326b103cMiao Wang } 230729f8636ee81c93588204e54273df97d8326b103cMiao Wang} 230829f8636ee81c93588204e54273df97d8326b103cMiao Wang 230929f8636ee81c93588204e54273df97d8326b103cMiao Wangstatic jlong 231029f8636ee81c93588204e54273df97d8326b103cMiao WangnAllocationGetStride(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 231129f8636ee81c93588204e54273df97d8326b103cMiao Wang{ 231229f8636ee81c93588204e54273df97d8326b103cMiao Wang LOG_API("nAllocationGetStride, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 23136a8ec7ed1b46523ad0b468c4345801fb9454ebefStephen Hines size_t strideIn = 0; 231429f8636ee81c93588204e54273df97d8326b103cMiao Wang if (alloc != 0 && dispatchTab.AllocationGetPointer != nullptr) { 2315e5125574a68ee6283c300732a11662d8f9945624Yang Ni dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 2316e5125574a68ee6283c300732a11662d8f9945624Yang Ni RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 2317e5125574a68ee6283c300732a11662d8f9945624Yang Ni &strideIn, sizeof(size_t)); 231829f8636ee81c93588204e54273df97d8326b103cMiao Wang } 231929f8636ee81c93588204e54273df97d8326b103cMiao Wang return (jlong)strideIn; 232029f8636ee81c93588204e54273df97d8326b103cMiao Wang} 232129f8636ee81c93588204e54273df97d8326b103cMiao Wang 23222e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang// --------------------------------------------------------------------------- 2323c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2324bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2325c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic const char *classPathName = "android/support/v8/renderscript/RenderScript"; 2326c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2327c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic JNINativeMethod methods[] = { 2328d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang{"nLoadSO", "(ZILjava/lang/String;)Z", (bool*)nLoadSO }, 2329dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{"nLoadIOSO", "()Z", (bool*)nLoadIOSO }, 2330bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 2331bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 2332bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 2333bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 2334bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 2335bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 2336bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 2337bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 2338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2339c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2340c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// All methods below are thread protected in java. 2341ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang{"rsnContextCreate", "(JIIILjava/lang/String;)J", (void*)nContextCreate }, 2342bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 2343bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 2344bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 2345bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDump", "(JI)V", (void*)nContextDump }, 2346bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 2347b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 2348b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 2349b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 2350b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 2351bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 2352bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2353bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 2354bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 2355bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 2356bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2357bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 2358bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2359bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 2360bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 2361bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 2362bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 2363bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2364bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 2365bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 2366bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2367bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 2368bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 2369bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 23702e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 2371bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D }, 2372244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang//{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 23732e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 2374bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 23752e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 2376bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 23772e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 23782e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 23793bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang//{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 23802e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 23812e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang//{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 2382bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 2383bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 2384bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 2385bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 23866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptBindAllocation", "(JJJIZ)V", (void*)nScriptBindAllocation }, 23876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetTimeZone", "(JJ[BZ)V", (void*)nScriptSetTimeZone }, 23886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvoke", "(JJIZ)V", (void*)nScriptInvoke }, 23896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvokeV", "(JJI[BZ)V", (void*)nScriptInvokeV }, 23906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJZ)V", (void*)nScriptForEach }, 23916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJ[BZ)V", (void*)nScriptForEachV }, 239289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEachMulti }, 23936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJIIIIIIZ)V", (void*)nScriptForEachClipped }, 23946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJ[BIIIIIIZ)V", (void*)nScriptForEachClippedV }, 23955154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala{"rsnScriptReduce", "(JJIJJ[I)V", (void*)nScriptReduce }, 2396043d28678b7e52ed1011286af57173c2c7bec749David Gross{"rsnScriptReduceNew", "(JJI[JJ[I)V", (void*)nScriptReduceNew }, 23976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarI", "(JJIIZ)V", (void*)nScriptSetVarI }, 23986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarJ", "(JJIJZ)V", (void*)nScriptSetVarJ }, 23996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarF", "(JJIFZ)V", (void*)nScriptSetVarF }, 24006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarD", "(JJIDZ)V", (void*)nScriptSetVarD }, 24016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarV", "(JJI[BZ)V", (void*)nScriptSetVarV }, 24026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarVE", "(JJI[BJ[IZ)V", (void*)nScriptSetVarVE }, 24036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarObj", "(JJIJZ)V", (void*)nScriptSetVarObj }, 2404bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 2405bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 24066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptIntrinsicCreate", "(JIJZ)J", (void*)nScriptIntrinsicCreate }, 24076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptKernelIDCreate", "(JJIIZ)J", (void*)nScriptKernelIDCreate }, 2408086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 24096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptFieldIDCreate", "(JJIZ)J", (void*)nScriptFieldIDCreate }, 2410bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 2411e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;Ljava/lang/String;[J)J", (void*)nScriptGroup2Create }, 2412bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 2413bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 2414bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 2415b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 2416bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 24178919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Single", "(JJJIIIIIIIIIFJJFJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Single }, 24188919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Double", "(JJJIIIIIIIIIDJJDJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Double }, 24198919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Complex", "(JJJIIIIIIIIIFFJJFFJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Complex }, 24208919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_Z", "(JJJIIIIIIIIIDDJJDDJIIIIZ)V", (void*)nScriptIntrinsicBLAS_Z }, 24218919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 24228919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang{"rsnScriptIntrinsicBLAS_BNNM", "(JJJIIIJIJIJIIZ)V", (void*)nScriptIntrinsicBLAS_BNNM }, 24238919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang 2424bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 2425c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2426bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 24276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 24286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Entry points for Inc libRSSupport 2429d3fdb27e85cd38ffacd963bced1f91a9297a68d8Miao Wang{"nIncLoadSO", "(ILjava/lang/String;)Z", (bool*)nIncLoadSO }, 24306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceCreate", "()J", (void*)nIncDeviceCreate }, 24316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceDestroy", "(J)V", (void*)nIncDeviceDestroy }, 24326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextCreate", "(JIII)J", (void*)nIncContextCreate }, 24336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextFinish", "(J)V", (void*)nIncContextFinish }, 24346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextDestroy", "(J)V", (void*)nIncContextDestroy }, 24356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncObjDestroy", "(JJ)V", (void*)nIncObjDestroy }, 24366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncElementCreate", "(JJIZI)J", (void*)nIncElementCreate }, 24376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncTypeCreate", "(JJIIIZZI)J", (void*)nIncTypeCreate }, 243894ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang{"rsnIncAllocationCreateTyped", "(JJJJI)J", (void*)nIncAllocationCreateTyped }, 243929f8636ee81c93588204e54273df97d8326b103cMiao Wang{"rsnAllocationGetByteBuffer", "(JJIII)Ljava/nio/ByteBuffer;", (void*)nAllocationGetByteBuffer }, 244029f8636ee81c93588204e54273df97d8326b103cMiao Wang{"rsnAllocationGetStride", "(JJ)J", (void*)nAllocationGetStride }, 2441c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 2442c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2443c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 2444c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2445c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainjint JNI_OnLoad(JavaVM* vm, void* reserved) 2446c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 2447c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv* env = NULL; 2448257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines jclass clazz = NULL; 2449c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint result = -1; 2450c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2451c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 2452184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 2453184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: GetEnv failed\n"); 2454257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 2455257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 2456257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env == NULL) { 2457184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: env == NULL"); 2458257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 2459257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 2460257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines 2461257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines clazz = env->FindClass(classPathName); 2462257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (clazz == NULL) { 2463c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 2464c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 2465c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2466257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env->RegisterNatives(clazz, methods, NELEM(methods)) < 0) { 2467184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 2468184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: MediaPlayer native registration failed\n"); 2469c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 2470c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 2471c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2472c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main /* success -- return valid version number */ 2473c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main result = JNI_VERSION_1_4; 2474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 2475c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainbail: 2476c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return result; 2477c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 2478