android_renderscript_RenderScript.cpp revision d454f4541683a6bddfa1d00424a71f5855675e86
1c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main/* 2c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Copyright (C) 2011-2012 The Android Open Source Project 3c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * 4c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Licensed under the Apache License, Version 2.0 (the "License"); 5c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * you may not use this file except in compliance with the License. 6c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * You may obtain a copy of the License at 7c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * 8c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * http://www.apache.org/licenses/LICENSE-2.0 9c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * 10c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Unless required by applicable law or agreed to in writing, software 11c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * distributed under the License is distributed on an "AS IS" BASIS, 12c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * See the License for the specific language governing permissions and 14c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * limitations under the License. 15c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main */ 16c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 17c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_TAG "libRS_jni" 18c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 19c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <stdlib.h> 20c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <stdio.h> 21c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <fcntl.h> 22c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <unistd.h> 23c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <math.h> 24c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <android/bitmap.h> 25257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#include <android/log.h> 26c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 27dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang#include <rsEnv.h> 28470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang#include "rsDispatch.h" 29470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang#include <dlfcn.h> 30470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 31c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//#define LOG_API ALOG 32c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_API(...) 33c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 34257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#define NELEM(m) (sizeof(m) / sizeof((m)[0])) 35c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 368352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wangtemplate <typename... T> 378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wangvoid UNUSED(T... t) {} 388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ 398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang jint len = 0; \ 408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang void *ptr = nullptr; \ 412e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang void *srcPtr = nullptr; \ 428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang size_t typeBytes = 0; \ 438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang jint relFlag = 0; \ 448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (readonly) { \ 458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \ 462e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang /* readonly = true, also indicates we are copying to the allocation . */ \ 478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang relFlag = JNI_ABORT; \ 488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } \ 498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang switch(dataType) { \ 508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_FLOAT_32: \ 518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jfloatArray)data); \ 528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \ 538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 4; \ 542e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 552e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 562e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 572e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 582e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 642e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 652e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 662e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 672e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 702e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 712e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 722e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \ 748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_FLOAT_64: \ 768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jdoubleArray)data); \ 778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \ 788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 8; \ 792e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 802e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 812e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 822e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 832e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 842e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 852e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 862e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 882e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 932e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 942e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \ 998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_8: \ 1018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_8: \ 1028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jbyteArray)data); \ 1038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \ 1048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 1; \ 1052e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1062e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1072e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1082e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1102e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1112e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1122e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1132e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1142e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1162e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1172e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1182e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1192e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1202e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1212e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1222e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1232e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1248352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \ 1258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1268352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_16: \ 1278352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_16: \ 1288352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jshortArray)data); \ 1298352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetShortArrayElements((jshortArray)data, flag); \ 1308352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 2; \ 1312e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1322e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1332e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1342e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1362e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1372e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1382e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1392e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1402e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1412e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1422e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1432e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1442e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1452e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1462e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1472e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1482e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1492e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \ 1518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_32: \ 1538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_32: \ 1548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jintArray)data); \ 1558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetIntArrayElements((jintArray)data, flag); \ 1568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 4; \ 1572e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1582e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1642e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1652e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1662e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1672e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1682e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1702e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1712e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1722e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1732e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1742e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1752e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \ 1778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 1788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_SIGNED_64: \ 1798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang case RS_TYPE_UNSIGNED_64: \ 1808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len = _env->GetArrayLength((jlongArray)data); \ 1818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang ptr = _env->GetLongArrayElements((jlongArray)data, flag); \ 1828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang typeBytes = 8; \ 1832e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (usePadding) { \ 1842e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang srcPtr = ptr; \ 1852e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang len = len / 3 * 4; \ 1862e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (count == 0) { \ 1872e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang count = len / 4; \ 1882e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1892e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = malloc (len * typeBytes); \ 1902e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang if (readonly) { \ 1912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 1922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1932e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 1942e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 1952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 1962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 1972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang free(ptr); \ 1982e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang ptr = srcPtr; \ 1992e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } else { \ 2002e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang fnc(__VA_ARGS__); \ 2012e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } \ 2028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \ 2038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; \ 2048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang default: \ 2058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang break; \ 2068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } \ 2072e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang UNUSED(len, ptr, srcPtr, typeBytes, relFlag); \ 2088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang} 2098352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 2108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 211c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringToUTF8 { 212c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic: 213c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) { 214c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fCStr = env->GetStringUTFChars(str, NULL); 215c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fLength = env->GetStringUTFLength(str); 216c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 217c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main ~AutoJavaStringToUTF8() { 218c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main fEnv->ReleaseStringUTFChars(fJStr, fCStr); 219c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 220c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char* c_str() const { return fCStr; } 221c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize length() const { return fLength; } 222c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 223c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate: 224c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv* fEnv; 225c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring fJStr; 226c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char* fCStr; 227c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize fLength; 228c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 229c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 230c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringArrayToUTF8 { 231c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic: 232c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength) 233c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main : mEnv(env), mStrings(strings), mStringsLength(stringsLength) { 234c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings = NULL; 235c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray = NULL; 236c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (stringsLength > 0) { 237c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings = (const char **)calloc(stringsLength, sizeof(char *)); 238c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t)); 239c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main for (jsize ct = 0; ct < stringsLength; ct ++) { 240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL); 242c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mSizeArray[ct] = mEnv->GetStringUTFLength(s); 243c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 244c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 245c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 246c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main ~AutoJavaStringArrayToUTF8() { 247c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main for (jsize ct=0; ct < mStringsLength; ct++) { 248c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 249c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main mEnv->ReleaseStringUTFChars(s, mCStrings[ct]); 250c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 251c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(mCStrings); 252c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(mSizeArray); 253c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 254c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **c_str() const { return mCStrings; } 255c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *c_str_len() const { return mSizeArray; } 256c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize length() const { return mStringsLength; } 257c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 258c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate: 259c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv *mEnv; 260c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jobjectArray mStrings; 261c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **mCStrings; 262c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *mSizeArray; 263c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jsize mStringsLength; 264c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 265c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 266470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 267470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang// --------------------------------------------------------------------------- 268470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic dispatchTable dispatchTab; 2696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Incremental Support lib 2706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic dispatchTable dispatchTabInc; 271470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 2727c0de6383be18a1dae1297c54c56f3d9afbeaaadMiao Wangstatic jboolean nLoadSO(JNIEnv *_env, jobject _this, jboolean useNative, jint deviceApi) { 273470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang void* handle = NULL; 274470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang if (useNative) { 275470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang handle = dlopen("libRS.so", RTLD_LAZY | RTLD_LOCAL); 276470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } else { 277470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL); 278470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 279470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang if (handle == NULL) { 280470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang LOG_API("couldn't dlopen %s, %s", filename, dlerror()); 281470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return false; 282470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 283470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 2847c0de6383be18a1dae1297c54c56f3d9afbeaaadMiao Wang if (loadSymbols(handle, dispatchTab, deviceApi) == false) { 285470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang LOG_API("%s init failed!", filename); 286470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return false; 287470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang } 288470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang LOG_API("Successfully loaded %s", filename); 289470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return true; 290470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang} 291470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang 292dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic ioSuppDT ioDispatch; 293dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic jboolean nLoadIOSO(JNIEnv *_env, jobject _this) { 294dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang void* handleIO = NULL; 295dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang handleIO = dlopen("libRSSupportIO.so", RTLD_LAZY | RTLD_LOCAL); 296dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang if (handleIO == NULL) { 297dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang LOG_API("Couldn't load libRSSupportIO.so"); 298dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return false; 299dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang } 300dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang if (loadIOSuppSyms(handleIO, ioDispatch) == false) { 301dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang LOG_API("libRSSupportIO init failed!"); 302dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return false; 303dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang } 304dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang return true; 305dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 306ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 307c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 308c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 3092e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wangstatic void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) { 3102e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytesPad = mSize * 4; 3112e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytes = mSize * 3; 3122e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 3132e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 3142e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang for (int i = 0; i < count; i++) { 3152e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang memcpy(dst, src, sizeBytes); 3162e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang dst += sizeBytesPad; 3172e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang src += sizeBytes; 3182e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } 3192e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang} 3202e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3212e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wangstatic void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) { 3222e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytesPad = mSize * 4; 3232e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int sizeBytes = mSize * 3; 3242e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 3252e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 3262e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang for (int i = 0; i < count; i++) { 3272e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang memcpy(dst, src, sizeBytes); 3282e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang dst += sizeBytes; 3292e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang src += sizeBytesPad; 3302e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang } 3312e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang} 3322e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3332e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 3342e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang// --------------------------------------------------------------------------- 3352e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang 336c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 337bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextFinish(JNIEnv *_env, jobject _this, jlong con) 338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 339bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextFinish, con(%p)", (RsContext)con); 340bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextFinish((RsContext)con); 341c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 342c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 343936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic jlong 344936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID, 345936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong returnValue, jlongArray fieldIDArray, 346936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlongArray valueArray, jintArray sizeArray, 347936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlongArray depClosureArray, jlongArray depFieldIDArray) { 348d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong ret = 0; 349d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 350936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 351936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 352d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 353d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 354d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 355d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 356d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jDepClosures = 357d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->GetLongArrayElements(depClosureArray, nullptr); 358d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize depClosures_length = _env->GetArrayLength(depClosureArray); 359d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jDepFieldIDs = 360d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->GetLongArrayElements(depFieldIDArray, nullptr); 361d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray); 362d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 363d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni size_t numValues, numDependencies; 364d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsScriptFieldID* fieldIDs; 365d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni uintptr_t* values; 366d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsClosure* depClosures; 367d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsScriptFieldID* depFieldIDs; 368d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 369d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 370d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Unmatched field IDs, values, and sizes in closure creation."); 371d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 372d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 373d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 374d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni numValues = (size_t)fieldIDs_length; 375d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 376d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (depClosures_length != depFieldIDs_length) { 377d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Unmatched closures and field IDs for dependencies in closure creation."); 378d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 379d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 380d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 381d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni numDependencies = (size_t)depClosures_length; 382d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 383d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numDependencies > numValues) { 384d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Unexpected number of dependencies in closure creation"); 385d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 386d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 387d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 388d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 389d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Too many arguments or globals in closure creation"); 390d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 391d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 392d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 393d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 394d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs == nullptr) { 395d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 396d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 397d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 398d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numValues; i++) { 399936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 400936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 401936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 402d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni values = (uintptr_t*)alloca(sizeof(uintptr_t) * numValues); 403d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (values == nullptr) { 404d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 405d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 406d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 407d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numValues; i++) { 408936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni values[i] = (uintptr_t)jValues[i]; 409936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 410936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 411d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies); 412d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (depClosures == nullptr) { 413d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 414d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 415936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 416d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numDependencies; i++) { 417936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni depClosures[i] = (RsClosure)jDepClosures[i]; 418936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 419936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 420d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni depFieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numDependencies); 421d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (depFieldIDs == nullptr) { 422d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 423d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 424d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 425d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numDependencies; i++) { 426936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni depFieldIDs[i] = (RsClosure)jDepFieldIDs[i]; 427936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 428936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 429d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni ret = (jlong)(uintptr_t)dispatchTab.ClosureCreate( 430936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, 431d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni fieldIDs, numValues, values, numValues, 432d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni (int*)jSizes, numValues, 433d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni depClosures, numDependencies, 434d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni depFieldIDs, numDependencies); 435d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 436d454f4541683a6bddfa1d00424a71f5855675e86Yang Niexit: 437d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 438d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(depFieldIDArray, jDepFieldIDs, JNI_ABORT); 439d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(depClosureArray, jDepClosures, JNI_ABORT); 440d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 441d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 442d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 443d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 444d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni return ret; 445936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 446936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 447b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wangstatic jlong 448b1c365bfb0566142c49375f09f2b8289182f1f47Miao WangnInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID, 449b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray, 450b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jintArray sizeArray) { 451d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong ret = 0; 452d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 453b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr); 454b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jsize jParamLength = _env->GetArrayLength(paramArray); 455b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 456b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 457d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 458d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 459d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 460d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 461d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 462d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni size_t numValues; 463d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsScriptFieldID* fieldIDs; 464d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni uintptr_t* values; 465d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 466d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 467d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Unmatched field IDs, values, and sizes in closure creation."); 468d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 469d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 470d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 471d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni numValues = (size_t) fieldIDs_length; 472d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 473d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 474d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Too many arguments or globals in closure creation"); 475d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 476d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 477d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 478d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 479d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (fieldIDs == nullptr) { 480d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 481d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 482d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 483d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numValues; i++) { 484b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 485b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang } 486b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 487d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni values = (uintptr_t*)alloca(sizeof(uintptr_t) * numValues); 488d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (values == nullptr) { 489d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 490b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang } 491b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 492d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni for (size_t i = 0; i < numValues; i++) { 493d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni values[i] = (uintptr_t)jValues[i]; 494d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 495b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 496d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni ret = (jlong)(uintptr_t)dispatchTab.InvokeClosureCreate( 497b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, 498d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni fieldIDs, numValues, values, numValues, 499d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni (int*)jSizes, numValues); 500d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 501d454f4541683a6bddfa1d00424a71f5855675e86Yang Niexit: 502d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 503d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 504d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 505d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 506d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseByteArrayElements(paramArray, jParams, JNI_ABORT); 507d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 508d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni return ret; 509b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang} 510b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 511936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void 512936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 513936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jint index, jlong value, jint size) { 514b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang dispatchTab.ClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, 515b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (uintptr_t)value, (size_t)size); 516936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 517936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 518936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic void 519936fbd696aac243a514f74b6fee6efd5959527a4Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 520936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong fieldID, jlong value, jint size) { 521936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni dispatchTab.ClosureSetGlobal((RsContext)con, (RsClosure)closureID, 522b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang (RsScriptFieldID)fieldID, (uintptr_t)value, (size_t)size); 523936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 524936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 525936fbd696aac243a514f74b6fee6efd5959527a4Yang Nistatic long 526e68c5973af1e80c77cab9aea0b77f46a801aef96Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, jstring name, 527b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang jstring cacheDir, jlongArray closureArray) { 528d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni jlong ret = 0; 529d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 530e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni AutoJavaStringToUTF8 nameUTF(_env, name); 531b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 532b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 533936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 534936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 535d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 536d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni RsClosure* closures; 537d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 538d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (numClosures > (jsize) RS_SCRIPT_GROUP_MAX_NUMBER_CLOSURES) { 539d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni LOG_API("Too many closures in script group"); 540d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 541d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 542d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 543d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 544d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni if (closures == nullptr) { 545d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni goto exit; 546d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } 547d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 548936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni for (int i = 0; i < numClosures; i++) { 549936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni closures[i] = (RsClosure)jClosures[i]; 550936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni } 551936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 552d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni ret = (jlong)(uintptr_t)dispatchTab.ScriptGroup2Create( 553e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni (RsContext)con, nameUTF.c_str(), nameUTF.length(), 554e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni cacheDirUTF.c_str(), cacheDirUTF.length(), 555b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang closures, numClosures); 556d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 557d454f4541683a6bddfa1d00424a71f5855675e86Yang Niexit: 558d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 559d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni _env->ReleaseLongArrayElements(closureArray, jClosures, JNI_ABORT); 560d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni 561d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni return ret; 562b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang} 563b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang 564b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wangstatic void 565b1c365bfb0566142c49375f09f2b8289182f1f47Miao WangnScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 566b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 567936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni} 568936fbd696aac243a514f74b6fee6efd5959527a4Yang Ni 569c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 570bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 571c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 572bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 573bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ObjDestroy((RsContext)con, (void *)obj); 574c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 575c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 576c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 577bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 578c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceCreate(JNIEnv *_env, jobject _this) 579c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 580c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceCreate"); 581bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.DeviceCreate(); 582c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 583c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 584c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 585bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 586c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 587c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceDestroy"); 588470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return dispatchTab.DeviceDestroy((RsDevice)dev); 589c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 590c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 591c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 592bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 593c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 594c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 595470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang return dispatchTab.DeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 596c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 597c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 598bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 599ecccf940f72679f7602c52b0b4bcb245acdad55bMiao WangnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 600ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang jint ct, jstring nativeLibDirJava) 601c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 602c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nContextCreate"); 603ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang // Access the NativeLibDir in the Java Context. 604ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang const char * nativeLibDir = _env->GetStringUTFChars(nativeLibDirJava, JNI_FALSE); 605ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang size_t length = (size_t)_env->GetStringUTFLength(nativeLibDirJava); 606ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 607ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang jlong id = (jlong)(uintptr_t)dispatchTab.ContextCreate((RsDevice)dev, ver, 608ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang sdkVer, 609ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang (RsContextType)ct, 0); 610ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang if (dispatchTab.SetNativeLibDir) { 611ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang dispatchTab.SetNativeLibDir((RsContext)id, nativeLibDir, length); 612ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang } 613ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang 614ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang _env->ReleaseStringUTFChars(nativeLibDirJava, nativeLibDir); 615ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang return id; 616c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 617c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 618c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 619c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 620bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 621c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 622bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 623bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextSetPriority((RsContext)con, p); 624c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 625c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 626c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 627c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 628c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 629bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDestroy(JNIEnv *_env, jobject _this, jlong con) 630c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 631bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 632bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextDestroy((RsContext)con); 633c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 634c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 635c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 636bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 637c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 638c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 639470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang dispatchTab.ContextDump((RsContext)con, bits); 640c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 641c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 642c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 643c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jstring 644bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 645c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 646bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con); 647c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main char buf[1024]; 648c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 649c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 650c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 651bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextGetMessage((RsContext)con, 6526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang buf, sizeof(buf), 6536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &receiveLen, sizeof(receiveLen), 6546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &subID, sizeof(subID)); 655c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!id && receiveLen) { 656184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, 657184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "message receive buffer too small. %zu", receiveLen); 658c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 659c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return _env->NewStringUTF(buf); 660c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 661c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 662c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint 663bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 664c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 665c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 666bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 667c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = _env->GetIntArrayElements(data, NULL); 668c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 669c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 670bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextGetMessage((RsContext)con, 6716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len * 4, 6726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &receiveLen, sizeof(receiveLen), 6736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &subID, sizeof(subID)); 674c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!id && receiveLen) { 675184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, 676184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "message receive buffer too small. %zu", receiveLen); 677c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 678c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(data, ptr, 0); 679bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)id; 680c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 681c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 682c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint 683bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 684c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 685bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextPeekMessage, con(%p)", (RsContext)con); 686c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL); 687c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t receiveLen; 688c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t subID; 689bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang int id = dispatchTab.ContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 690c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main &subID, sizeof(subID)); 691c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main auxDataPtr[0] = (jint)subID; 692c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main auxDataPtr[1] = (jint)receiveLen; 693c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 694bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)id; 695c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 696c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 697bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 698c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 699bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextInitToClient, con(%p)", (RsContext)con); 700bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextInitToClient((RsContext)con); 701c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 702c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 703bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 704c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 705bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con); 706bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextDeinitToClient((RsContext)con); 707c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 708c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 709c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 710bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 711c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 712c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = NULL; 713c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = 0; 714c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (data) { 715c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main len = _env->GetArrayLength(data); 716c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *ptr = _env->GetIntArrayElements(data, NULL); 717c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 718bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 719bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 720c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (data) { 721c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 722c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 723c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 724c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 725c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 726c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 727bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 728086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, 729086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni jboolean norm, jint size) 730c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 731bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 732bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang type, kind, norm, size); 733086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)(uintptr_t)dispatchTab.ElementCreate((RsContext)con, 734086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (RsDataType)type, 735086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (RsDataKind)kind, 736bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang norm, size); 737c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 738c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 739bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 740bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementCreate2(JNIEnv *_env, jobject _this, jlong con, 741bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 742c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 743c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main int fieldCount = _env->GetArrayLength(_ids); 744bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementCreate2, con(%p)", (RsContext)con); 745bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 746bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jIds = _env->GetLongArrayElements(_ids, NULL); 747bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL); 748c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 749bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 750bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 751bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 752bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < fieldCount; i ++) { 753bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ids[i] = (RsElement)jIds[i]; 754bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang arraySizes[i] = (uint32_t)jArraySizes[i]; 755bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 756c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 757c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 758c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 759c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **nameArray = names.c_str(); 760c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t *sizeArray = names.c_str_len(); 761c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 7626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong id = (jlong)(uintptr_t)dispatchTab.ElementCreate2((RsContext)con, (RsElement *)ids, 7636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fieldCount, nameArray, 7646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang fieldCount * sizeof(size_t), sizeArray, 7656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)arraySizes, fieldCount); 766c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 767bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(ids); 768bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(arraySizes); 769bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 770bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 771bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return id; 772c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 773c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 774c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 775c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 776bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 777c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 778bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 779bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _IDs, 780c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jobjectArray _names, 781c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jintArray _arraySizes) 782c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 783bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uint32_t dataSize = _env->GetArrayLength(_IDs); 784bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nElementGetSubElements, con(%p)", (RsContext)con); 785c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 786bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang uintptr_t *ids = (uintptr_t *)malloc(dataSize * sizeof(uintptr_t)); 787c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *)); 788c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t)); 789c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 790bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 791bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)dataSize); 792c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 793bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(uint32_t i = 0; i < dataSize; i++) { 794bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang const jlong id = (jlong)(uintptr_t)ids[i]; 795bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang const jint arraySize = (jint)arraySizes[i]; 796c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 797bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->SetLongArrayRegion(_IDs, i, 1, &id); 798bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 799c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 800c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 801c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(ids); 802c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(names); 803c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main free(arraySizes); 804c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 805c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 806c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 807c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 808bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 809bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 810c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 811c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 812c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 813bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv); 814c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 815bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 816bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dimz, mips, faces, yuv); 817c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 818c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 819c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 820c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 821bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 822bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 823bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong pointer) 824c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 825bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 826bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 827bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t) dispatchTab.AllocationCreateTyped((RsContext)con, (RsType)type, 828bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mips, 829bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)usage, (uintptr_t)pointer); 830c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 831c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 832c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 833bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 834c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 835bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits); 836bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 837c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 838c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 839c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 840bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 841dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{ 842bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ioDispatch.sAllocationSetSurface(_env, _this, (RsContext)con, (RsAllocation)alloc, sur, dispatchTab); 843dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 844dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang 845dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void 846bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 847dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{ 848bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationIoSend((RsContext)con, (RsAllocation)alloc); 849dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang} 850dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang 851dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wangstatic void 852bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 853c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 854bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 855bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 856c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 857c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 858c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic size_t GetBitmapSize(JNIEnv *env, jobject jbitmap) { 859c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 860c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 861c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(env, jbitmap, &info); 862c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main size_t s = info.width * info.height; 863c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main switch (info.format) { 864c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGBA_8888: s *= 4; break; 865c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGB_565: s *= 2; break; 866c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main case ANDROID_BITMAP_FORMAT_RGBA_4444: s *= 2; break; 867c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 868c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return s; 869c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 870c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 871bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 872bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 873bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jobject jbitmap, jint usage) 874c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 875bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 876257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines void *pixels = NULL; 877257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 878c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 879257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (pixels != NULL) { 880bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCreateFromBitmap((RsContext)con, 881bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 882bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 883bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang pixels, 884bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap), 885bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang usage); 886257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_unlockPixels(_env, jbitmap); 887257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 888c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 889c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 890c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 891bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 892bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, 893bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint mip, jobject jbitmap, jint usage) 894c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 895bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 896257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines void *pixels = NULL; 897257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 898c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 899257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (pixels != NULL) { 900bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCreateTyped((RsContext)con, 901bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 902bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 903bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uint32_t)usage, 904bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (uintptr_t)pixels); 905257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines AndroidBitmap_unlockPixels(_env, jbitmap); 906257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 907c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 908c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 909c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 910bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 911bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, 912bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint mip, jobject jbitmap, jint usage) 913c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 914c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 915c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 916c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 917bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = 0; 918c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 919bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang id = (jlong)(uintptr_t)dispatchTab.AllocationCubeCreateFromBitmap((RsContext)con, 920bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType)type, 921bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocationMipmapControl)mip, 922bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang pixels, 923bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap), 924bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang usage); 925c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 926c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 927c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 928c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 929c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 930c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 931bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 932c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 933c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 934c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 935c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(_env, jbitmap, &info); 936c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 937c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 938c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 939c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 940c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 941bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.Allocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 0, 942bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, info.width, 943bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang info.height, pixels, GetBitmapSize(_env, jbitmap), 0); 944c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 945c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 946c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 947c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 948c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 949bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 950c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 951c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmapInfo info; 952c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main memset(&info, 0, sizeof(info)); 953c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_getInfo(_env, jbitmap, &info); 954c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 955c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main void *pixels = NULL; 956c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_lockPixels(_env, jbitmap, &pixels); 957c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 958c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (pixels != NULL) { 959bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, pixels, 960bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang GetBitmapSize(_env, jbitmap)); 961c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AndroidBitmap_unlockPixels(_env, jbitmap); 962c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 963c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //bitmap.notifyPixelsChanged(); 964c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 965c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 9668352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 967c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 9688352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 9692e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint count, jobject data, jint sizeBytes, jint dataType, jint mSize, 9702e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jboolean usePadding) 971c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 9728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 9738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 9748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 9758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang dataType); 9762e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation1DData, true, 9772e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 978c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 979c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 980244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 981c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 982244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, 983244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 984c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 985c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 986244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocationElementData1D, con(%p), alloc(%p), xoff(%i), comp(%i), len(%i), " 987244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, compIdx, len, 988244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang sizeBytes); 989244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 990244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang dispatchTab.Allocation1DElementData((RsContext)con, (RsAllocation)alloc, xoff, 991244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, ptr, sizeBytes, compIdx); 992c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 993c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 994c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 995244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 996244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 997244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 998244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint xoff, jint yoff, jint zoff, 999244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 1000244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 1001244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint len = _env->GetArrayLength(data); 1002244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 1003244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 1004244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang sizeBytes); 1005244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1006244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang dispatchTab.AllocationElementData((RsContext)con, (RsAllocation)alloc, 1007244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang xoff, yoff, zoff, 1008244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, ptr, sizeBytes, compIdx); 1009244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1010244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1011244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1012244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 10138352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 1014c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 10158352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 10162e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize, 10172e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jboolean usePadding) 1018c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 10198352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 10208352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 10218352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 10228352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 10232e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h; 10242e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation2DData, true, 10252e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1026c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1027c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1028c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1029bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 1030bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong dstAlloc, jint dstXoff, jint dstYoff, 1031c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dstMip, jint dstFace, 1032c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint width, jint height, 1033bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong srcAlloc, jint srcXoff, jint srcYoff, 1034c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint srcMip, jint srcFace) 1035c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1036c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 1037c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " dstMip(%i), dstFace(%i), width(%i), height(%i)," 1038c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 1039bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 1040c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 1041c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1042bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopy2DRange((RsContext)con, 1043bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)dstAlloc, 1044bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstXoff, dstYoff, 1045bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstMip, dstFace, 1046bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang width, height, 1047bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)srcAlloc, 1048bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcXoff, srcYoff, 1049bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcMip, srcFace); 1050c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1051c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 10528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Java object data into the Allocation pointed to by _alloc. 1053c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 10548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 10552e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType, 10562e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1057c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 10588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 10598352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 10608352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 10618352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang lod, w, h, d, sizeBytes); 10622e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h * d; 10632e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DData, true, 10642e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1065c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1066c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1067c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1068bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 1069bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 1070c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dstMip, 1071c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint width, jint height, jint depth, 1072bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 1073c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint srcMip) 1074c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1075c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 1076c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " dstMip(%i), width(%i), height(%i)," 1077c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 1078bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 1079c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 1080c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1081bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationCopy3DRange((RsContext)con, 1082bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)dstAlloc, 1083bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstXoff, dstYoff, dstZoff, dstMip, 1084bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang width, height, depth, 1085bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)srcAlloc, 1086bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcXoff, srcYoff, srcZoff, srcMip); 1087bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 1088bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 10898352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1090bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic void 10912e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType, 10922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1093bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 10948352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 10958352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 10962e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = 0; 10972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.AllocationRead, false, 10982e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, ptr, len * typeBytes); 1099c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1100c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 11018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1102c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 11042e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint count, jobject data, jint sizeBytes, jint dataType, 11052e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1106c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 11078352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 11088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 11098352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 11102e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.Allocation1DRead, false, 11112e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1112c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1113c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1114244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data. 1115244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1116244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1117244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, 1118244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang jint xoff, jint yoff, jint zoff, 11193bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jint lod, jint compIdx, jobject data, jint sizeBytes) 1120244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 11213bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jint len = _env->GetArrayLength(data); 11223bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang LOG_API("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 11233bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 11243bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang sizeBytes); 11253bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 11263bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang dispatchTab.AllocationElementRead((RsContext)con, (RsAllocation)alloc, 11273bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang xoff, yoff, zoff, 11283bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang lod, ptr, sizeBytes, compIdx); 11293bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1130244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1131244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1132244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 11338352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1134c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11358352bdceb7f0030593db04a06ba8caebf81eaeeaMiao WangnAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 11362e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, 11372e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1138c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 11398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 11408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 11418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 11428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 11432e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h; 11442e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(0, dispatchTab.Allocation2DRead, false, 11452e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1146c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1147c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1148244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1149244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang/* 1150244b72fe088a6393f37dea49ff89cf9df738a492Miao Wangstatic void 1151244b72fe088a6393f37dea49ff89cf9df738a492Miao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 11522e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint w, jint h, jint d, jobject data, int sizeBytes, int dataType, 11532e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang jint mSize, jboolean usePadding) 1154244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang{ 1155244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 1156244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang LOG_API("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 1157244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 1158244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang lod, w, h, d, sizeBytes); 11592e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang int count = w * h * d; 11602e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang PER_ARRAY_TYPE(nullptr, dispatchTab.Allocation3DRead, false, 11612e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1162244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang} 1163244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang*/ 1164244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang 1165bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1166bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1167c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1168bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 1169bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t) dispatchTab.AllocationGetType((RsContext)con, (RsAllocation)a); 1170c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1171c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1172c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1173bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 1174c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1175bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 1176bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc, dimX); 1177bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.AllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 1178c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1179c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1180c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1181c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1182c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot, jboolean mUseInc) 1184c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1185bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", 1186bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 11876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 11886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 11896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 11906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 11916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1192c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1193c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1194c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 11956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val, jboolean mUseInc) 1196c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1197bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, 1198bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 11996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 12016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 12036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1204c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1205c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1206c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc) 1208c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1209bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, 1210bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 12116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 12136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 12156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1216c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1217c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1218c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val, jboolean mUseInc) 1220c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1221bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, 1222bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 12236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 12256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 12276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1228c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1229c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1230c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val, jboolean mUseInc) 1232c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1233bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, 1234bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 12356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 12376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 12396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1242c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val, jboolean mUseInc) 1244c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1245bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, 1246bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, slot, val); 12476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 1249d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni } else { 12506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 12516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1252c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1253c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1254c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc) 1256c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1257bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1258c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1259c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 12606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 12626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 12646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1265c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1266c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1267c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1268c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1269bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 12706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong elem, jintArray dims, jboolean mUseInc) 1271c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1272bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1273c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1274c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 1275c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1276c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint *dimsPtr = _env->GetIntArrayElements(dims, NULL); 12776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 12796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)dimsPtr, dimsLen); 12806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 12816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 12826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (const uint32_t *)dimsPtr, dimsLen); 12836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1284c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1285c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1286c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1287c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1288c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1289c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 12906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone, jboolean mUseInc) 1291c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1292bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", (RsContext)con, 1293bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)script, (const char *)timeZone); 1294c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1295c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint length = _env->GetArrayLength(timeZone); 1296c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* timeZone_ptr; 1297c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 12986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 12996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 13006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 13026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1303c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1304c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (timeZone_ptr) { 1305c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1306c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1307c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1308c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1309c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot, jboolean mUseInc) 1311c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1312bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 13136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptInvoke((RsContext)con, (RsScript)obj, slot); 13156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptInvoke((RsContext)con, (RsScript)obj, slot); 13176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1318c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1319c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1320c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jboolean mUseInc) 1322c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1323bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1324c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(data); 1325c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(data, NULL); 13266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 13286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 13306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1331c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1332c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1333c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1334c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 13366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong script, jint slot, jlong ain, jlong aout, jboolean mUseInc) 1337c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1338bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 13396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 13416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 13426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 13436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, NULL, 0); 13446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 13466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 13476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, NULL, 0); 13486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1349c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1350c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 13526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jlong script, jint slot, jlong ain, jlong aout, jbyteArray params, jboolean mUseInc) 1353c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1354bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1355c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1356c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 13576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 13596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 13606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 13616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, NULL, 0); 13626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 13646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 13656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, NULL, 0); 13666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1367c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1368c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1369c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1370c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 13716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1372bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1373c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint xstart, jint xend, 13746f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1375c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1376bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1377c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1378c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1379c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1380c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1381c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1382c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1383c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1384c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1385c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1386c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 13876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 13886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 13896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 13906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 13916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 13926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 13936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 13946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 13956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang NULL, 0, &sc, sizeof(sc)); 13966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1397c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1398c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1399c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 14006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con, jlong incCon, 1401bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong script, jint slot, jlong ain, jlong aout, 1402c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray params, jint xstart, jint xend, 14036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint ystart, jint yend, jint zstart, jint zend, jboolean mUseInc) 1404c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1405bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 1406c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint len = _env->GetArrayLength(params); 1407c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte *ptr = _env->GetByteArrayElements(params, NULL); 1408c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main RsScriptCall sc; 1409c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xStart = xstart; 1410c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.xEnd = xend; 1411c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yStart = ystart; 1412c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.yEnd = yend; 1413c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zStart = zstart; 1414c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.zEnd = zend; 1415c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 1416c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayStart = 0; 1417c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main sc.arrayEnd = 0; 14186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ContextFinish((RsContext)con); 14206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ScriptForEach((RsContext)incCon, (RsScript)script, slot, 14216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 14226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 14236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTab.ScriptForEach((RsContext)con, (RsScript)script, slot, 14256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsAllocation)ain, (RsAllocation)aout, 14266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ptr, len, &sc, sizeof(sc)); 14276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1428c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT); 1429c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1430c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1431c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ----------------------------------- 1432c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1433bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1434bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 1435c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jstring resName, jstring cacheDir, 1436c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyteArray scriptRef, jint length) 1437c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1438bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptCCreate, con(%p)", (RsContext)con); 1439c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1440c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 resNameUTF(_env, resName); 1441c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 1442bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong ret = 0; 1443c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jbyte* script_ptr = NULL; 1444c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint _exception = 0; 1445c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint remaining; 1446c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (!scriptRef) { 1447c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1448c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 1449c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1450c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1451c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (length < 0) { 1452c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1453c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 1454c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1455c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1456c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main remaining = _env->GetArrayLength(scriptRef); 1457c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (remaining < length) { 1458c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception = 1; 1459c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //jniThrowException(_env, "java/lang/IllegalArgumentException", 1460c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main // "length > script.length - offset"); 1461c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto exit; 1462c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1463c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main script_ptr = (jbyte *) 1464c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 1465c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1466c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main //rsScriptCSetText(con, (const char *)script_ptr, length); 1467c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1468bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang ret = (jlong)(uintptr_t)dispatchTab.ScriptCCreate((RsContext)con, 1469bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang resNameUTF.c_str(), resNameUTF.length(), 1470bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang cacheDirUTF.c_str(), cacheDirUTF.length(), 1471bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (const char *)script_ptr, length); 1472c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1473c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainexit: 1474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (script_ptr) { 1475c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 1476c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main _exception ? JNI_ABORT: 0); 1477c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1478c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1479bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)ret; 1480c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1481c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1482bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 14836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid, jboolean mUseInc) 1484c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1485bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid); 14866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 14886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 14896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 14906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1491c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1492c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1493bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 14946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig, jboolean mUseInc) 1495c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1496bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 1497bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)sid, slot, sig); 14986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 14996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 1500d454f4541683a6bddfa1d00424a71f5855675e86Yang Ni slot, sig); 15016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptKernelIDCreate((RsContext)con, (RsScript)sid, 15036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang slot, sig); 15046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1505c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1506c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1507bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1508086010500c28e2bca57ea583d3f38da9a2f2f414Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 1509086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{ 1510086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni LOG_API("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con, 1511086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni (void *)sid, slot); 1512086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return (jlong)dispatchTab.ScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 1513086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni} 1514086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni 1515086010500c28e2bca57ea583d3f38da9a2f2f414Yang Nistatic jlong 15166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jboolean mUseInc) 1517c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1518bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot); 15196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseInc) { 15206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 15216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 15226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTab.ScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 15236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 1524c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1525c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1526bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1527bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 1528bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlongArray _dstk, jlongArray _dstf, jlongArray _types) 1529bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{ 1530bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con); 1531bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1532bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint kernelsLen = _env->GetArrayLength(_kernels); 1533bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 1534bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 1535bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < kernelsLen; ++i) { 1536bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 1537bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1538bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1539bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint srcLen = _env->GetArrayLength(_src); 1540bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 1541bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 1542bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < srcLen; ++i) { 1543bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 1544bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1545bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1546bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint dstkLen = _env->GetArrayLength(_dstk); 1547bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 1548bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 1549bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstkLen; ++i) { 1550bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 1551bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1552bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1553bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint dstfLen = _env->GetArrayLength(_dstf); 1554bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 1555bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 1556bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < dstfLen; ++i) { 1557bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 1558bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1559bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1560bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jint typesLen = _env->GetArrayLength(_types); 1561bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 1562bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 1563bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang for(int i = 0; i < typesLen; ++i) { 1564bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang typesPtr[i] = (RsType)jTypesPtr[i]; 1565bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 1566bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1567bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang jlong id = (jlong)(uintptr_t) dispatchTab.ScriptGroupCreate((RsContext)con, 1568bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 1569bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 1570bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 1571bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 1572bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsType *)typesPtr, typesLen * sizeof(RsType)); 1573bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1574bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(kernelsPtr); 1575bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(srcPtr); 1576bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstkPtr); 1577bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(dstfPtr); 1578bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang free(typesPtr); 1579bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 1580bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 1581bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 1582bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 1583bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 1584c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return id; 1585c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1586c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1587c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1588bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 1589c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1590bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 1591bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 1592bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 1593bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 1594c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1595c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1596c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1597bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 1598c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1599bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 1600bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (void *)gid, (void *)kid, (void *)alloc); 1601bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, 1602bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsAllocation)alloc); 1603c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1604c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1605c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void 1606bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 1607c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1608bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 1609bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang dispatchTab.ScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 1610c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1611c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1612c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 1613c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1614bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jlong 1615bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 1616c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 1617c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1618bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang LOG_API("nSamplerCreate, con(%p)", (RsContext)con); 1619bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jlong)(uintptr_t)dispatchTab.SamplerCreate((RsContext)con, 1620bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)magFilter, 1621bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)minFilter, 1622bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapS, 1623bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapT, 1624bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang (RsSamplerValue)wrapR, 1625bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang aniso); 1626bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang} 1627bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1628bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangstatic jint 1629bec39b6de685a7dddb1925c7e9f83fae20388de3Miao WangnSystemGetPointerSize(JNIEnv *_env, jobject _this) { 1630bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang return (jint)sizeof(void*); 1631c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1632c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 16336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// --------------------------------------------------------------------------- 16346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// For Incremental Intrinsic Support 16356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic bool nIncLoadSO() { 16366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* handle = NULL; 16376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL); 16386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (handle == NULL) { 16396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("couldn't dlopen %s, %s", filename, dlerror()); 16406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 16416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 16426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (loadSymbols(handle, dispatchTabInc) == false) { 16446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("%s init failed!", filename); 16456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return false; 16466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 16476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("Successfully loaded %s", filename); 16486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return true; 16496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 16506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 16526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// To create/destroy a dummy context 16536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 16546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 16556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 16566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 16576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ObjDestroy((RsContext)con, (void *)obj); 16586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 16596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 16626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceCreate(JNIEnv *_env, jobject _this) 16636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 16646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceCreate"); 16656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.DeviceCreate(); 16666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 16676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 16696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 16706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 16716f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nDeviceDestroy"); 16726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return dispatchTabInc.DeviceDestroy((RsDevice)dev); 16736f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 16746f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 16766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct) 16776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 16786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextCreate"); 16796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang //The compat context for incremental support will be synchronous. 16806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ContextCreate((RsDevice)dev, ver, sdkVer, 16816f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsContextType)ct, 16826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_CONTEXT_SYNCHRONOUS); 16836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 16846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 16866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextFinish(JNIEnv *_env, jobject _this, jlong con) 16876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 16886f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextFinish, con(%p)", (RsContext)con); 16896f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextFinish((RsContext)con); 16906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 16916f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic void 16936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncContextDestroy(JNIEnv *_env, jobject _this, jlong con) 16946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 16956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nContextDestroy, con(%p)", (RsContext)con); 16966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dispatchTabInc.ContextDestroy((RsContext)con); 16976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 16986f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 16996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 17006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Element 17016f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 17026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size) 17036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 17046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, 17056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang type, kind, norm, size); 17066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.ElementCreate((RsContext)con, (RsDataType)type, 17076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (RsDataKind)kind, norm, size); 17086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 17096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 17106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create dummy Type 17116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 17126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 17136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 17146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 17156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 17166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, eid, dimx, dimy, dimz, mips, faces, yuv); 17176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 17186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t)dispatchTabInc.TypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, 17196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang dimz, mips, faces, yuv); 17206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 17216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 17226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// ----------------------------------- 17236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Create Allocation from pointer 17246f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wangstatic jlong 17256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao WangnIncAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong incCon, jlong alloc, jlong type) 17266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{ 17276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 17286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang incCon, (RsElement)type, mips, usage, (void *)pointer); 17296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang size_t strideIn; 17306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang void* pIn = NULL; 17316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RsAllocation ainI = NULL; 17326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (alloc != 0) { 17336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang pIn = dispatchTab.AllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 17346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 17356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang &strideIn, sizeof(size_t)); 17366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ainI = dispatchTabInc.AllocationCreateTyped((RsContext)incCon, (RsType)type, 17376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_MIPMAP_NONE, 17386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_SHARED, 17396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang (uintptr_t)pIn); 17406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 17416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return (jlong)(uintptr_t) ainI; 17426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang} 1743c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 17442e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang// --------------------------------------------------------------------------- 1745c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1746bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1747c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic const char *classPathName = "android/support/v8/renderscript/RenderScript"; 1748c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1749c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic JNINativeMethod methods[] = { 17507c0de6383be18a1dae1297c54c56f3d9afbeaaadMiao Wang{"nLoadSO", "(ZI)Z", (bool*)nLoadSO }, 1751dd12e72228ea20b7fdea4dbf32c88291aef6d552Miao Wang{"nLoadIOSO", "()Z", (bool*)nLoadIOSO }, 1752bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 1753bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 1754bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 1755bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 1756bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 1757bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 1758bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 1759bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 1760c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1761c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1762c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// All methods below are thread protected in java. 1763ecccf940f72679f7602c52b0b4bcb245acdad55bMiao Wang{"rsnContextCreate", "(JIIILjava/lang/String;)J", (void*)nContextCreate }, 1764bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 1765bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 1766bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 1767bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextDump", "(JI)V", (void*)nContextDump }, 1768bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 1769b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 1770b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 1771b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 1772b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 1773bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 1774bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1775bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 1776bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 1777bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 1778bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1779bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 1780bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1781bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 1782bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 1783bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 1784bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 1785bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1786bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 1787bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 1788bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1789bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 1790bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 1791bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 17922e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 1793bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationElementData1D", "(JJIII[BI)V", (void*)nAllocationElementData1D }, 1794244b72fe088a6393f37dea49ff89cf9df738a492Miao Wang//{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 17952e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 1796bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 17972e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 1798bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 17992e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 18002e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 18013bc17a5878f014a61d67e38901f310fd77aeaeacMiao Wang//{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 18022e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 18032e1cfff791e07a1caa8cb5ece86e8627f4be8b3fMiao Wang//{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 1804bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 1805bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 1806bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 1807bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 18086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptBindAllocation", "(JJJIZ)V", (void*)nScriptBindAllocation }, 18096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetTimeZone", "(JJ[BZ)V", (void*)nScriptSetTimeZone }, 18106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvoke", "(JJIZ)V", (void*)nScriptInvoke }, 18116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptInvokeV", "(JJI[BZ)V", (void*)nScriptInvokeV }, 18126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJZ)V", (void*)nScriptForEach }, 18136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEach", "(JJJIJJ[BZ)V", (void*)nScriptForEachV }, 18146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJIIIIIIZ)V", (void*)nScriptForEachClipped }, 18156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptForEachClipped", "(JJJIJJ[BIIIIIIZ)V", (void*)nScriptForEachClippedV }, 18166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarI", "(JJIIZ)V", (void*)nScriptSetVarI }, 18176f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarJ", "(JJIJZ)V", (void*)nScriptSetVarJ }, 18186f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarF", "(JJIFZ)V", (void*)nScriptSetVarF }, 18196f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarD", "(JJIDZ)V", (void*)nScriptSetVarD }, 18206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarV", "(JJI[BZ)V", (void*)nScriptSetVarV }, 18216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarVE", "(JJI[BJ[IZ)V", (void*)nScriptSetVarVE }, 18226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptSetVarObj", "(JJIJZ)V", (void*)nScriptSetVarObj }, 1823bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1824bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 18256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptIntrinsicCreate", "(JIJZ)J", (void*)nScriptIntrinsicCreate }, 18266f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptKernelIDCreate", "(JJIIZ)J", (void*)nScriptKernelIDCreate }, 1827086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 18286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnScriptFieldIDCreate", "(JJIZ)J", (void*)nScriptFieldIDCreate }, 1829bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 1830e68c5973af1e80c77cab9aea0b77f46a801aef96Yang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;Ljava/lang/String;[J)J", (void*)nScriptGroup2Create }, 1831bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 1832bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 1833bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 1834b1c365bfb0566142c49375f09f2b8289182f1f47Miao Wang{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 1835bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 1836bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 1837c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1838bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 18396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 18406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang// Entry points for Inc libRSSupport 18416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncLoadSO", "()Z", (bool*)nIncLoadSO }, 18426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceCreate", "()J", (void*)nIncDeviceCreate }, 18436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"nIncDeviceDestroy", "(J)V", (void*)nIncDeviceDestroy }, 18446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextCreate", "(JIII)J", (void*)nIncContextCreate }, 18456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextFinish", "(J)V", (void*)nIncContextFinish }, 18466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncContextDestroy", "(J)V", (void*)nIncContextDestroy }, 18476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncObjDestroy", "(JJ)V", (void*)nIncObjDestroy }, 18486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncElementCreate", "(JJIZI)J", (void*)nIncElementCreate }, 18496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncTypeCreate", "(JJIIIZZI)J", (void*)nIncTypeCreate }, 18506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang{"rsnIncAllocationCreateTyped", "(JJJJ)J", (void*)nIncAllocationCreateTyped }, 1851c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}; 1852c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1853c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// --------------------------------------------------------------------------- 1854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1855c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainjint JNI_OnLoad(JavaVM* vm, void* reserved) 1856c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{ 1857c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main JNIEnv* env = NULL; 1858257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines jclass clazz = NULL; 1859c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main jint result = -1; 1860c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1861c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 1862184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 1863184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: GetEnv failed\n"); 1864257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 1865257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 1866257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env == NULL) { 1867184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: env == NULL"); 1868257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines goto bail; 1869257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 1870257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines 1871257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines clazz = env->FindClass(classPathName); 1872257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (clazz == NULL) { 1873c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 1874c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1875c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1876257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (env->RegisterNatives(clazz, methods, NELEM(methods)) < 0) { 1877184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, 1878184d51999d546d11dd18d2f5f848871f8459a230Tim Murray // "ERROR: MediaPlayer native registration failed\n"); 1879c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main goto bail; 1880c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main } 1881c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1882c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main /* success -- return valid version number */ 1883c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main result = JNI_VERSION_1_4; 1884c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main 1885c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainbail: 1886c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main return result; 1887c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main} 1888