android_renderscript_RenderScript.cpp revision 9cb16a2f91c79845e5425fbf55f3b679fb18a4dd
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 24cbe25a86b4aa3353c8016a129028671e902611fStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project 3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License. 6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at 7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software 11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and 14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License. 15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */ 16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams#define LOG_TAG "libRS_jni" 18f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdlib.h> 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdio.h> 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <fcntl.h> 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <unistd.h> 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <math.h> 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <utils/misc.h> 2509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer#include <inttypes.h> 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 27eece0dda56ae29fff6e9003df97594f6ac50b6e2Derek Sollenberger#include <SkBitmap.h> 28ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams 29b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/Asset.h> 30b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h> 31b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h> 32f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h" 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h" 35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h" 36ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h" 37b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h" 38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 391d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rs.h> 401d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rsEnv.h> 41fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams#include <gui/Surface.h> 42d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden#include <gui/GLConsumer.h> 43faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h> 44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 453762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE 4667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampestatic constexpr bool kLogApi = false; 47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 48d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android; 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 5067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampetemplate <typename... T> 5167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampevoid UNUSED(T... t) {} 5267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe 53414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ 54e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams jint len = 0; \ 55488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes void *ptr = nullptr; \ 5687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang void *srcPtr = nullptr; \ 5721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams size_t typeBytes = 0; \ 58414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines jint relFlag = 0; \ 59414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines if (readonly) { \ 60414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \ 6187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang /* readonly = true, also indicates we are copying to the allocation . */ \ 62414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines relFlag = JNI_ABORT; \ 63414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines } \ 64e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams switch(dataType) { \ 65e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_32: \ 66e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jfloatArray)data); \ 67e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \ 6821659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 6987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 7087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 7187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 7287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 7387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 7487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 7587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 7687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 7787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 7887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 7987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 8087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 8287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 8387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 8487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 8587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 8687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 88414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \ 89e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 90e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_64: \ 91e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jdoubleArray)data); \ 92e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \ 9321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 9487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 9587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 9687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 9787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 9887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 9987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 10087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 10187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 10287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 10387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 10487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 10587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 10687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 10787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 10887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 10987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 11087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 11187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 11287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 113414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \ 114e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 115e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_8: \ 116e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_8: \ 117e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jbyteArray)data); \ 118e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \ 11921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 1; \ 12087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 12187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 12287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 12387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 12487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 12587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 12687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 12787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 12887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 12987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 13087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 13187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 13287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 13387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 13487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 13587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 13687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 13787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 13887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 139414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \ 140e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 141e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_16: \ 142e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_16: \ 143e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jshortArray)data); \ 144e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetShortArrayElements((jshortArray)data, flag); \ 14521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 2; \ 14687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 14787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 14887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 14987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 15087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 15187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 15287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 15387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 15487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 15587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 15687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 15787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 15887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 15987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 16087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 16187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 16287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 16387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 16487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 165414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \ 166e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 167e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_32: \ 168e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_32: \ 169e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jintArray)data); \ 170e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetIntArrayElements((jintArray)data, flag); \ 17121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 17287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 17387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 17487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 17587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 17687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 17787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 17887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 17987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 18087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 18187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 18287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 18387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 18487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 18587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 18687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 18787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 18887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 18987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 19087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 191414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \ 192e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 193e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_64: \ 194e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_64: \ 195e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jlongArray)data); \ 196e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetLongArrayElements((jlongArray)data, flag); \ 19721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 19887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 19987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 20087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 20187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 20287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 20387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 20487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 20587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 20687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 20787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 20887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 20987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 21087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 21187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 21287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 21387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 21487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 21587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 21687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 217414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \ 218e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 219e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams default: \ 220e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams break; \ 221e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams } \ 22287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang UNUSED(len, ptr, srcPtr, typeBytes, relFlag); \ 223e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams} 224e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 225e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 226b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 { 227b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic: 2282123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) { 229488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes fCStr = env->GetStringUTFChars(str, nullptr); 230b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fLength = env->GetStringUTFLength(str); 231b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 2322123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringToUTF8() { 233b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fEnv->ReleaseStringUTFChars(fJStr, fCStr); 234b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 235b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* c_str() const { return fCStr; } 236b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize length() const { return fLength; } 237b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 238b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate: 239b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk JNIEnv* fEnv; 240b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fJStr; 241b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* fCStr; 242b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize fLength; 243b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}; 244b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 2452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 { 2462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic: 2472123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength) 2482123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk : mEnv(env), mStrings(strings), mStringsLength(stringsLength) { 249488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings = nullptr; 250488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mSizeArray = nullptr; 2512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk if (stringsLength > 0) { 2522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mCStrings = (const char **)calloc(stringsLength, sizeof(char *)); 2532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t)); 2542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct = 0; ct < stringsLength; ct ++) { 2552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 256488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings[ct] = mEnv->GetStringUTFChars(s, nullptr); 2572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray[ct] = mEnv->GetStringUTFLength(s); 2582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringArrayToUTF8() { 2622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct=0; ct < mStringsLength; ct++) { 2632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 2642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mEnv->ReleaseStringUTFChars(s, mCStrings[ct]); 2652123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2662123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mCStrings); 2672123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mSizeArray); 2682123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2692123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **c_str() const { return mCStrings; } 2702123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *c_str_len() const { return mSizeArray; } 2712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize length() const { return mStringsLength; } 2722123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 2732123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate: 2742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk JNIEnv *mEnv; 2752123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jobjectArray mStrings; 2762123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **mCStrings; 2772123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *mSizeArray; 2782123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize mStringsLength; 2792123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk}; 2802123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 281d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 282d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 283ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0; 284ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0; 285d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 286d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this) 287d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 288eff663f391fa4f119685d5c14489b94661ea126fTim Murray gContextId = _env->GetFieldID(_this, "mContext", "J"); 289ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams 290ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams jclass bitmapClass = _env->FindClass("android/graphics/Bitmap"); 29136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J"); 292d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 293d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 294d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 295d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 29687e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) { 29787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytesPad = mSize * 4; 29887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytes = mSize * 3; 29987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 30087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 30187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang for (int i = 0; i < count; i++) { 30287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang memcpy(dst, src, sizeBytes); 30387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang dst += sizeBytesPad; 30487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang src += sizeBytes; 30587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } 30687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang} 30787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 30887e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) { 30987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytesPad = mSize * 4; 31087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytes = mSize * 3; 31187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 31287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 31387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang for (int i = 0; i < count; i++) { 31487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang memcpy(dst, src, sizeBytes); 31587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang dst += sizeBytes; 31687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang src += sizeBytesPad; 31787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } 31887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang} 31987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 32087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 32187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang// --------------------------------------------------------------------------- 3223eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void 323eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con) 32496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{ 32567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 32667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextFinish, con(%p)", (RsContext)con); 32767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 328eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextFinish((RsContext)con); 32996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams} 33096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams 331281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic jlong 332281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID, 333281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong returnValue, jlongArray fieldIDArray, 334281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray valueArray, jintArray sizeArray, 335281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray depClosureArray, jlongArray depFieldIDArray) { 336281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 337281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 338281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsScriptFieldID* fieldIDs = 339281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length); 340281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i< fieldIDs_length; i++) { 341281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 342281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 343281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 344281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 345281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 346281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length); 347281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < values_length; i++) { 348281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni values[i] = (uintptr_t)jValues[i]; 349281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 350281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 351281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr); 352281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 353281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 354281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jDepClosures = 355281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni _env->GetLongArrayElements(depClosureArray, nullptr); 356281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize depClosures_length = _env->GetArrayLength(depClosureArray); 357281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsClosure* depClosures = 358281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length); 359281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < depClosures_length; i++) { 360281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depClosures[i] = (RsClosure)jDepClosures[i]; 361281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 362281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 363281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jDepFieldIDs = 364281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni _env->GetLongArrayElements(depFieldIDArray, nullptr); 365281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray); 366281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsScriptFieldID* depFieldIDs = 367281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length); 368281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < depClosures_length; i++) { 369281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depFieldIDs[i] = (RsClosure)jDepFieldIDs[i]; 370281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 371281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 372281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni return (jlong)(uintptr_t)rsClosureCreate( 373281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, 374281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length, 3754c93c8c93a66a8932d84a52bd922c3b7ad1565bbYang Ni (int*)sizes, (size_t)sizes_length, 376281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depClosures, (size_t)depClosures_length, 377281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depFieldIDs, (size_t)depFieldIDs_length); 378281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 379281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 380be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 381be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID, 382be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray, 383be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jintArray sizeArray) { 384be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr); 385be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize jParamLength = _env->GetArrayLength(paramArray); 386be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 387be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 388be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 389be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni RsScriptFieldID* fieldIDs = 390be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length); 391be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni for (int i = 0; i< fieldIDs_length; i++) { 392be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 393be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 394be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 395be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 396be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 397be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length); 398be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni for (int i = 0; i < values_length; i++) { 399be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni values[i] = (uintptr_t)jValues[i]; 400be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 401be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 402be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr); 403be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 404be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 405be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return (jlong)(uintptr_t)rsInvokeClosureCreate( 406be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, 407be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length, 4084c93c8c93a66a8932d84a52bd922c3b7ad1565bbYang Ni (int*)sizes, (size_t)sizes_length); 409be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 410be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 411281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 412281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 413281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jint index, jlong value, jint size) { 414281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, 415281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (uintptr_t)value, (size_t)size); 416281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 417281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 418281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 419281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 420281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong fieldID, jlong value, jint size) { 421281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetGlobal((RsContext)con, (RsClosure)closureID, 422281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsScriptFieldID)fieldID, (uintptr_t)value, (size_t)size); 423281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 424281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 425281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic long 426281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, 427ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni jstring cacheDir, jlongArray closureArray) { 428ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 429ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni 430281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 431281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 432281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 433281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < numClosures; i++) { 434281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni closures[i] = (RsClosure)jClosures[i]; 435281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 436281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 437ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni return (jlong)(uintptr_t)rsScriptGroup2Create( 438ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni (RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length(), 439ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni closures, numClosures); 440281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 441281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 442281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 443281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 444281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 445281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 446281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 44796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void 44825207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 44925207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 45025207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY, 45125207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 45225207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 45325207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 45425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 45525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 45625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 45725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 45825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 45925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 46025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 46125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 46225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 46325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.f = alpha; 46425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.f = beta; 46525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 46625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 46725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 46825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 46925207df658d6a8a3e885c7017fcc25702363583cTim Murray 47025207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 47125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 47225207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 47325207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 47425207df658d6a8a3e885c7017fcc25702363583cTim Murray 47525207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 47625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 47725207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 47825207df658d6a8a3e885c7017fcc25702363583cTim Murray} 47925207df658d6a8a3e885c7017fcc25702363583cTim Murray 48025207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 48125207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 48225207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 48325207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY, 48425207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 48525207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 48625207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 48725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 48825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 48925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 49025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 49125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 49225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 49325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 49425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 49525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 49625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.d = alpha; 49725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.d = beta; 49825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 49925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 50025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 50125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 50225207df658d6a8a3e885c7017fcc25702363583cTim Murray 50325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 50425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 50525207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 50625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 50725207df658d6a8a3e885c7017fcc25702363583cTim Murray 50825207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 50925207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 51025207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 51125207df658d6a8a3e885c7017fcc25702363583cTim Murray} 51225207df658d6a8a3e885c7017fcc25702363583cTim Murray 51325207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 51425207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 51525207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 51625207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX, 51725207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 51825207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 51925207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 52025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 52125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 52225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 52325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 52425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 52525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 52625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 52725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 52825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 52925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.r = alphaX; 53025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.i = alphaY; 53125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.c.r = betaX; 53225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.c.r = betaY; 53325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 53425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 53525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 53625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 53725207df658d6a8a3e885c7017fcc25702363583cTim Murray 53825207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 53925207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 54025207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 54125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 54225207df658d6a8a3e885c7017fcc25702363583cTim Murray 54325207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 54425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 54525207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 54625207df658d6a8a3e885c7017fcc25702363583cTim Murray} 54725207df658d6a8a3e885c7017fcc25702363583cTim Murray 54825207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 54925207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 55025207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 55125207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX, 55225207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 55325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 55425207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 55525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 55625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 55725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 55825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 55925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 56025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 56125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 56225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 56325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 56425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.r = alphaX; 56525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.i = alphaY; 56625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.z.r = betaX; 56725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.z.r = betaY; 56825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 56925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 57025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 57125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 57225207df658d6a8a3e885c7017fcc25702363583cTim Murray 57325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 57425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 57525207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 57625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 57725207df658d6a8a3e885c7017fcc25702363583cTim Murray 57825207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 57925207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 58025207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 58125207df658d6a8a3e885c7017fcc25702363583cTim Murray} 58225207df658d6a8a3e885c7017fcc25702363583cTim Murray 58325207df658d6a8a3e885c7017fcc25702363583cTim Murray 58425207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 5859cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim MurraynScriptIntrinsicBLAS_BNNM(JNIEnv *_env, jobject _this, jlong con, jlong id, jint M, jint N, jint K, 5869cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray jlong A, jint a_offset, jlong B, jint b_offset, jlong C, jint c_offset, 5879cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray jint c_mult_int) { 5889cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray RsBlasCall call; 5899cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray memset(&call, 0, sizeof(call)); 5909cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.func = RsBlas_bnnm; 5919cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.M = M; 5929cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.N = N; 5939cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.K = K; 5949cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.a_offset = a_offset; 5959cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.b_offset = b_offset; 5969cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.c_offset = c_offset; 5979cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.c_mult_int = c_mult_int; 5989cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 5999cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray RsAllocation in_allocs[3]; 6009cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[0] = (RsAllocation)A; 6019cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[1] = (RsAllocation)B; 6029cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[2] = (RsAllocation)C; 6039cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 6049cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 6059cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs, sizeof(in_allocs), nullptr, 6069cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray &call, sizeof(call), nullptr, 0); 6079cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray} 6089cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 6099cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 6109cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murraystatic void 611460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str) 6123eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{ 61367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 61467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 61567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 6163eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jint len = _env->GetArrayLength(str); 6173eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0); 618eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len); 6193eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT); 6203eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams} 6213eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 622fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring 623460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj) 624fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{ 62567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 62667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 62767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 628488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes const char *name = nullptr; 629eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaGetName((RsContext)con, (void *)obj, &name); 630488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if(name == nullptr || strlen(name) == 0) { 631488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes return nullptr; 632581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk } 633fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk return _env->NewStringUTF(name); 634fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk} 635fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk 6367ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void 637460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 6387ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{ 63967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 64067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 64167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 642eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsObjDestroy((RsContext)con, (void *)obj); 6437ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams} 6447ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams 6453eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// --------------------------------------------------------------------------- 6463eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 647eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 648d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this) 649d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 65067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 65167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceCreate"); 65267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 6533aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsDeviceCreate(); 654d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 655d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 656d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 6575eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 658d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 65967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 66067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceDestroy"); 66167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 662d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return rsDeviceDestroy((RsDevice)dev); 663d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 664d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 665ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void 6665eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 667ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 66867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 66967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 67067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 671ebfb436a49673693b98469683451bd9ede797557Jason Sams return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 672ebfb436a49673693b98469683451bd9ede797557Jason Sams} 673ebfb436a49673693b98469683451bd9ede797557Jason Sams 674eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 67581cd2b18bd36285d1843f78418282e1dad156fbdJason SamsnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint flags, jint sdkVer, jint contextType) 676d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 67767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 67867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreate"); 67967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 68081cd2b18bd36285d1843f78418282e1dad156fbdJason Sams return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, 0, sdkVer, (RsContextType)contextType, flags); 681704ff64b099406bb328898a7443921f22dbffd6dJason Sams} 682704ff64b099406bb328898a7443921f22dbffd6dJason Sams 683eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 6845eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 6850e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint colorMin, jint colorPref, 6860e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint alphaMin, jint alphaPref, 6870e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint depthMin, jint depthPref, 6880e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint stencilMin, jint stencilPref, 6890e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint samplesMin, jint samplesPref, jfloat samplesQ, 6900e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint dpi) 69111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{ 69211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams RsSurfaceConfig sc; 69311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaMin = alphaMin; 69411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaPref = alphaPref; 69511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorMin = colorMin; 69611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorPref = colorPref; 69711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthMin = depthMin; 69811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthPref = depthPref; 69911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesMin = samplesMin; 70011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesPref = samplesPref; 70111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesQ = samplesQ; 70211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams 70367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 70467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreateGL"); 70567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 7063aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi); 707d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 708d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 709d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 710eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 7117d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{ 71267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 71367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 71467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 715eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetPriority((RsContext)con, p); 7167d787b4722eaeb79cab42c36060336e092b77b5fJason Sams} 7177d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 71847f31582b67f492d9e1523abd0d8b86c38ec007dTim Murraystatic void 71947f31582b67f492d9e1523abd0d8b86c38ec007dTim MurraynContextSetCacheDir(JNIEnv *_env, jobject _this, jlong con, jstring cacheDir) 72047f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{ 72147f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 72247f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray 72347f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray if (kLogApi) { 72447f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray ALOGD("ContextSetCacheDir, con(%p), cacheDir(%s)", (RsContext)con, cacheDirUTF.c_str()); 72547f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray } 72647f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray rsContextSetCacheDir((RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length()); 72747f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray} 72847f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray 7297d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 7307d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 7317d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void 732eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd) 733efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{ 73467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 73567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, 73667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (Surface *)wnd); 73767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 738efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 739488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes ANativeWindow * window = nullptr; 740488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (wnd == nullptr) { 741efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 742efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } else { 74364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown window = android_view_Surface_getNativeWindow(_env, wnd).get(); 744efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } 745efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 746eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetSurface((RsContext)con, width, height, window); 747efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams} 748efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 749efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void 750eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con) 751d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 75267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 75367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDestroy, con(%p)", (RsContext)con); 75467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 755eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDestroy((RsContext)con); 756d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 757d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 758715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void 759eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 760715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{ 76167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 76267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 76367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 764715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams rsContextDump((RsContext)con, bits); 765715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams} 766d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 767d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 768eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con) 76965e7aa56f56097418d617663683544c25b3988eaJason Sams{ 77067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 77167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPause, con(%p)", (RsContext)con); 77267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 773eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextPause((RsContext)con); 77465e7aa56f56097418d617663683544c25b3988eaJason Sams} 77565e7aa56f56097418d617663683544c25b3988eaJason Sams 77665e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void 777eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con) 77865e7aa56f56097418d617663683544c25b3988eaJason Sams{ 77967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 78067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextResume, con(%p)", (RsContext)con); 78167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 782eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextResume((RsContext)con); 78365e7aa56f56097418d617663683544c25b3988eaJason Sams} 78465e7aa56f56097418d617663683544c25b3988eaJason Sams 7851c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 7861c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring 787eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 7881c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 78967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 79067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con); 79167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 7921c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams char buf[1024]; 7931c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 7941c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 7951c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 796eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 79765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams buf, sizeof(buf), 79865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 799edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 8001c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if (!id && receiveLen) { 80109993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 8021c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 8031c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams return _env->NewStringUTF(buf); 8041c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 8051c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 806edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint 807eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 808516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 809516c31911578db8ce53529483c3ded918ac7dc6bJason Sams jint len = _env->GetArrayLength(data); 81067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 81167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 81267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 813488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = _env->GetIntArrayElements(data, nullptr); 814516c31911578db8ce53529483c3ded918ac7dc6bJason Sams size_t receiveLen; 8151c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 816eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 81765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, len * 4, 81865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 819edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 820516c31911578db8ce53529483c3ded918ac7dc6bJason Sams if (!id && receiveLen) { 82109993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 822516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 823516c31911578db8ce53529483c3ded918ac7dc6bJason Sams _env->ReleaseIntArrayElements(data, ptr, 0); 8240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 8251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 8261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 8271c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint 828eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 8291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 83067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 83167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPeekMessage, con(%p)", (RsContext)con); 83267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 833488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr); 8341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 8351c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 836eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 837edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 8381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[0] = (jint)subID; 8391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[1] = (jint)receiveLen; 8401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 8410e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 842516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 843516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 844eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 845516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 84667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 84767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextInitToClient, con(%p)", (RsContext)con); 84867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 849eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextInitToClient((RsContext)con); 850516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 851516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 852eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 853516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 85467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 85567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con); 85667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 857eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDeinitToClient((RsContext)con); 858516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 859516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 860455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void 861eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 862455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{ 863488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = nullptr; 864455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams jint len = 0; 865455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 866455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams len = _env->GetArrayLength(data); 8674a043c1853c117c1b4c4342e76cd16a5abdc1045Stephen Hines ptr = _env->GetIntArrayElements(data, nullptr); 868455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 86967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 87067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 87167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 872eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 873455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 874455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 875455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 876455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams} 877455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 878455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 879516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 880460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 88167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, 88267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint size) 883d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 88467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 88509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con, 88667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe type, kind, norm, size); 88767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 88867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, 88967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe norm, size); 890d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 891d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 892460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 893eff663f391fa4f119685d5c14489b94661ea126fTim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con, 8949807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 895d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 896718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int fieldCount = _env->GetArrayLength(_ids); 89767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 89867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementCreate2, con(%p)", (RsContext)con); 89967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 900718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 901488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jIds = _env->GetLongArrayElements(_ids, nullptr); 902488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr); 9039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 9049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 9059807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 9069807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 9079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < fieldCount; i ++) { 9089807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat ids[i] = (RsElement)jIds[i]; 9099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat arraySizes[i] = (uint32_t)jArraySizes[i]; 9109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 911718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 9122123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 9132123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 9142123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **nameArray = names.c_str(); 9152123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *sizeArray = names.c_str_len(); 9162123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 9173aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con, 9189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (const RsElement *)ids, fieldCount, 9197a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams nameArray, fieldCount * sizeof(size_t), sizeArray, 920e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk (const uint32_t *)arraySizes, fieldCount); 9212123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 9229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(ids); 9239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(arraySizes); 9249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 9259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 9269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 9273aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)id; 928d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 929d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 930dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 931460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData) 932dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 933dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int dataSize = _env->GetArrayLength(_elementData); 93467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 93567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetNativeData, con(%p)", (RsContext)con); 93667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 937dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 938dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements 939dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(dataSize == 5); 940dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 94178c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath uintptr_t elementData[5]; 942eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize); 943dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 944dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < dataSize; i ++) { 9459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint data = (jint)elementData[i]; 9469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_elementData, i, 1, &data); 947dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 948dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 949dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 950dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 951dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 952460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 9539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _IDs, 9547d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jobjectArray _names, 9557d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jintArray _arraySizes) 956dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 9579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t dataSize = _env->GetArrayLength(_IDs); 95867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 95967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetSubElements, con(%p)", (RsContext)con); 96067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 961dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 9629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t)); 9639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const char **names = (const char **)malloc(dataSize * sizeof(const char *)); 96478c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t)); 965dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 96667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 96767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (uint32_t)dataSize); 968dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 9699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(uint32_t i = 0; i < dataSize; i++) { 9703aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong id = (jlong)(uintptr_t)ids[i]; 9719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint arraySize = (jint)arraySizes[i]; 972dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 9739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_IDs, i, 1, &id); 9749807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 975dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 976dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 977dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(ids); 978dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(names); 9797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk free(arraySizes); 980dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 981dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 982d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 983d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 984460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 985460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 986b109cc78616abee7291eb42094cd156b5db3355dJason Sams jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 987d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 98867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 98967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 99009993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv); 99167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 9923b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams 99367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, 99467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe faces, yuv); 995d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 996d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 997dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 9989807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData) 999dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 1000dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // We are packing 6 items: mDimX; mDimY; mDimZ; 1001dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // mDimLOD; mDimFaces; mElement; into typeData 1002dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int elementCount = _env->GetArrayLength(_typeData); 1003dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1004dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(elementCount == 6); 100567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 100667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con); 100767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1008dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 10099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t typeData[6]; 1010eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6); 1011dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1012dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < elementCount; i ++) { 10133aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong data = (jlong)(uintptr_t)typeData[i]; 10149807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_typeData, i, 1, &data); 1015dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1016dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1017dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1018d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1019d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1020460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 102167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 102267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong pointer) 1023d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 102467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 102567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 102667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 102767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 102867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type, 102967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocationMipmapControl)mips, 103067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (uint32_t)usage, (uintptr_t)pointer); 1031d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1032d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1033d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1034460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 10355476b450e50939940dcf3f15c92335cee2fc572dJason Sams{ 103667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 103767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, 103867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe bits); 103967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1040eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 10415476b450e50939940dcf3f15c92335cee2fc572dJason Sams} 10425476b450e50939940dcf3f15c92335cee2fc572dJason Sams 104372226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject 1044460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a) 1045615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{ 104667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 104767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 104867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1049615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams 105067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, 105167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)a); 105272226e0543461133b9e177a3e78ae50b0c65e797Jason Sams sp<IGraphicBufferProducer> bp = v; 1053488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes v->decStrong(nullptr); 1054fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 105572226e0543461133b9e177a3e78ae50b0c65e797Jason Sams jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp); 105672226e0543461133b9e177a3e78ae50b0c65e797Jason Sams return o; 1057fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams} 1058fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 1059fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void 1060460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 1061163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 106267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 106367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con, 106467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, (Surface *)sur); 106567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1066163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1067fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams sp<Surface> s; 1068163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams if (sur != 0) { 106964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown s = android_view_Surface_getSurface(_env, sur); 1070163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams } 1071163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 107267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, 107367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe static_cast<ANativeWindow *>(s.get())); 1074163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1075163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1076163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1077460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1078163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 107967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 108009993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 108167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1082460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray rsAllocationIoSend((RsContext)con, (RsAllocation)alloc); 1083163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1084163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1085163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1086460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1087163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 108867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 108909993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 109067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1091460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc); 1092163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1093163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1094163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1095163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1096460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1097f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{ 109867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 109967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 110067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1101eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 1102f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams} 1103f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams 1104460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 110567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 110667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 1107fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{ 1108ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams SkBitmap const * nativeBitmap = 110936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 1110ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams const SkBitmap& bitmap(*nativeBitmap); 1111fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 11125476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.lockPixels(); 11135476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 11143aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con, 111565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 111665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, bitmap.getSize(), usage); 11175476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.unlockPixels(); 11185476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 1119ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams} 1120fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 1121460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 112267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, 112367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint mip, jobject jbitmap, jint usage) 1124a314551d69098537337c970da615a8f8af58e1f1Tim Murray{ 1125a314551d69098537337c970da615a8f8af58e1f1Tim Murray SkBitmap const * nativeBitmap = 112636bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 1127a314551d69098537337c970da615a8f8af58e1f1Tim Murray const SkBitmap& bitmap(*nativeBitmap); 1128a314551d69098537337c970da615a8f8af58e1f1Tim Murray 1129a314551d69098537337c970da615a8f8af58e1f1Tim Murray bitmap.lockPixels(); 1130a314551d69098537337c970da615a8f8af58e1f1Tim Murray const void* ptr = bitmap.getPixels(); 11313aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con, 1132a314551d69098537337c970da615a8f8af58e1f1Tim Murray (RsType)type, (RsAllocationMipmapControl)mip, 11339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (uint32_t)usage, (uintptr_t)ptr); 1134a314551d69098537337c970da615a8f8af58e1f1Tim Murray bitmap.unlockPixels(); 1135a314551d69098537337c970da615a8f8af58e1f1Tim Murray return id; 1136a314551d69098537337c970da615a8f8af58e1f1Tim Murray} 1137a314551d69098537337c970da615a8f8af58e1f1Tim Murray 1138460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 113967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 114067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 114167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{ 114267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk SkBitmap const * nativeBitmap = 114336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 114467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk const SkBitmap& bitmap(*nativeBitmap); 114567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 11465476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.lockPixels(); 11475476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 11483aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con, 114965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 115065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, bitmap.getSize(), usage); 11515476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.unlockPixels(); 11525476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 115367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk} 115467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 115526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void 1156460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 115726ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{ 115826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk SkBitmap const * nativeBitmap = 115936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 116026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk const SkBitmap& bitmap(*nativeBitmap); 1161f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int w = bitmap.width(); 1162f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int h = bitmap.height(); 116326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk 11644ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.lockPixels(); 11654ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams const void* ptr = bitmap.getPixels(); 1166eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 1167304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 116838faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray w, h, ptr, bitmap.getSize(), 0); 11694ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.unlockPixels(); 11708a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 11718a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 11724ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void 1173460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 11748a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{ 11754ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams SkBitmap const * nativeBitmap = 117636bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 11774ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams const SkBitmap& bitmap(*nativeBitmap); 11788a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 11794ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.lockPixels(); 11804ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams void* ptr = bitmap.getPixels(); 1181eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize()); 11824ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.unlockPixels(); 1183835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk bitmap.notifyPixelsChanged(); 11848a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 11858a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 1186414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1187d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1188460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 118987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint count, jobject data, jint sizeBytes, jint dataType, jint mSize, 119087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jboolean usePadding) 1191d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1192e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 119367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 119467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 119567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 119667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe dataType); 119767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 119887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, 119987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1200d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1201d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1202d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1203c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1204c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint xoff, jint yoff, jint zoff, 1205c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 120649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{ 120749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams jint len = _env->GetArrayLength(data); 120867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 1209c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang ALOGD("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 1210c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 121167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe sizeBytes); 121267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1213488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1214c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang rsAllocationElementData((RsContext)con, (RsAllocation)alloc, 1215c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang xoff, yoff, zoff, 1216c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang lod, ptr, sizeBytes, compIdx); 121749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 121849bdaf0293408159df18a1d8540360f9623c40f7Jason Sams} 121949bdaf0293408159df18a1d8540360f9623c40f7Jason Sams 1220c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang 1221414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 122249bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void 1223460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 122487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize, 122587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jboolean usePadding) 1226d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1227e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 1228e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 122967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 123067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 123167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 123267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 123387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h; 123487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, 123587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1236d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1237d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1238414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1239414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 124040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 1241eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 1242460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, 1243304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint dstMip, jint dstFace, 1244304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint width, jint height, 1245460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, 1246304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint srcMip, jint srcFace) 1247304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{ 124867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 124967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 125067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), dstFace(%i), width(%i), height(%i)," 125167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 125267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 125367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 125467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1255304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1256eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy2DRange((RsContext)con, 1257304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)dstAlloc, 1258304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstXoff, dstYoff, 1259304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstMip, dstFace, 1260304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk width, height, 1261304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)srcAlloc, 1262304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcXoff, srcYoff, 1263304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcMip, srcFace); 1264304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk} 1265304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1266414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1267304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void 1268460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 126987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType, 127087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1271b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 1272e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 127367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 127467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 127567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 127667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe lod, w, h, d, sizeBytes); 127767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 127887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h * d; 127987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, 128087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1281b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1282b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1283414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1284414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 1285b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void 1286eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 1287460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 1288b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint dstMip, 1289b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint width, jint height, jint depth, 1290460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 1291b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint srcMip) 1292b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 129367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 129467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 129567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), width(%i), height(%i)," 129667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 129767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, 129867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip); 129967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1300b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1301eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy3DRange((RsContext)con, 1302b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)dstAlloc, 1303b05d689653b1bc94836f716f29e9578677c29075Jason Sams dstXoff, dstYoff, dstZoff, dstMip, 1304b05d689653b1bc94836f716f29e9578677c29075Jason Sams width, height, depth, 1305b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)srcAlloc, 1306b05d689653b1bc94836f716f29e9578677c29075Jason Sams srcXoff, srcYoff, srcZoff, srcMip); 1307b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1308b05d689653b1bc94836f716f29e9578677c29075Jason Sams 130940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 1310414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 131140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 131287e908dfdece91b5f504386d4901fa3342dc8083Miao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType, 131387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1314fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 131521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 131667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 131767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 131867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 131987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = 0; 132087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocationRead, false, 132187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, ptr, len * typeBytes); 1322fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1323fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1324414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1325fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1326460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 132787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint count, jobject data, jint sizeBytes, jint dataType, 132887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1329fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 133021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 133167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 133267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 133367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 133467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 133587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocation1DRead, false, 133687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1337fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1338fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1339c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data. 1340c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void 134145cec0a9711f736df26fd097c6d74834e350f9bcMiao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1342c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint xoff, jint yoff, jint zoff, 134345cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 1344c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{ 134545cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jint len = _env->GetArrayLength(data); 1346c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang if (kLogApi) { 134745cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang ALOGD("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 134845cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 134945cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang sizeBytes); 1350c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang } 135145cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 135245cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang rsAllocationElementRead((RsContext)con, (RsAllocation)alloc, 135345cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang xoff, yoff, zoff, 1354a7e2509d8da69ab1c9e14b4ce6608786c572209aJason Sams lod, ptr, sizeBytes, compIdx); 135545cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1356c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang} 1357c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang 1358414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1359fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1360460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 136187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, 136287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 136340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{ 136421659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 136521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 136667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 136767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 136867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 136967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 137087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h; 137187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocation2DRead, false, 137287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 137340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams} 137487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 1375c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1376c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void 1377c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 137887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jint d, jobject data, int sizeBytes, int dataType, 137987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1380c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{ 1381c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 1382c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang if (kLogApi) { 1383c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang ALOGD("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 1384c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 1385c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang lod, w, h, d, sizeBytes); 1386c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang } 138787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h * d; 138887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation3DRead, false, 138987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1390c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang} 1391d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1392460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1393460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1394dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 139567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 139667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 139767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 13983aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a); 1399dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1400dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 14015edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void 1402460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 14035edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{ 140467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 140567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 140667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, dimX); 140767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1408eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 14095edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams} 14105edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams 141146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 141246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic jlong 141346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterCreate(JNIEnv *_env, jobject _this, jlong con, jlong basealloc, jlong type) 141446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 141546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 141646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterCreate, con(%p), base(%p), type(%p)", 141746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)basealloc, (RsElement)type); 141846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 141946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams return (jlong)(uintptr_t) rsAllocationAdapterCreate((RsContext)con, (RsType)type, 142046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsAllocation)basealloc); 142146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 142246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 142346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 142446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic void 142546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterOffset(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 142646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint x, jint y, jint z, jint face, jint lod, 142746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint a1, jint a2, jint a3, jint a4) 142846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 142946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams uint32_t params[] = { 143046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)x, (uint32_t)y, (uint32_t)z, (uint32_t)face, 143146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)lod, (uint32_t)a1, (uint32_t)a2, (uint32_t)a3, (uint32_t)a4 143246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams }; 143346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 143446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterOffset, con(%p), alloc(%p), x(%i), y(%i), z(%i), face(%i), lod(%i), arrays(%i %i %i %i)", 143546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)alloc, x, y, z, face, lod, a1, a2, a3, a4); 143646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 143746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams rsAllocationAdapterOffset((RsContext)con, (RsAllocation)alloc, 143846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams params, sizeof(params)); 143946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 144046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 144146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 1442aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// ----------------------------------- 1443aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1444460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1445460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset) 1446aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1447aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 14480e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", asset); 1449aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 14503aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength()); 1451b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1452b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1453b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1454460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1455eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path) 1456b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1457b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr); 1458488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1459b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1460b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1461b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1462b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1463b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); 1464488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (asset == nullptr) { 1465b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1466b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1467b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 14683aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset); 1469b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1470b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1471b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1472460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1473eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName) 1474b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1475b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 14763aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str()); 1477b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1478aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1479aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1480aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1481460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jint 1482460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D) 1483aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1484aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int32_t numEntries = 0; 1485eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D); 14860e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)numEntries; 1487aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1488aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1489aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void 1490460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries) 1491aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 14920e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 1493aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry)); 1494aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1495eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D); 1496aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1497aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk for(jint i = 0; i < numEntries; i ++) { 1498aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName)); 1499aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID); 1500aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 1501aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1502aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk free(fileEntries); 1503aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1504aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 15050e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1506460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index) 1507aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 15080e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 15093aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D); 1510aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1511aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1512d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1513d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1514d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 15150e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1516eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con, 1517b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fileName, jfloat fontSize, jint dpi) 15189b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{ 1519b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 15203aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con, 1521e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fileNameUTF.c_str(), fileNameUTF.length(), 1522e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi); 1523b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1524b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1525b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1526b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 15270e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1528eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, 15290e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jstring name, jfloat fontSize, jint dpi, jlong native_asset) 1530b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1531b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 1532b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 nameUTF(_env, name); 1533b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 15343aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1535e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk nameUTF.c_str(), nameUTF.length(), 1536e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1537b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1538b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1539b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1540b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 15410e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1542eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path, 1543b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jfloat fontSize, jint dpi) 1544b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1545b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr); 1546488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1547b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1548b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1549b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1550b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1551b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); 1552488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (asset == nullptr) { 1553b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1554b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 15559b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 15563aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1557e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk str.c_str(), str.length(), 1558e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1559b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1560b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk delete asset; 15619b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk return id; 15629b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk} 15639b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 1564bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// ----------------------------------- 1565bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 1566bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void 1567460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot) 1568d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 156967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 157067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, 157167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsScript)script, (RsAllocation)alloc, slot); 157267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1573eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 1574d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1575d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1576d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1577460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val) 15784d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 157967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 158067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, 158167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 158267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1583eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 15844d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 15854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 15867c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint 1587460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 15887c4caadb939b1563328251c156262c179a685c70Tim Murray{ 158967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 159067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 159167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 15927c4caadb939b1563328251c156262c179a685c70Tim Murray int value = 0; 1593eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 15947c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 15957c4caadb939b1563328251c156262c179a685c70Tim Murray} 15967c4caadb939b1563328251c156262c179a685c70Tim Murray 15974d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1598460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 15996f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{ 160067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 160109993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 160267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 160367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1604eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 16056f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams} 16066f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams 16076f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void 1608460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 1609031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{ 161067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 161109993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 161267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 161367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1614eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 1615031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines} 1616031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines 16177c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong 1618460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 16197c4caadb939b1563328251c156262c179a685c70Tim Murray{ 162067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 162167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 162267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16237c4caadb939b1563328251c156262c179a685c70Tim Murray jlong value = 0; 1624eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 16257c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 16267c4caadb939b1563328251c156262c179a685c70Tim Murray} 16277c4caadb939b1563328251c156262c179a685c70Tim Murray 1628031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void 1629460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val) 16304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 163167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 163267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, 163367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 163467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1635eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 16364d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 16374d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 16387c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat 1639460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 16407c4caadb939b1563328251c156262c179a685c70Tim Murray{ 164167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 164267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 164367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16447c4caadb939b1563328251c156262c179a685c70Tim Murray jfloat value = 0; 1645eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 16467c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 16477c4caadb939b1563328251c156262c179a685c70Tim Murray} 16487c4caadb939b1563328251c156262c179a685c70Tim Murray 16494d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1650460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val) 1651ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{ 165267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 165367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, 165467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 165567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1656eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 1657ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines} 1658ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines 16597c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble 1660460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 16617c4caadb939b1563328251c156262c179a685c70Tim Murray{ 166267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 166367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 166467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16657c4caadb939b1563328251c156262c179a685c70Tim Murray jdouble value = 0; 1666eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 16677c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 16687c4caadb939b1563328251c156262c179a685c70Tim Murray} 16697c4caadb939b1563328251c156262c179a685c70Tim Murray 1670ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void 1671460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 16724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 167367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 167467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 167567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16764d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1677488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1678eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 16794d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 16804d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 16814d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1682adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void 1683460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 16847c4caadb939b1563328251c156262c179a685c70Tim Murray{ 168567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 168667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 168767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16887c4caadb939b1563328251c156262c179a685c70Tim Murray jint len = _env->GetArrayLength(data); 1689488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1690eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 1691414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements(data, ptr, 0); 16927c4caadb939b1563328251c156262c179a685c70Tim Murray} 16937c4caadb939b1563328251c156262c179a685c70Tim Murray 16947c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void 169567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 169667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong elem, jintArray dims) 1697adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{ 169867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 169967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 170067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1701adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint len = _env->GetArrayLength(data); 1702488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1703adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1704488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr); 1705eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 1706bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines (const uint32_t*) dimsPtr, dimsLen); 1707adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1708adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1709adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines} 1710adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines 1711d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1712d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1713460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone) 1714584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{ 171567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 171667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script); 171767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1718584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1719584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jint length = _env->GetArrayLength(timeZone); 1720584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jbyte* timeZone_ptr; 1721584a375df68ed7d62b38389078c6804edf228f9cRomain Guy timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 1722584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1723eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 1724584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1725584a375df68ed7d62b38389078c6804edf228f9cRomain Guy if (timeZone_ptr) { 1726584a375df68ed7d62b38389078c6804edf228f9cRomain Guy _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1727584a375df68ed7d62b38389078c6804edf228f9cRomain Guy } 1728584a375df68ed7d62b38389078c6804edf228f9cRomain Guy} 1729584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 173022534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void 1731460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot) 173222534176fb5c1257130ef4ee589739ca42766a32Jason Sams{ 173367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 173467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 173567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1736eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvoke((RsContext)con, (RsScript)obj, slot); 173722534176fb5c1257130ef4ee589739ca42766a32Jason Sams} 173822534176fb5c1257130ef4ee589739ca42766a32Jason Sams 1739584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void 1740460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 1741be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{ 174267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 174367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 174467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 17454d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1746488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1747eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 17484d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1749be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams} 1750be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 17516e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void 1752be7b1defb6b11920703b241ba5815fb09487bb02Chris WailesnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 1753be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jlongArray ains, jlong aout, jbyteArray params, 1754be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jintArray limits) 17556e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{ 175667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 175767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 175867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1759949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1760be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint in_len = 0; 1761488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *in_ptr = nullptr; 1762949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1763488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsAllocation *in_allocs = nullptr; 1764949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1765488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 1766be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_len = _env->GetArrayLength(ains); 1767488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes in_ptr = _env->GetLongArrayElements(ains, nullptr); 1768eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 1769be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (sizeof(RsAllocation) == sizeof(jlong)) { 1770be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)in_ptr; 1771949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1772be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } else { 1773be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes // Convert from 64-bit jlong types to the native pointer type. 1774eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 1775be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 1776be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 1777be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes for (int index = in_len; --index >= 0;) { 1778be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs[index] = (RsAllocation)in_ptr[index]; 1779be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1780be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1781949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 1782949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1783be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint param_len = 0; 1784488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *param_ptr = nullptr; 1785be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 1786488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 1787be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_len = _env->GetArrayLength(params); 1788488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes param_ptr = _env->GetByteArrayElements(params, nullptr); 1789c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines } 1790949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1791488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsScriptCall sc, *sca = nullptr; 1792be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes uint32_t sc_size = 0; 1793949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1794be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint limit_len = 0; 1795488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *limit_ptr = nullptr; 1796949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1797488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 1798be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limit_len = _env->GetArrayLength(limits); 1799488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes limit_ptr = _env->GetIntArrayElements(limits, nullptr); 1800949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1801be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes assert(limit_len == 6); 180267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe UNUSED(limit_len); // As the assert might not be compiled. 1803949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1804be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xStart = limit_ptr[0]; 1805be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xEnd = limit_ptr[1]; 1806be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yStart = limit_ptr[2]; 1807be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yEnd = limit_ptr[3]; 1808be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zStart = limit_ptr[4]; 1809be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zEnd = limit_ptr[5]; 1810be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 181114331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayStart = 0; 181214331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayEnd = 0; 181314331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2Start = 0; 181414331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2End = 0; 181514331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3Start = 0; 181614331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3End = 0; 181714331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4Start = 0; 181814331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4End = 0; 1819949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1820be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sca = ≻ 1821be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1822949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1823be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes rsScriptForEachMulti((RsContext)con, (RsScript)script, slot, 1824be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs, in_len, (RsAllocation)aout, 1825be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_ptr, param_len, sca, sc_size); 1826949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1827488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 1828be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1829949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 1830949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1831488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 1832be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT); 1833eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes } 1834c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines 1835488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 1836be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 1837be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1838949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes} 1839949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1840fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// ----------------------------------- 1841fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 18420e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1843eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 1844e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jstring resName, jstring cacheDir, 1845e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jbyteArray scriptRef, jint length) 1846d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 184767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 184867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCCreate, con(%p)", (RsContext)con); 184967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1850e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 1851e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 resNameUTF(_env, resName); 1852e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 18530e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jlong ret = 0; 1854488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte* script_ptr = nullptr; 185543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint _exception = 0; 185643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint remaining; 185743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (!scriptRef) { 185843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 18598451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 186043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 186143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 186243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (length < 0) { 186343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 18648451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 186543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 186643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 1867e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams remaining = _env->GetArrayLength(scriptRef); 186843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (remaining < length) { 186943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 18708451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", 18718451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes // "length > script.length - offset"); 187243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 187343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 1874e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams script_ptr = (jbyte *) 187543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 187643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich 1877eff663f391fa4f119685d5c14489b94661ea126fTim Murray //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length); 1878e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 18793aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con, 1880e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk resNameUTF.c_str(), resNameUTF.length(), 1881e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk cacheDirUTF.c_str(), cacheDirUTF.length(), 1882e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams (const char *)script_ptr, length); 188339ddc950c9064129ead5de04b200106c0659f937Jason Sams 188443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit: 1885e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams if (script_ptr) { 1886e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 188743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception ? JNI_ABORT: 0); 188843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 1889d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 18903aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)ret; 1891d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1892d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1893460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1894460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid) 18956ab97682fd444586ee135912a4210417a1c8781bJason Sams{ 189667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 189767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, 189867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)eid); 189967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19003aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 19016ab97682fd444586ee135912a4210417a1c8781bJason Sams} 19026ab97682fd444586ee135912a4210417a1c8781bJason Sams 1903460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1904460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig) 190508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 190667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 190767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 190867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)sid, slot, sig); 190967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19103aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig); 191108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 191208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1913460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1914be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 1915be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{ 1916be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni if (kLogApi) { 19177ff53fa0d42795da55b65468e07df82029deda79Elliott Hughes ALOGD("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, 1918be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (void *)sid, slot); 1919be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 1920be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return (jlong)(uintptr_t)rsScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 1921be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 1922be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 1923be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 1924460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 192508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 192667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 192767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, 192867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot); 192967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19303aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 193108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 193208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1933460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 19349807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 19359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _dstk, jlongArray _dstf, jlongArray _types) 193608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 193767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 193867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con); 193967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 194008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 19419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint kernelsLen = _env->GetArrayLength(_kernels); 1942488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 19439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 19449807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < kernelsLen; ++i) { 19459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 19469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint srcLen = _env->GetArrayLength(_src); 1949488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 19509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 19519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < srcLen; ++i) { 19529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 19539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint dstkLen = _env->GetArrayLength(_dstk); 1956488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 19579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 19589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstkLen; ++i) { 19599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 19609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint dstfLen = _env->GetArrayLength(_dstf); 1963488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 19649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 19659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstfLen; ++i) { 19669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 19679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint typesLen = _env->GetArrayLength(_types); 1970488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 19719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 19729807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < typesLen; ++i) { 19739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat typesPtr[i] = (RsType)jTypesPtr[i]; 19749807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19763aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con, 19779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 19789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 19799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 19809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 19819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsType *)typesPtr, typesLen * sizeof(RsType)); 19829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(kernelsPtr); 19849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(srcPtr); 19859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstkPtr); 19869807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstfPtr); 19879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(typesPtr); 19889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 19899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 19909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 19919807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 19929807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 199308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return id; 199408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 199508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 199608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 1997460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 199808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 199967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 200067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 200167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 200267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2003eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 200408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 200508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 200608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2007460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 200808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 200967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 201067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 201167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 201267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2013eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 201408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 201508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 201608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2017460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 201808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 201967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 202067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 202167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2022eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 202308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 202408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2025d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2026d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 20270e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2028eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con, 2029331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA, 2030331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean depthMask, jboolean ditherEnable, 2031331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint srcFunc, jint destFunc, 2032331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint depthFunc) 2033d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 203467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 203567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con); 203667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 20373aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA, 2038331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc, 2039331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc); 2040d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2041d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 20420011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// --------------------------------------------------------------------------- 20430011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 20440011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void 2045460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a) 20460011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{ 204767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 204867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, 204967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramVertex)vpv, slot, (RsAllocation)a); 205067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2051eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a); 20520011bcf57ff711a221a3a4c73f2a79125111647dJason Sams} 205354c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 2054d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 2055460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 205654c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{ 205767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 205867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 205967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsAllocation)a); 206067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2061eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a); 206254c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams} 206354c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 206454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void 2065460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 2066d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 206767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 206867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 206967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsSampler)a); 207067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2071eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a); 2072d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2073d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 207468afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// --------------------------------------------------------------------------- 2075d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2076460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2077eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 20789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 20797e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{ 2080b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 2081488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 20827e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams jint paramLen = _env->GetArrayLength(params); 20837e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 20842123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 20852123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 20862123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 20872123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 20882123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 208967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 209067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 209167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 20927e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 20939807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 20949807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 20959807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 20969807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 20973aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 20982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 20999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 21002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 21019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 21029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 21037e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams return ret; 21047e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams} 21057e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 21067e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 21071fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// --------------------------------------------------------------------------- 21081fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 2109460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2110eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 21119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 21121fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{ 2113b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 2114488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 21150011bcf57ff711a221a3a4c73f2a79125111647dJason Sams jint paramLen = _env->GetArrayLength(params); 21161fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 211767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 211867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 211967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2120ee41112e1539de95596600fd2c6dada5d275217fJason Sams 21212123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 21222123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 21232123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 21242123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 21252123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 21269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 21279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 21289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 21299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 21309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 21313aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 21322123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 21339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 21342123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 21359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 21369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 21370011bcf57ff711a221a3a4c73f2a79125111647dJason Sams return ret; 21381fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams} 21391fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 2140ebfb436a49673693b98469683451bd9ede797557Jason Sams// --------------------------------------------------------------------------- 2141ebfb436a49673693b98469683451bd9ede797557Jason Sams 2142460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2143eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull) 2144ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 214567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 214667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, 214767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe pointSprite, cull); 214867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 21493aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull); 2150ebfb436a49673693b98469683451bd9ede797557Jason Sams} 2151ebfb436a49673693b98469683451bd9ede797557Jason Sams 2152d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2153d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2154d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2155d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 215678c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script) 2157d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 215867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 215967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script); 216067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2161eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindRootScript((RsContext)con, (RsScript)script); 2162d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2163d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2164d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 216578c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs) 2166d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 216767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 216867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs); 216967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2170eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs); 2171d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2172d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2173d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 217478c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf) 2175d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 217667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 217767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, 217867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)pf); 217967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2180eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf); 2181d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2182d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 21830826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void 218478c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf) 21850826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{ 218667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 218767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf); 218867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2189eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf); 21900826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams} 21910826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams 2192d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void 219378c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf) 2194ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 219567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 219667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf); 219767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2198eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf); 2199ebfb436a49673693b98469683451bd9ede797557Jason Sams} 2200ebfb436a49673693b98469683451bd9ede797557Jason Sams 2201d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato 220202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// --------------------------------------------------------------------------- 220302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 22040e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2205eff663f391fa4f119685d5c14489b94661ea126fTim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 2206a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 220702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{ 220867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 220967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nSamplerCreate, con(%p)", (RsContext)con); 221067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 22113aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con, 2212a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)magFilter, 2213a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)minFilter, 2214a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapS, 2215a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapT, 2216a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapR, 2217a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk aniso); 221802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams} 221902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 2220bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// --------------------------------------------------------------------------- 2221bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams 2222460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 22239807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim) 2224164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{ 222567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 222667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshCreate, con(%p)", (RsContext)con); 222767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2228164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 222925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint vtxLen = _env->GetArrayLength(_vtx); 2230488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr); 22319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen); 22329807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < vtxLen; ++i) { 22339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i]; 22349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 22359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 223625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint idxLen = _env->GetArrayLength(_idx); 2237488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr); 22389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen); 22399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < idxLen; ++i) { 22409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i]; 22419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 22429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 224325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint primLen = _env->GetArrayLength(_prim); 2244488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *primPtr = _env->GetIntArrayElements(_prim, nullptr); 2245164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 22463aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con, 224725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk (RsAllocation *)vtxPtr, vtxLen, 224825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk (RsAllocation *)idxPtr, idxLen, 224925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk (uint32_t *)primPtr, primLen); 225080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 22519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(vtxPtr); 22529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(idxPtr); 22539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0); 22549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0); 225525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk _env->ReleaseIntArrayElements(_prim, primPtr, 0); 225625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk return id; 22579d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk} 22589d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk 225980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2260460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 226180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 226267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 226367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 226467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 226580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint vtxCount = 0; 2266eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount); 226780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return vtxCount; 226880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 226980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 227080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2271460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 227280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 227367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 227467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 227567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 227680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint idxCount = 0; 2277eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount); 227880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return idxCount; 227980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 228080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 228180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 22829807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs) 228380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 228467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 228567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 228667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 228780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 228880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation)); 2289eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs); 229080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 229180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numVtxIDs; i ++) { 22923aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 22939807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_ids, i, 1, &alloc); 229480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 229580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 229680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 229780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 229880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 229980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 23009807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices) 230180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 230267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 230367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 230467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 230580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 230680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation)); 230780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t)); 230880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 2309eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices); 231080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 231180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numIndices; i ++) { 23123aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 23139807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint prim = (jint)prims[i]; 23149807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_idxIds, i, 1, &alloc); 23159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_primitives, i, 1, &prim); 231680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 231780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 231880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 231980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(prims); 2320164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk} 2321164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 232256f9e6f8d5436d50530807950661e66ca5efe2bbTim Murraystatic jint 232356f9e6f8d5436d50530807950661e66ca5efe2bbTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) { 232456f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray return (jint)sizeof(void*); 232556f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray} 232656f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 232756f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 2328164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// --------------------------------------------------------------------------- 2329164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 2330d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 233194d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript"; 2332d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2333d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = { 23341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit", "()V", (void*)_nInit }, 23351c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2336eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 2337eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 2338eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 2339eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 2340eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 2341eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 23421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2343eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 2344eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 23452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 23462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 23472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java. 2348eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreate", "(JIII)J", (void*)nContextCreate }, 2349eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreateGL", "(JIIIIIIIIIIIIFI)J", (void*)nContextCreateGL }, 2350eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 2351eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 235247f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{"rsnContextSetCacheDir", "(JLjava/lang/String;)V", (void*)nContextSetCacheDir }, 2353eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetSurface", "(JIILandroid/view/Surface;)V", (void*)nContextSetSurface }, 2354eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 2355eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDump", "(JI)V", (void*)nContextDump }, 2356eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextPause", "(J)V", (void*)nContextPause }, 2357eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextResume", "(J)V", (void*)nContextResume }, 2358eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 2359281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 2360be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 2361281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 2362281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 2363460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAssignName", "(JJ[B)V", (void*)nAssignName }, 2364460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnGetName", "(JJ)Ljava/lang/String;", (void*)nGetName }, 2365460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 2366eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2367460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromFile", "(JLjava/lang/String;)J", (void*)nFileA3DCreateFromFile }, 23680e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream", "(JJ)J", (void*)nFileA3DCreateFromAssetStream }, 2369460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J", (void*)nFileA3DCreateFromAsset }, 2370460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetNumIndexEntries", "(JJ)I", (void*)nFileA3DGetNumIndexEntries }, 2371460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetIndexEntries", "(JJI[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries }, 23720e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex", "(JJI)J", (void*)nFileA3DGetEntryByIndex }, 2373eff663f391fa4f119685d5c14489b94661ea126fTim Murray 23740e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile", "(JLjava/lang/String;FI)J", (void*)nFontCreateFromFile }, 23750e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream", "(JLjava/lang/String;FIJ)J", (void*)nFontCreateFromAssetStream }, 23760e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J", (void*)nFontCreateFromAsset }, 2377eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2378460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 23799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 2380460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementGetNativeData", "(JJ[I)V", (void*)nElementGetNativeData }, 23819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 2382460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2383460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 23849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData", "(JJ[J)V", (void*)nTypeGetNativeData }, 2385460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 23869807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 2387460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 2388460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 2389460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 2390460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2391460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 2392460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 2393460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2394460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 2395460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetSurface", "(JJ)Landroid/view/Surface;", (void*)nAllocationGetSurface }, 2396460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 2397460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 2398460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoReceive", "(JJ)V", (void*)nAllocationIoReceive }, 239987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 2400c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 240187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 2402460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 240387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 2404460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 240587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 240687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 240745cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 240887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 240987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 2410460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 2411460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 2412460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 2413460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 241446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterCreate", "(JJJ)J", (void*)nAllocationAdapterCreate }, 241546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterOffset", "(JJIIIIIIIII)V", (void*)nAllocationAdapterOffset }, 241646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 2417460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptBindAllocation", "(JJJI)V", (void*)nScriptBindAllocation }, 2418460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetTimeZone", "(JJ[B)V", (void*)nScriptSetTimeZone }, 2419460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvoke", "(JJI)V", (void*)nScriptInvoke }, 2420460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV }, 2421be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2422be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEach }, 2423be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2424460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI }, 2425460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI }, 2426460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarJ", "(JJIJ)V", (void*)nScriptSetVarJ }, 2427460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarJ", "(JJI)J", (void*)nScriptGetVarJ }, 2428460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarF", "(JJIF)V", (void*)nScriptSetVarF }, 2429460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarF", "(JJI)F", (void*)nScriptGetVarF }, 2430460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarD", "(JJID)V", (void*)nScriptSetVarD }, 2431460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarD", "(JJI)D", (void*)nScriptGetVarD }, 2432460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarV", "(JJI[B)V", (void*)nScriptSetVarV }, 2433460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarV", "(JJI[B)V", (void*)nScriptGetVarV }, 2434460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarVE", "(JJI[BJ[I)V", (void*)nScriptSetVarVE }, 2435460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarObj", "(JJIJ)V", (void*)nScriptSetVarObj }, 2436eff663f391fa4f119685d5c14489b94661ea126fTim Murray 24370e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 2438460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptIntrinsicCreate", "(JIJ)J", (void*)nScriptIntrinsicCreate }, 2439460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptKernelIDCreate", "(JJII)J", (void*)nScriptKernelIDCreate }, 2440be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 2441460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate }, 24429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 2443ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;[J)J", (void*)nScriptGroup2Create }, 2444460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 2445460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 2446460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 2447281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 2448eff663f391fa4f119685d5c14489b94661ea126fTim Murray 244925207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Single", "(JJIIIIIIIIIFJJFJIIII)V", (void*)nScriptIntrinsicBLAS_Single }, 245025207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Double", "(JJIIIIIIIIIDJJDJIIII)V", (void*)nScriptIntrinsicBLAS_Double }, 245125207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Complex", "(JJIIIIIIIIIFFJJFFJIIII)V", (void*)nScriptIntrinsicBLAS_Complex }, 245225207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Z", "(JJIIIIIIIIIDDJJDDJIIII)V", (void*)nScriptIntrinsicBLAS_Z }, 245325207df658d6a8a3e885c7017fcc25702363583cTim Murray 24549cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray{"rsnScriptIntrinsicBLAS_BNNM", "(JJIIIJIJIJII)V", (void*)nScriptIntrinsicBLAS_BNNM }, 24559cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 24560e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate", "(JZZZZZZIII)J", (void*)nProgramStoreCreate }, 2457eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2458460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants }, 2459460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindTexture", "(JJIJ)V", (void*)nProgramBindTexture }, 2460460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindSampler", "(JJIJ)V", (void*)nProgramBindSampler }, 2461eff663f391fa4f119685d5c14489b94661ea126fTim Murray 24629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramFragmentCreate }, 2463460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramRasterCreate", "(JZI)J", (void*)nProgramRasterCreate }, 24649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramVertexCreate }, 2465eff663f391fa4f119685d5c14489b94661ea126fTim Murray 246678c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript", "(JJ)V", (void*)nContextBindRootScript }, 246778c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore", "(JJ)V", (void*)nContextBindProgramStore }, 246878c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment", "(JJ)V", (void*)nContextBindProgramFragment }, 246978c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex", "(JJ)V", (void*)nContextBindProgramVertex }, 247078c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster", "(JJ)V", (void*)nContextBindProgramRaster }, 2471eff663f391fa4f119685d5c14489b94661ea126fTim Murray 24720e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 2473eff663f391fa4f119685d5c14489b94661ea126fTim Murray 24749807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate", "(J[J[J[I)J", (void*)nMeshCreate }, 2475eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2476460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetVertexBufferCount", "(JJ)I", (void*)nMeshGetVertexBufferCount }, 2477460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetIndexCount", "(JJ)I", (void*)nMeshGetIndexCount }, 24789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices", "(JJ[JI)V", (void*)nMeshGetVertices }, 24799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices", "(JJ[J[II)V", (void*)nMeshGetIndices }, 248080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 248156f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 2482d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 2483d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2484d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env) 2485d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2486d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return android::AndroidRuntime::registerNativeMethods( 2487d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams _env, classPathName, methods, NELEM(methods)); 2488d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2489d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2490d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2491d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2492d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved) 2493d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2494488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes JNIEnv* env = nullptr; 2495d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams jint result = -1; 2496d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2497d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 24983762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("ERROR: GetEnv failed\n"); 2499d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 2500d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 2501488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes assert(env != nullptr); 2502d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2503d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (registerFuncs(env) < 0) { 25040e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGE("ERROR: Renderscript native registration failed\n"); 2505d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 2506d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 2507d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2508d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams /* success -- return valid version number */ 2509d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams result = JNI_VERSION_1_4; 2510d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2511d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail: 2512d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return result; 2513d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2514