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 17d1516dffa8d676fcad092d9736163829e6d0fdceJason Sams#define LOG_TAG "RenderScript_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 27b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/Asset.h> 28b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h> 29b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h> 30f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h" 32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h" 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h" 34ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h" 35b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h" 36f4faeac3525fe1ce3707ab785a1651aec367589dJohn Reck#include "android/graphics/GraphicsJNI.h" 3733287e8a893821be86b395ce9d5d639cc8a535f3Miao Wang#include "android/native_window.h" 3833287e8a893821be86b395ce9d5d639cc8a535f3Miao Wang#include "android/native_window_jni.h" 39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 401d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rsEnv.h> 41cbb0206cb478c862cb871a65e85115281ef12e02Miao Wang#include <rsApiStubs.h> 42fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams#include <gui/Surface.h> 43d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden#include <gui/GLConsumer.h> 44faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h> 45d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 463762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE 4767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampestatic constexpr bool kLogApi = false; 48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android; 50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 51414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ 52e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams jint len = 0; \ 53488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes void *ptr = nullptr; \ 5487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang void *srcPtr = nullptr; \ 5521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams size_t typeBytes = 0; \ 56414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines jint relFlag = 0; \ 57414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines if (readonly) { \ 58414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \ 5987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang /* readonly = true, also indicates we are copying to the allocation . */ \ 60414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines relFlag = JNI_ABORT; \ 61414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines } \ 62e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams switch(dataType) { \ 63e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_32: \ 64e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jfloatArray)data); \ 65e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \ 66ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 67ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 68ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 69ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 7021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 7187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 7287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 7387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 7487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 7587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 7687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 7787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 7887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 7987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 8087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 8287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 8487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 8587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 8687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 8787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 8887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 90414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \ 91e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 92e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_64: \ 93e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jdoubleArray)data); \ 94e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \ 95ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 96ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 97ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 98ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 9921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 10087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 10187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 10287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 10387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 10487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 10587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 10687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 10787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 10887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 10987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 11087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 11187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 11287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 11387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 11487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 11587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 11687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 11787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 11887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 119414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \ 120e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 121e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_8: \ 122e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_8: \ 123e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jbyteArray)data); \ 124e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \ 125ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 126ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 127ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 128ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 12921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 1; \ 13087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 13187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 13287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 13387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 13487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 13587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 13687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 13787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 13887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 13987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 14087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 14187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 14287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 14387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 14487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 14587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 14687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 14787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 14887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 149414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \ 150e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 151e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_16: \ 152e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_16: \ 1531333215d8e61c1cbcabb551ac9a49a801f90ca76Pirama Arumuga Nainar case RS_TYPE_FLOAT_16: \ 154e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jshortArray)data); \ 155e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetShortArrayElements((jshortArray)data, flag); \ 156ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 157ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 158ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 159ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 16021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 2; \ 16187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 16287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 16387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 16487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 16587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 16687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 16787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 16887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 16987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 17087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 17187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 17287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 17387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 17487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 17587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 17687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 17787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 17887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 17987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 180414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \ 181e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 182e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_32: \ 183e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_32: \ 184e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jintArray)data); \ 185e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetIntArrayElements((jintArray)data, flag); \ 186ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 187ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 188ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 189ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 19021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 19187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 19287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 19387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 19487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 19587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 19687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 19787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 19887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 19987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 20087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 20187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 20287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 20387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 20487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 20587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 20687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 20787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 20887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 20987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 210414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \ 211e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 212e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_64: \ 213e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_64: \ 214e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jlongArray)data); \ 215e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetLongArrayElements((jlongArray)data, flag); \ 216ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 217ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 218ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 219ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 22021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 22187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 22287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 22387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 22487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 22587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 22687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 22787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 22887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 22987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 23087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 23187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 23287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 23387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 23487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 23587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 23687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 23787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 23887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 23987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 240414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \ 241e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 242e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams default: \ 243e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams break; \ 244e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams } \ 24587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang UNUSED(len, ptr, srcPtr, typeBytes, relFlag); \ 246e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams} 247e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 248e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 249b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 { 250b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic: 2512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) { 252488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes fCStr = env->GetStringUTFChars(str, nullptr); 253b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fLength = env->GetStringUTFLength(str); 254b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 2552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringToUTF8() { 256b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fEnv->ReleaseStringUTFChars(fJStr, fCStr); 257b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 258b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* c_str() const { return fCStr; } 259b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize length() const { return fLength; } 260b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 261b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate: 262b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk JNIEnv* fEnv; 263b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fJStr; 264b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* fCStr; 265b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize fLength; 266b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}; 267b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 2682123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 { 2692123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic: 2702123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength) 2712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk : mEnv(env), mStrings(strings), mStringsLength(stringsLength) { 272488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings = nullptr; 273488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mSizeArray = nullptr; 2742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk if (stringsLength > 0) { 2752123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mCStrings = (const char **)calloc(stringsLength, sizeof(char *)); 2762123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t)); 2772123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct = 0; ct < stringsLength; ct ++) { 2782123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 279488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings[ct] = mEnv->GetStringUTFChars(s, nullptr); 2802123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray[ct] = mEnv->GetStringUTFLength(s); 2812123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2822123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2832123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2842123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringArrayToUTF8() { 2852123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct=0; ct < mStringsLength; ct++) { 2862123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 2872123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mEnv->ReleaseStringUTFChars(s, mCStrings[ct]); 2882123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2892123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mCStrings); 2902123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mSizeArray); 2912123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2922123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **c_str() const { return mCStrings; } 2932123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *c_str_len() const { return mSizeArray; } 2942123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize length() const { return mStringsLength; } 2952123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 2962123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate: 2972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk JNIEnv *mEnv; 2982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jobjectArray mStrings; 2992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **mCStrings; 3002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *mSizeArray; 3012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize mStringsLength; 3022123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk}; 3032123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 304d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 305d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 306ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0; 307d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 308d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this) 309d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 310eff663f391fa4f119685d5c14489b94661ea126fTim Murray gContextId = _env->GetFieldID(_this, "mContext", "J"); 311d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 312d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 313d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 314d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 31587e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) { 31687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytesPad = mSize * 4; 31787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytes = mSize * 3; 31887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 31987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 32087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang for (int i = 0; i < count; i++) { 32187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang memcpy(dst, src, sizeBytes); 32287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang dst += sizeBytesPad; 32387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang src += sizeBytes; 32487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } 32587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang} 32687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 32787e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) { 32887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytesPad = mSize * 4; 32987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytes = mSize * 3; 33087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 33187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 33287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang for (int i = 0; i < count; i++) { 33387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang memcpy(dst, src, sizeBytes); 33487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang dst += sizeBytes; 33587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang src += sizeBytesPad; 33687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } 33787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang} 33887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 33987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 34087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang// --------------------------------------------------------------------------- 3413eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void 342eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con) 34396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{ 34467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 34567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextFinish, con(%p)", (RsContext)con); 34667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 347eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextFinish((RsContext)con); 34896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams} 34996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams 350281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic jlong 351281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID, 352281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong returnValue, jlongArray fieldIDArray, 353281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray valueArray, jintArray sizeArray, 354281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray depClosureArray, jlongArray depFieldIDArray) { 35517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong ret = 0; 35617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 357281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 358281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 359ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jFieldIDs == nullptr) { 360ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: fieldIDs."); 361ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 362ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 363ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 36417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 36517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize values_length = _env->GetArrayLength(valueArray); 366ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jValues == nullptr) { 367ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: values."); 368ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 369ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 370ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 37117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 37217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 373ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jSizes == nullptr) { 374ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: sizes."); 375ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 376ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 377ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 37817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jDepClosures = 37917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->GetLongArrayElements(depClosureArray, nullptr); 38017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize depClosures_length = _env->GetArrayLength(depClosureArray); 381ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jDepClosures == nullptr) { 382ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: depClosures."); 383ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 384ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 385ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 38617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jDepFieldIDs = 38717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->GetLongArrayElements(depFieldIDArray, nullptr); 38817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray); 389ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jDepFieldIDs == nullptr) { 390ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: depFieldIDs."); 391ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 392ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 39317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 39417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni size_t numValues, numDependencies; 39517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsScriptFieldID* fieldIDs; 39617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsClosure* depClosures; 39717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsScriptFieldID* depFieldIDs; 39817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 39917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 40017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unmatched field IDs, values, and sizes in closure creation."); 40117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 40217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 40317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 40417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni numValues = (size_t)fieldIDs_length; 40517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 40617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (depClosures_length != depFieldIDs_length) { 40717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unmatched closures and field IDs for dependencies in closure creation."); 40817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 40917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 41017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 41117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni numDependencies = (size_t)depClosures_length; 41217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 41317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (numDependencies > numValues) { 41417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unexpected number of dependencies in closure creation"); 41517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 41617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 41717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 4187b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 41917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many arguments or globals in closure creation"); 42017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 42117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 42217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 42386c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (numValues > 0) { 42486c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 42586c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (fieldIDs == nullptr) { 42686c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni goto exit; 42786c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 42886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } else { 42986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni // numValues == 0 43086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni // alloca(0) implementation is platform-dependent. 43186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni fieldIDs = nullptr; 43217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 43317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 43417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni for (size_t i = 0; i < numValues; i++) { 435281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 436281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 437281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 43886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (numDependencies > 0) { 43986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies); 44086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (depClosures == nullptr) { 44186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni goto exit; 44286c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 44386c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni 44486c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni for (size_t i = 0; i < numDependencies; i++) { 44586c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depClosures[i] = (RsClosure)jDepClosures[i]; 44686c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 44786c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni 44886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depFieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numDependencies); 44986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (depFieldIDs == nullptr) { 45086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni goto exit; 45186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 45286c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni 45386c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni for (size_t i = 0; i < numDependencies; i++) { 45486c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depFieldIDs[i] = (RsClosure)jDepFieldIDs[i]; 45586c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 45686c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } else { 45786c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni // alloca(0) implementation is platform-dependent. 45886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depClosures = nullptr; 45986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depFieldIDs = nullptr; 460281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 461281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 46217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ret = (jlong)(uintptr_t)rsClosureCreate( 463281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, 464263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni fieldIDs, numValues, jValues, numValues, 46517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni (int*)jSizes, numValues, 46617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni depClosures, numDependencies, 46717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni depFieldIDs, numDependencies); 46817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 46917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Niexit: 47017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 47117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(depFieldIDArray, jDepFieldIDs, JNI_ABORT); 47217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(depClosureArray, jDepClosures, JNI_ABORT); 47317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 47417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 47517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 47617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 47717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return ret; 478281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 479281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 480be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 481be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID, 482be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray, 483be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jintArray sizeArray) { 48417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong ret = 0; 48517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 486be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr); 487be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize jParamLength = _env->GetArrayLength(paramArray); 488ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jParams == nullptr) { 489ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: params."); 490ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 491ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 492ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 493be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 494be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 495ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jFieldIDs == nullptr) { 496ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: fieldIDs."); 497ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 498ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 499ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 50017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 50117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize values_length = _env->GetArrayLength(valueArray); 502ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jValues == nullptr) { 503ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: values."); 504ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 505ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 506ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 50717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 50817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 509ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jSizes == nullptr) { 510ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: sizes."); 511ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 512ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 51317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 51417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni size_t numValues; 51517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsScriptFieldID* fieldIDs; 51617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 51717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 51817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unmatched field IDs, values, and sizes in closure creation."); 51917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 52017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 52117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 52217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni numValues = (size_t) fieldIDs_length; 52317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 5247b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 52517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many arguments or globals in closure creation"); 52617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 52717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 52817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 52917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 53017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (fieldIDs == nullptr) { 53117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 53217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 53317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 53417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni for (size_t i = 0; i< numValues; i++) { 535be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 536be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 537be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 53817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ret = (jlong)(uintptr_t)rsInvokeClosureCreate( 539be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, 540263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni fieldIDs, numValues, jValues, numValues, 54117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni (int*)jSizes, numValues); 54217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 54317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Niexit: 54417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 54517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 54617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 54717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 54817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseByteArrayElements(paramArray, jParams, JNI_ABORT); 54917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 55017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return ret; 551be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 552be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 553281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 554281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 555281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jint index, jlong value, jint size) { 556263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni // Size is signed with -1 indicating the value is an Allocation 557281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, 558263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni (uintptr_t)value, size); 559281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 560281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 561281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 562281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 563281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong fieldID, jlong value, jint size) { 564263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni // Size is signed with -1 indicating the value is an Allocation 565281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetGlobal((RsContext)con, (RsClosure)closureID, 566263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni (RsScriptFieldID)fieldID, (int64_t)value, size); 567281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 568281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 569281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic long 57035be56cce821d86f69026398ff9433e2d173b02fYang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, jstring name, 571ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni jstring cacheDir, jlongArray closureArray) { 57217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong ret = 0; 57317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 57435be56cce821d86f69026398ff9433e2d173b02fYang Ni AutoJavaStringToUTF8 nameUTF(_env, name); 575ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 576ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni 577281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 578281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 579ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jClosures == nullptr) { 580ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: closures."); 581ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 582ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 58317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 58417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsClosure* closures; 58517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 5867b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (numClosures > (jsize) RS_SCRIPT_GROUP_MAX_NUMBER_CLOSURES) { 58717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many closures in script group"); 58817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 58917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 59017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 59117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 59217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (closures == nullptr) { 59317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 59417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 59517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 596281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < numClosures; i++) { 597281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni closures[i] = (RsClosure)jClosures[i]; 598281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 599281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 60017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ret = (jlong)(uintptr_t)rsScriptGroup2Create( 60135be56cce821d86f69026398ff9433e2d173b02fYang Ni (RsContext)con, nameUTF.c_str(), nameUTF.length(), 60235be56cce821d86f69026398ff9433e2d173b02fYang Ni cacheDirUTF.c_str(), cacheDirUTF.length(), 603ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni closures, numClosures); 60417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 60517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Niexit: 60617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 60717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(closureArray, jClosures, JNI_ABORT); 60817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 60917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return ret; 610281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 611281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 612281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 613281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 614281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 615281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 616281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 61796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void 61825207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 61925207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 62025207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY, 62125207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 62225207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 62325207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 62425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 62525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 62625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 62725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 62825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 62925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 63025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 63125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 63225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 63325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.f = alpha; 63425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.f = beta; 63525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 63625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 63725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 63825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 63925207df658d6a8a3e885c7017fcc25702363583cTim Murray 64025207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 64125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 64225207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 64325207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 64425207df658d6a8a3e885c7017fcc25702363583cTim Murray 64525207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 646b742fcc808165fbeeb1a48761e7d629f60207de2Miao Wang in_allocs, NELEM(in_allocs), nullptr, 64725207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 64825207df658d6a8a3e885c7017fcc25702363583cTim Murray} 64925207df658d6a8a3e885c7017fcc25702363583cTim Murray 65025207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 65125207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 65225207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 65325207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY, 65425207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 65525207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 65625207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 65725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 65825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 65925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 66025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 66125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 66225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 66325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 66425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 66525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 66625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.d = alpha; 66725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.d = beta; 66825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 66925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 67025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 67125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 67225207df658d6a8a3e885c7017fcc25702363583cTim Murray 67325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 67425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 67525207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 67625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 67725207df658d6a8a3e885c7017fcc25702363583cTim Murray 67825207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 6790b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 68025207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 68125207df658d6a8a3e885c7017fcc25702363583cTim Murray} 68225207df658d6a8a3e885c7017fcc25702363583cTim Murray 68325207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 68425207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 68525207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 68625207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX, 68725207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 68825207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 68925207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 69025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 69125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 69225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 69325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 69425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 69525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 69625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 69725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 69825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 69925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.r = alphaX; 70025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.i = alphaY; 70125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.c.r = betaX; 70282585b3906955e57e199d962b8fe11b2bab87fbaMiao Wang call.beta.c.i = betaY; 70325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 70425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 70525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 70625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 70725207df658d6a8a3e885c7017fcc25702363583cTim Murray 70825207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 70925207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 71025207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 71125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 71225207df658d6a8a3e885c7017fcc25702363583cTim Murray 71325207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7140b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 71525207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 71625207df658d6a8a3e885c7017fcc25702363583cTim Murray} 71725207df658d6a8a3e885c7017fcc25702363583cTim Murray 71825207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 71925207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 72025207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 72125207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX, 72225207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 72325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 72425207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 72525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 72625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 72725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 72825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 72925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 73025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 73125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 73225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 73325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 73425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.r = alphaX; 73525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.i = alphaY; 73625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.z.r = betaX; 73782585b3906955e57e199d962b8fe11b2bab87fbaMiao Wang call.beta.z.i = betaY; 73825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 73925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 74025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 74125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 74225207df658d6a8a3e885c7017fcc25702363583cTim Murray 74325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 74425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 74525207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 74625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 74725207df658d6a8a3e885c7017fcc25702363583cTim Murray 74825207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7490b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 75025207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 75125207df658d6a8a3e885c7017fcc25702363583cTim Murray} 75225207df658d6a8a3e885c7017fcc25702363583cTim Murray 75325207df658d6a8a3e885c7017fcc25702363583cTim Murray 75425207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 7559cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim MurraynScriptIntrinsicBLAS_BNNM(JNIEnv *_env, jobject _this, jlong con, jlong id, jint M, jint N, jint K, 7569cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray jlong A, jint a_offset, jlong B, jint b_offset, jlong C, jint c_offset, 7579cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray jint c_mult_int) { 7589cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray RsBlasCall call; 7599cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray memset(&call, 0, sizeof(call)); 7609cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.func = RsBlas_bnnm; 7619cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.M = M; 7629cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.N = N; 7639cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.K = K; 7642514806817ec394d334595d76e20f3129117da6eMiao Wang call.a_offset = a_offset & 0xFF; 7652514806817ec394d334595d76e20f3129117da6eMiao Wang call.b_offset = b_offset & 0xFF; 7669cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.c_offset = c_offset; 7679cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.c_mult_int = c_mult_int; 7689cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7699cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray RsAllocation in_allocs[3]; 7709cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[0] = (RsAllocation)A; 7719cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[1] = (RsAllocation)B; 7729cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[2] = (RsAllocation)C; 7739cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7749cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7750b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7769cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray &call, sizeof(call), nullptr, 0); 7779cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray} 7789cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7799cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7809cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murraystatic void 781460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str) 7823eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{ 78367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 78467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 78567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 7863eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jint len = _env->GetArrayLength(str); 7873eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0); 788ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (cptr == nullptr) { 789ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 790ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 791ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 792ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 793eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len); 7943eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT); 7953eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams} 7963eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 797fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring 798460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj) 799fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{ 80067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 80167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 80267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 803488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes const char *name = nullptr; 804eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaGetName((RsContext)con, (void *)obj, &name); 805488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if(name == nullptr || strlen(name) == 0) { 806488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes return nullptr; 807581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk } 808fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk return _env->NewStringUTF(name); 809fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk} 810fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk 8117ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void 812460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 8137ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{ 81467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 81567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 81667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 817eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsObjDestroy((RsContext)con, (void *)obj); 8187ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams} 8197ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams 8203eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// --------------------------------------------------------------------------- 8213eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 822eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 823d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this) 824d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 82567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 82667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceCreate"); 82767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 8283aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsDeviceCreate(); 829d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 830d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 831d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 8325eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 833d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 83467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 83567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceDestroy"); 83667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 837d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return rsDeviceDestroy((RsDevice)dev); 838d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 839d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 840ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void 8415eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 842ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 84367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 84467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 84567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 846ebfb436a49673693b98469683451bd9ede797557Jason Sams return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 847ebfb436a49673693b98469683451bd9ede797557Jason Sams} 848ebfb436a49673693b98469683451bd9ede797557Jason Sams 849eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 85081cd2b18bd36285d1843f78418282e1dad156fbdJason SamsnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint flags, jint sdkVer, jint contextType) 851d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 85267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 85367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreate"); 85467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 85581cd2b18bd36285d1843f78418282e1dad156fbdJason Sams return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, 0, sdkVer, (RsContextType)contextType, flags); 856704ff64b099406bb328898a7443921f22dbffd6dJason Sams} 857704ff64b099406bb328898a7443921f22dbffd6dJason Sams 858eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 8595eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 8600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint colorMin, jint colorPref, 8610e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint alphaMin, jint alphaPref, 8620e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint depthMin, jint depthPref, 8630e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint stencilMin, jint stencilPref, 8640e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint samplesMin, jint samplesPref, jfloat samplesQ, 8650e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint dpi) 86611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{ 86786c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni RsSurfaceConfig sc = {}; 86811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaMin = alphaMin; 86911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaPref = alphaPref; 87011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorMin = colorMin; 87111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorPref = colorPref; 87211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthMin = depthMin; 87311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthPref = depthPref; 87411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesMin = samplesMin; 87511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesPref = samplesPref; 87611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesQ = samplesQ; 87711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams 87867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 87967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreateGL"); 88067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 8813aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi); 882d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 883d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 884d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 885eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 8867d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{ 88767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 88867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 88967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 890eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetPriority((RsContext)con, p); 8917d787b4722eaeb79cab42c36060336e092b77b5fJason Sams} 8927d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 89347f31582b67f492d9e1523abd0d8b86c38ec007dTim Murraystatic void 89447f31582b67f492d9e1523abd0d8b86c38ec007dTim MurraynContextSetCacheDir(JNIEnv *_env, jobject _this, jlong con, jstring cacheDir) 89547f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{ 89647f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 89747f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray 89847f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray if (kLogApi) { 89947f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray ALOGD("ContextSetCacheDir, con(%p), cacheDir(%s)", (RsContext)con, cacheDirUTF.c_str()); 90047f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray } 90147f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray rsContextSetCacheDir((RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length()); 90247f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray} 90347f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray 9047d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 9057d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 9067d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void 907eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd) 908efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{ 90967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 91067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, 91167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (Surface *)wnd); 91267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 913efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 914488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes ANativeWindow * window = nullptr; 915488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (wnd == nullptr) { 916efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 917efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } else { 91864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown window = android_view_Surface_getNativeWindow(_env, wnd).get(); 919efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } 920efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 921eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetSurface((RsContext)con, width, height, window); 922efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams} 923efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 924efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void 925eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con) 926d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 92767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 92867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDestroy, con(%p)", (RsContext)con); 92967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 930eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDestroy((RsContext)con); 931d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 932d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 933715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void 934eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 935715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{ 93667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 93767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 93867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 939715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams rsContextDump((RsContext)con, bits); 940715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams} 941d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 942d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 943eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con) 94465e7aa56f56097418d617663683544c25b3988eaJason Sams{ 94567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 94667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPause, con(%p)", (RsContext)con); 94767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 948eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextPause((RsContext)con); 94965e7aa56f56097418d617663683544c25b3988eaJason Sams} 95065e7aa56f56097418d617663683544c25b3988eaJason Sams 95165e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void 952eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con) 95365e7aa56f56097418d617663683544c25b3988eaJason Sams{ 95467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 95567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextResume, con(%p)", (RsContext)con); 95667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 957eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextResume((RsContext)con); 95865e7aa56f56097418d617663683544c25b3988eaJason Sams} 95965e7aa56f56097418d617663683544c25b3988eaJason Sams 9601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 9611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring 962eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 9631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 96467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 96567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con); 96667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 9671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams char buf[1024]; 9681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 9691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 9701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 971eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 97265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams buf, sizeof(buf), 97365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 974edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 9751c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if (!id && receiveLen) { 97609993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 9771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 9781c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams return _env->NewStringUTF(buf); 9791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 9801c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 981edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint 982eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 983516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 984516c31911578db8ce53529483c3ded918ac7dc6bJason Sams jint len = _env->GetArrayLength(data); 98567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 98667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 98767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 988488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = _env->GetIntArrayElements(data, nullptr); 989ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 990ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 991ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 992ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 993516c31911578db8ce53529483c3ded918ac7dc6bJason Sams size_t receiveLen; 9941c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 995eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 99665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, len * 4, 99765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 998edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 999516c31911578db8ce53529483c3ded918ac7dc6bJason Sams if (!id && receiveLen) { 100009993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 1001516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 1002516c31911578db8ce53529483c3ded918ac7dc6bJason Sams _env->ReleaseIntArrayElements(data, ptr, 0); 10030e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 10041c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 10051c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 10061c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint 1007eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 10081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 100967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 101067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPeekMessage, con(%p)", (RsContext)con); 101167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1012488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr); 1013ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (auxDataPtr == nullptr) { 1014ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1015ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 1016ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 10171c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 10181c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 1019eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 1020edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 10211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[0] = (jint)subID; 10221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[1] = (jint)receiveLen; 10231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 10240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 1025516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 1026516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1027eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 1028516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 102967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 103067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextInitToClient, con(%p)", (RsContext)con); 103167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1032eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextInitToClient((RsContext)con); 1033516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 1034516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1035eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 1036516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 103767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 103867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con); 103967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1040eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDeinitToClient((RsContext)con); 1041516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 1042516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1043455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void 1044eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 1045455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{ 1046488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = nullptr; 1047455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams jint len = 0; 1048455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 1049455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams len = _env->GetArrayLength(data); 10504a043c1853c117c1b4c4342e76cd16a5abdc1045Stephen Hines ptr = _env->GetIntArrayElements(data, nullptr); 1051ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1052ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1053ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1054ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1055455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 105667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 105767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 105867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1059eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 1060455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 1061455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 1062455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 1063455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams} 1064455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 1065455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 1066516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1067460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 106867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, 106967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint size) 1070d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 107167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 107209993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con, 107367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe type, kind, norm, size); 107467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 107567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, 10768c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni norm, size); 1077d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1078d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1079460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1080eff663f391fa4f119685d5c14489b94661ea126fTim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con, 10819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 1082d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1083718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int fieldCount = _env->GetArrayLength(_ids); 108467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 108567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementCreate2, con(%p)", (RsContext)con); 108667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1087718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 1088488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jIds = _env->GetLongArrayElements(_ids, nullptr); 1089ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jIds == nullptr) { 1090ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: ids"); 1091ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 1092ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1093488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr); 1094ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jArraySizes == nullptr) { 1095ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: arraySizes"); 1096ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 1097ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 10989807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 10999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 11009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 11019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 11029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < fieldCount; i ++) { 11039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat ids[i] = (RsElement)jIds[i]; 11049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat arraySizes[i] = (uint32_t)jArraySizes[i]; 11059807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 1106718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 11072123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 11082123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 11092123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **nameArray = names.c_str(); 11102123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *sizeArray = names.c_str_len(); 11112123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 11123aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con, 11139807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (const RsElement *)ids, fieldCount, 11147a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams nameArray, fieldCount * sizeof(size_t), sizeArray, 11158c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni (const uint32_t *)arraySizes, fieldCount); 11162123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 11179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(ids); 11189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(arraySizes); 11199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 11209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 11219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 11223aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)id; 1123d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1124d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1125dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 1126460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData) 1127dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 1128dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int dataSize = _env->GetArrayLength(_elementData); 112967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 113067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetNativeData, con(%p)", (RsContext)con); 113167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1132dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1133dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements 1134dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(dataSize == 5); 1135dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1136cbb0206cb478c862cb871a65e85115281ef12e02Miao Wang uint32_t elementData[5]; 1137eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize); 1138dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1139dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < dataSize; i ++) { 11409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint data = (jint)elementData[i]; 11419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_elementData, i, 1, &data); 1142dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1143dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1144dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1145dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1146dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 1147460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 11489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _IDs, 11497d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jobjectArray _names, 11507d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jintArray _arraySizes) 1151dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 11529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t dataSize = _env->GetArrayLength(_IDs); 115367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 115467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetSubElements, con(%p)", (RsContext)con); 115567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1156dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 11579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t)); 11589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const char **names = (const char **)malloc(dataSize * sizeof(const char *)); 1159cbb0206cb478c862cb871a65e85115281ef12e02Miao Wang size_t *arraySizes = (size_t *)malloc(dataSize * sizeof(size_t)); 1160dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 116167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 116267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (uint32_t)dataSize); 1163dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 11649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(uint32_t i = 0; i < dataSize; i++) { 11653aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong id = (jlong)(uintptr_t)ids[i]; 11669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint arraySize = (jint)arraySizes[i]; 1167dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 11689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_IDs, i, 1, &id); 11699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 1170dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1171dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1172dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(ids); 1173dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(names); 11747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk free(arraySizes); 1175dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1176dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1177d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1178d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1179460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1180460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 1181b109cc78616abee7291eb42094cd156b5db3355dJason Sams jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 1182d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 118367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 118467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 118509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv); 118667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 11873b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams 118867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, 11898c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni faces, yuv); 1190d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1191d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1192dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 11939807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData) 1194dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 1195dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // We are packing 6 items: mDimX; mDimY; mDimZ; 1196dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // mDimLOD; mDimFaces; mElement; into typeData 1197dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int elementCount = _env->GetArrayLength(_typeData); 1198dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1199dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(elementCount == 6); 120067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 120167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con); 120267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1203dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 12049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t typeData[6]; 1205eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6); 1206dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1207dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < elementCount; i ++) { 12083aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong data = (jlong)(uintptr_t)typeData[i]; 12099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_typeData, i, 1, &data); 1210dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1211dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1212dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1213d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1214d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1215460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 121667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 121767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong pointer) 1218d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 121967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 122067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 122167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 122267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 122367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type, 122467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocationMipmapControl)mips, 12258c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni (uint32_t)usage, (uintptr_t)pointer); 1226d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1227d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1228d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1229460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 12305476b450e50939940dcf3f15c92335cee2fc572dJason Sams{ 123167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 123267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, 123367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe bits); 123467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1235eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 12365476b450e50939940dcf3f15c92335cee2fc572dJason Sams} 12375476b450e50939940dcf3f15c92335cee2fc572dJason Sams 12388c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wangstatic void 12398c1509249c5552270d8accc2c9512f499a8f5e2dMiao WangnAllocationSetupBufferQueue(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint numAlloc) 12408c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{ 12418c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang if (kLogApi) { 12428c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang ALOGD("nAllocationSetupBufferQueue, con(%p), alloc(%p), numAlloc(%d)", (RsContext)con, 12438c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang (RsAllocation)alloc, numAlloc); 12448c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang } 12458c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang rsAllocationSetupBufferQueue((RsContext)con, (RsAllocation)alloc, (uint32_t)numAlloc); 12468c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang} 12478c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang 12488c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wangstatic void 12498c1509249c5552270d8accc2c9512f499a8f5e2dMiao WangnAllocationShareBufferQueue(JNIEnv *_env, jobject _this, jlong con, jlong alloc1, jlong alloc2) 12508c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{ 12518c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang if (kLogApi) { 12528c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang ALOGD("nAllocationShareBufferQueue, con(%p), alloc1(%p), alloc2(%p)", (RsContext)con, 12538c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang (RsAllocation)alloc1, (RsAllocation)alloc2); 12548c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang } 12558c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang 12568c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang rsAllocationShareBufferQueue((RsContext)con, (RsAllocation)alloc1, (RsAllocation)alloc2); 12578c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang} 12588c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang 125972226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject 1260460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a) 1261615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{ 126267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 126367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 126467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1265615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams 12661e95fc86581514c718fc96367f6d575e87fecffbMiao Wang ANativeWindow *anw = (ANativeWindow *)rsAllocationGetSurface((RsContext)con, (RsAllocation)a); 12671e95fc86581514c718fc96367f6d575e87fecffbMiao Wang 12681e95fc86581514c718fc96367f6d575e87fecffbMiao Wang sp<Surface> surface(static_cast<Surface*>(anw)); 12691e95fc86581514c718fc96367f6d575e87fecffbMiao Wang sp<IGraphicBufferProducer> bp = surface->getIGraphicBufferProducer(); 1270fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 127172226e0543461133b9e177a3e78ae50b0c65e797Jason Sams jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp); 127272226e0543461133b9e177a3e78ae50b0c65e797Jason Sams return o; 1273fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams} 1274fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 1275fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void 1276460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 1277163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 127867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 127967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con, 128067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, (Surface *)sur); 128167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1282163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 128333287e8a893821be86b395ce9d5d639cc8a535f3Miao Wang ANativeWindow *anw = nullptr; 1284163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams if (sur != 0) { 1285f35ddc9843af8979944a41237e3ad72248894c26Miao Wang // Connect the native window handle to buffer queue. 128633287e8a893821be86b395ce9d5d639cc8a535f3Miao Wang anw = ANativeWindow_fromSurface(_env, sur); 1287f35ddc9843af8979944a41237e3ad72248894c26Miao Wang native_window_api_connect(anw, NATIVE_WINDOW_API_CPU); 1288163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams } 1289163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 129033287e8a893821be86b395ce9d5d639cc8a535f3Miao Wang rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, anw); 1291163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1292163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1293163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1294460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1295163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 129667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 129709993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 129867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1299460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray rsAllocationIoSend((RsContext)con, (RsAllocation)alloc); 1300163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1301163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 13028c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wangstatic jlong 1303460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1304163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 130567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 130609993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 130767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 13088c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang return (jlong) rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc); 1309163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1310163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1311163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1312460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1313f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{ 131467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 131567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 131667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1317eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 1318f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams} 1319f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams 1320460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 132167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 132267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 1323fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{ 1324ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1325ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 1326fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 13275476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.lockPixels(); 13285476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 13293aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con, 133065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 13318c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni ptr, bitmap.getSize(), usage); 13325476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.unlockPixels(); 13335476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 1334ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams} 1335fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 1336460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 133767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, 133867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint mip, jobject jbitmap, jint usage) 1339a314551d69098537337c970da615a8f8af58e1f1Tim Murray{ 1340ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1341ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 1342a314551d69098537337c970da615a8f8af58e1f1Tim Murray 1343a314551d69098537337c970da615a8f8af58e1f1Tim Murray bitmap.lockPixels(); 1344a314551d69098537337c970da615a8f8af58e1f1Tim Murray const void* ptr = bitmap.getPixels(); 13453aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con, 1346a314551d69098537337c970da615a8f8af58e1f1Tim Murray (RsType)type, (RsAllocationMipmapControl)mip, 13478c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni (uint32_t)usage, (uintptr_t)ptr); 1348a314551d69098537337c970da615a8f8af58e1f1Tim Murray bitmap.unlockPixels(); 1349a314551d69098537337c970da615a8f8af58e1f1Tim Murray return id; 1350a314551d69098537337c970da615a8f8af58e1f1Tim Murray} 1351a314551d69098537337c970da615a8f8af58e1f1Tim Murray 1352460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 135367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 135467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 135567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{ 1356ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1357ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 135867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 13595476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.lockPixels(); 13605476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 13613aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con, 136265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 13638c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni ptr, bitmap.getSize(), usage); 13645476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.unlockPixels(); 13655476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 136667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk} 136767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 136826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void 1369460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 137026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{ 1371ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1372ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 1373f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int w = bitmap.width(); 1374f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int h = bitmap.height(); 137526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk 13764ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.lockPixels(); 13774ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams const void* ptr = bitmap.getPixels(); 1378eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 1379304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 138038faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray w, h, ptr, bitmap.getSize(), 0); 13814ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.unlockPixels(); 13828a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 13838a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 13844ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void 1385460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 13868a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{ 1387ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1388ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 13898a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 13904ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.lockPixels(); 13914ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams void* ptr = bitmap.getPixels(); 1392eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize()); 13934ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.unlockPixels(); 1394835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk bitmap.notifyPixelsChanged(); 13958a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 13968a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 1397414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1398d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1399460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 140087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint count, jobject data, jint sizeBytes, jint dataType, jint mSize, 140187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jboolean usePadding) 1402d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1403e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 140467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 140567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 140667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 140767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe dataType); 140867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 140987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, 141087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1411d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1412d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1413d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1414c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1415c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint xoff, jint yoff, jint zoff, 1416c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 141749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{ 141867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 141986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni jint len = _env->GetArrayLength(data); 1420c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang ALOGD("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 1421c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 142267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe sizeBytes); 142367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1424488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1425ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1426ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1427ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1428ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1429c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang rsAllocationElementData((RsContext)con, (RsAllocation)alloc, 1430c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang xoff, yoff, zoff, 1431c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang lod, ptr, sizeBytes, compIdx); 143249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 143349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams} 143449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams 1435c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang 1436414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 143749bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void 1438460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 143987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize, 144087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jboolean usePadding) 1441d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1442e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 1443e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 144467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 144567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 144667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 144767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 144887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h; 144987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, 145087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1451d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1452d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1453414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1454414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 145540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 1456eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 1457460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, 1458304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint dstMip, jint dstFace, 1459304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint width, jint height, 1460460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, 1461304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint srcMip, jint srcFace) 1462304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{ 146367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 146467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 146567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), dstFace(%i), width(%i), height(%i)," 146667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 146767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 146867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 146967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1470304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1471eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy2DRange((RsContext)con, 1472304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)dstAlloc, 1473304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstXoff, dstYoff, 1474304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstMip, dstFace, 1475304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk width, height, 1476304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)srcAlloc, 1477304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcXoff, srcYoff, 1478304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcMip, srcFace); 1479304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk} 1480304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1481414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1482304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void 1483460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 148487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType, 148587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1486b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 1487e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 148867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 148967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 149067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 149167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe lod, w, h, d, sizeBytes); 149267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 149387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h * d; 149487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, 149587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1496b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1497b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1498414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1499414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 1500b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void 1501eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 1502460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 1503b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint dstMip, 1504b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint width, jint height, jint depth, 1505460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 1506b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint srcMip) 1507b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 150867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 150967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 151067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), width(%i), height(%i)," 151167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 151267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, 151367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip); 151467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1515b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1516eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy3DRange((RsContext)con, 1517b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)dstAlloc, 1518b05d689653b1bc94836f716f29e9578677c29075Jason Sams dstXoff, dstYoff, dstZoff, dstMip, 1519b05d689653b1bc94836f716f29e9578677c29075Jason Sams width, height, depth, 1520b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)srcAlloc, 1521b05d689653b1bc94836f716f29e9578677c29075Jason Sams srcXoff, srcYoff, srcZoff, srcMip); 1522b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1523b05d689653b1bc94836f716f29e9578677c29075Jason Sams 152440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 1525414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 152640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 152787e908dfdece91b5f504386d4901fa3342dc8083Miao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType, 152887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1529fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 153021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 153167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 153267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 153367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 153487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = 0; 153587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocationRead, false, 153687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, ptr, len * typeBytes); 1537fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1538fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1539414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1540fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1541460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 154287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint count, jobject data, jint sizeBytes, jint dataType, 154387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1544fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 154521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 154667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 154767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 154867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 154967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 155087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocation1DRead, false, 155187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1552fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1553fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1554c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data. 1555c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void 155645cec0a9711f736df26fd097c6d74834e350f9bcMiao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1557c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint xoff, jint yoff, jint zoff, 155845cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 1559c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{ 1560c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang if (kLogApi) { 156186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni jint len = _env->GetArrayLength(data); 156245cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang ALOGD("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 156345cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 156445cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang sizeBytes); 1565c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang } 156645cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1567ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1568ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1569ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1570ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 157145cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang rsAllocationElementRead((RsContext)con, (RsAllocation)alloc, 157245cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang xoff, yoff, zoff, 1573a7e2509d8da69ab1c9e14b4ce6608786c572209aJason Sams lod, ptr, sizeBytes, compIdx); 1574bfa5e659e7b4cb49178d0e99712478b29f8301a7Miao Wang _env->ReleaseByteArrayElements(data, ptr, 0); 1575c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang} 1576c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang 1577414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1578fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1579460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 158087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, 158187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 158240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{ 158321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 158421659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 158567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 158667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 158767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 158867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 158987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h; 159087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocation2DRead, false, 159187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 159240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams} 159387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 1594c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1595c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void 1596c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 159787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jint d, jobject data, int sizeBytes, int dataType, 159887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1599c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{ 1600c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 1601c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang if (kLogApi) { 1602c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang ALOGD("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 1603c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 1604c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang lod, w, h, d, sizeBytes); 1605c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang } 160687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h * d; 160787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation3DRead, false, 160887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1609c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang} 1610d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1611460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1612460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1613dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 161467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 161567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 161667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16173aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a); 1618dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1619dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 16205edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void 1621460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 16225edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{ 162367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 162467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 162567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, dimX); 162667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1627eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 16285edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams} 16295edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams 163046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 163146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic jlong 163246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterCreate(JNIEnv *_env, jobject _this, jlong con, jlong basealloc, jlong type) 163346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 163446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 163546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterCreate, con(%p), base(%p), type(%p)", 163646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)basealloc, (RsElement)type); 163746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 163846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams return (jlong)(uintptr_t) rsAllocationAdapterCreate((RsContext)con, (RsType)type, 163946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsAllocation)basealloc); 164046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 164146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 164246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 164346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic void 164446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterOffset(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 164546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint x, jint y, jint z, jint face, jint lod, 164646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint a1, jint a2, jint a3, jint a4) 164746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 164846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams uint32_t params[] = { 164946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)x, (uint32_t)y, (uint32_t)z, (uint32_t)face, 165046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)lod, (uint32_t)a1, (uint32_t)a2, (uint32_t)a3, (uint32_t)a4 165146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams }; 165246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 165346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterOffset, con(%p), alloc(%p), x(%i), y(%i), z(%i), face(%i), lod(%i), arrays(%i %i %i %i)", 165446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)alloc, x, y, z, face, lod, a1, a2, a3, a4); 165546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 165646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams rsAllocationAdapterOffset((RsContext)con, (RsAllocation)alloc, 165746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams params, sizeof(params)); 165846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 165946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 166046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 1661aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// ----------------------------------- 1662aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1663460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1664460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset) 1665aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1666aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 16670e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", asset); 1668aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 16693aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength()); 1670b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1671b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1672b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1673460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1674eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path) 1675b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1676b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr); 1677488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1678b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1679b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1680b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1681b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1682b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); 1683488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (asset == nullptr) { 1684b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1685b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1686b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 16873aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset); 1688b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1689b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1690b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1691460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1692eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName) 1693b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1694b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 16953aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str()); 1696b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1697aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1698aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1699aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1700460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jint 1701460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D) 1702aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1703aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int32_t numEntries = 0; 1704eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D); 17050e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)numEntries; 1706aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1707aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1708aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void 1709460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries) 1710aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 17110e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 1712aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry)); 1713aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1714eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D); 1715aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1716aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk for(jint i = 0; i < numEntries; i ++) { 1717aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName)); 1718aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID); 1719aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 1720aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1721aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk free(fileEntries); 1722aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1723aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 17240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1725460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index) 1726aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 17270e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 17283aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D); 1729aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1730aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1731d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1732d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1733d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17340e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1735eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con, 1736b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fileName, jfloat fontSize, jint dpi) 17379b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{ 1738b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 17393aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con, 1740e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fileNameUTF.c_str(), fileNameUTF.length(), 1741e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi); 1742b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1743b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1744b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1745b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 17460e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1747eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, 17480e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jstring name, jfloat fontSize, jint dpi, jlong native_asset) 1749b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1750b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 1751b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 nameUTF(_env, name); 1752b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 17533aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1754e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk nameUTF.c_str(), nameUTF.length(), 1755e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1756b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1757b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1758b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1759b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 17600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1761eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path, 1762b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jfloat fontSize, jint dpi) 1763b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1764b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr); 1765488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1766b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1767b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1768b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1769b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1770b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); 1771488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (asset == nullptr) { 1772b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1773b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 17749b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 17753aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1776e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk str.c_str(), str.length(), 1777e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1778b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1779b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk delete asset; 17809b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk return id; 17819b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk} 17829b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 1783bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// ----------------------------------- 1784bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 1785bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void 1786460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot) 1787d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 178867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 178967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, 179067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsScript)script, (RsAllocation)alloc, slot); 179167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1792eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 1793d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1794d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1795d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1796460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val) 17974d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 179867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 179967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, 180067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 180167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1802eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 18034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 18044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 18057c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint 1806460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18077c4caadb939b1563328251c156262c179a685c70Tim Murray{ 180867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 180967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 181067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18117c4caadb939b1563328251c156262c179a685c70Tim Murray int value = 0; 1812eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18137c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18147c4caadb939b1563328251c156262c179a685c70Tim Murray} 18157c4caadb939b1563328251c156262c179a685c70Tim Murray 18164d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1817460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 18186f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{ 181967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 182009993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 182167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 182267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1823eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 18246f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams} 18256f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams 18266f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void 1827460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 1828031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{ 182967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 183009993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 183167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 183267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1833eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 1834031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines} 1835031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines 18367c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong 1837460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18387c4caadb939b1563328251c156262c179a685c70Tim Murray{ 183967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 184067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 184167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18427c4caadb939b1563328251c156262c179a685c70Tim Murray jlong value = 0; 1843eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18447c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18457c4caadb939b1563328251c156262c179a685c70Tim Murray} 18467c4caadb939b1563328251c156262c179a685c70Tim Murray 1847031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void 1848460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val) 18494d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 185067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 185167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, 185267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 185367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1854eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 18554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 18564d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 18577c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat 1858460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18597c4caadb939b1563328251c156262c179a685c70Tim Murray{ 186067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 186167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 186267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18637c4caadb939b1563328251c156262c179a685c70Tim Murray jfloat value = 0; 1864eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18657c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18667c4caadb939b1563328251c156262c179a685c70Tim Murray} 18677c4caadb939b1563328251c156262c179a685c70Tim Murray 18684d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1869460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val) 1870ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{ 187167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 187267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, 187367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 187467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1875eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 1876ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines} 1877ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines 18787c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble 1879460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18807c4caadb939b1563328251c156262c179a685c70Tim Murray{ 188167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 188267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 188367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18847c4caadb939b1563328251c156262c179a685c70Tim Murray jdouble value = 0; 1885eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18867c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18877c4caadb939b1563328251c156262c179a685c70Tim Murray} 18887c4caadb939b1563328251c156262c179a685c70Tim Murray 1889ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void 1890460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 18914d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 189267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 189367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 189467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18954d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1896488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1897ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1898ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1899ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1900ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1901eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 19024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 19034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 19044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1905adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void 1906460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 19077c4caadb939b1563328251c156262c179a685c70Tim Murray{ 190867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 190967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 191067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19117c4caadb939b1563328251c156262c179a685c70Tim Murray jint len = _env->GetArrayLength(data); 1912488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1913ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1914ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1915ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1916ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1917eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 1918414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements(data, ptr, 0); 19197c4caadb939b1563328251c156262c179a685c70Tim Murray} 19207c4caadb939b1563328251c156262c179a685c70Tim Murray 19217c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void 192267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 192367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong elem, jintArray dims) 1924adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{ 192567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 192667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 192767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1928adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint len = _env->GetArrayLength(data); 1929488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1930ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1931ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1932ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1933ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1934adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1935488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr); 1936ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (dimsPtr == nullptr) { 1937ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1938ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1939ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1940eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 1941bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines (const uint32_t*) dimsPtr, dimsLen); 1942adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1943adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1944adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines} 1945adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines 1946d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1947d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1948460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone) 1949584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{ 195067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 195167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script); 195267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1953584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1954584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jint length = _env->GetArrayLength(timeZone); 1955584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jbyte* timeZone_ptr; 1956584a375df68ed7d62b38389078c6804edf228f9cRomain Guy timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 1957ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (timeZone_ptr == nullptr) { 1958ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1959ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1960ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1961584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1962eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 1963584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1964584a375df68ed7d62b38389078c6804edf228f9cRomain Guy if (timeZone_ptr) { 1965584a375df68ed7d62b38389078c6804edf228f9cRomain Guy _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1966584a375df68ed7d62b38389078c6804edf228f9cRomain Guy } 1967584a375df68ed7d62b38389078c6804edf228f9cRomain Guy} 1968584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 196922534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void 1970460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot) 197122534176fb5c1257130ef4ee589739ca42766a32Jason Sams{ 197267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 197367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 197467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1975eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvoke((RsContext)con, (RsScript)obj, slot); 197622534176fb5c1257130ef4ee589739ca42766a32Jason Sams} 197722534176fb5c1257130ef4ee589739ca42766a32Jason Sams 1978584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void 1979460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 1980be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{ 198167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 198267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 198367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19844d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1985488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1986ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1987ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1988ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1989ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1990eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 19914d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1992be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams} 1993be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 19946e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void 1995be7b1defb6b11920703b241ba5815fb09487bb02Chris WailesnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 1996be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jlongArray ains, jlong aout, jbyteArray params, 1997be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jintArray limits) 19986e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{ 199967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 20009eb9dd326ae93cd84eb9bbc740f753fe8d8c7a13Chih-Hung Hsieh ALOGD("nScriptForEach, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 200167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2002949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2003be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint in_len = 0; 2004488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *in_ptr = nullptr; 2005949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2006488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsAllocation *in_allocs = nullptr; 2007949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2008488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 2009be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_len = _env->GetArrayLength(ains); 20107b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 201117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many arguments in kernel launch."); 201217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni // TODO (b/20758983): Report back to Java and throw an exception 201317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return; 201417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 2015eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 201617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni in_ptr = _env->GetLongArrayElements(ains, nullptr); 2017ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (in_ptr == nullptr) { 2018ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2019ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 2020ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2021ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 2022be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (sizeof(RsAllocation) == sizeof(jlong)) { 2023be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)in_ptr; 2024be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } else { 2025be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes // Convert from 64-bit jlong types to the native pointer type. 2026eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 2027be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 202817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (in_allocs == nullptr) { 202917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Failed launching kernel for lack of memory."); 203017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 203117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return; 203217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 2033be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2034be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes for (int index = in_len; --index >= 0;) { 2035be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs[index] = (RsAllocation)in_ptr[index]; 2036be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2037be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2038949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 2039949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2040be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint param_len = 0; 2041488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *param_ptr = nullptr; 2042be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2043488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 2044be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_len = _env->GetArrayLength(params); 2045488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes param_ptr = _env->GetByteArrayElements(params, nullptr); 2046ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (param_ptr == nullptr) { 2047ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2048ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 2049ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2050c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines } 2051949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2052488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsScriptCall sc, *sca = nullptr; 2053be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes uint32_t sc_size = 0; 2054949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2055be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint limit_len = 0; 2056488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *limit_ptr = nullptr; 2057949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2058488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 2059be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limit_len = _env->GetArrayLength(limits); 2060488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes limit_ptr = _env->GetIntArrayElements(limits, nullptr); 2061ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (limit_ptr == nullptr) { 2062ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2063ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 2064ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2065949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2066be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes assert(limit_len == 6); 206767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe UNUSED(limit_len); // As the assert might not be compiled. 2068949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2069be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xStart = limit_ptr[0]; 2070be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xEnd = limit_ptr[1]; 2071be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yStart = limit_ptr[2]; 2072be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yEnd = limit_ptr[3]; 2073be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zStart = limit_ptr[4]; 2074be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zEnd = limit_ptr[5]; 2075be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 207614331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayStart = 0; 207714331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayEnd = 0; 207814331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2Start = 0; 207914331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2End = 0; 208014331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3Start = 0; 208114331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3End = 0; 208214331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4Start = 0; 208314331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4End = 0; 2084949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2085be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sca = ≻ 2086e8f2e445fdb138416043a16659bbf86fbbd3fff8Yang Ni // sc_size is required, but unused, by the runtime and drivers. 2087e8f2e445fdb138416043a16659bbf86fbbd3fff8Yang Ni sc_size = sizeof(sc); 2088be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2089949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2090be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes rsScriptForEachMulti((RsContext)con, (RsScript)script, slot, 2091be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs, in_len, (RsAllocation)aout, 2092be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_ptr, param_len, sca, sc_size); 2093949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2094488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 2095be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 2096949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 2097949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2098488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 2099be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT); 2100eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes } 2101c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines 2102488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 2103be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 2104be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2105949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes} 2106949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 210736eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Walastatic void 210836eb1f74b3d19d9dbae0803f3bc271683be811ceMatt WalanScriptReduce(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 21094a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross jlongArray ains, jlong aout, jintArray limits) 211036eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala{ 211136eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala if (kLogApi) { 21124a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross ALOGD("nScriptReduce, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 211326ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 211426ef7a739b724452f93f850a1c268c42e439317bDavid Gross 211526ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (ains == nullptr) { 211626ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("At least one input required."); 211726ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 211826ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 211926ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 212026ef7a739b724452f93f850a1c268c42e439317bDavid Gross jint in_len = _env->GetArrayLength(ains); 212126ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 212226ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Too many arguments in kernel launch."); 212326ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 212426ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 212526ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 212626ef7a739b724452f93f850a1c268c42e439317bDavid Gross 212726ef7a739b724452f93f850a1c268c42e439317bDavid Gross jlong *in_ptr = _env->GetLongArrayElements(ains, nullptr); 212826ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (in_ptr == nullptr) { 212926ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Failed to get Java array elements"); 213026ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 213126ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 213226ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 213326ef7a739b724452f93f850a1c268c42e439317bDavid Gross 213426ef7a739b724452f93f850a1c268c42e439317bDavid Gross RsAllocation *in_allocs = nullptr; 213526ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (sizeof(RsAllocation) == sizeof(jlong)) { 213626ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_allocs = (RsAllocation*)in_ptr; 213726ef7a739b724452f93f850a1c268c42e439317bDavid Gross } else { 213826ef7a739b724452f93f850a1c268c42e439317bDavid Gross // Convert from 64-bit jlong types to the native pointer type. 213926ef7a739b724452f93f850a1c268c42e439317bDavid Gross 214026ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 214126ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (in_allocs == nullptr) { 214226ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Failed launching kernel for lack of memory."); 214326ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 214426ef7a739b724452f93f850a1c268c42e439317bDavid Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 214526ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 214626ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 214726ef7a739b724452f93f850a1c268c42e439317bDavid Gross 214826ef7a739b724452f93f850a1c268c42e439317bDavid Gross for (int index = in_len; --index >= 0;) { 214926ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_allocs[index] = (RsAllocation)in_ptr[index]; 215026ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 215126ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 215226ef7a739b724452f93f850a1c268c42e439317bDavid Gross 215326ef7a739b724452f93f850a1c268c42e439317bDavid Gross RsScriptCall sc, *sca = nullptr; 215426ef7a739b724452f93f850a1c268c42e439317bDavid Gross uint32_t sc_size = 0; 215526ef7a739b724452f93f850a1c268c42e439317bDavid Gross 215626ef7a739b724452f93f850a1c268c42e439317bDavid Gross jint limit_len = 0; 215726ef7a739b724452f93f850a1c268c42e439317bDavid Gross jint *limit_ptr = nullptr; 215826ef7a739b724452f93f850a1c268c42e439317bDavid Gross 215926ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (limits != nullptr) { 216026ef7a739b724452f93f850a1c268c42e439317bDavid Gross limit_len = _env->GetArrayLength(limits); 216126ef7a739b724452f93f850a1c268c42e439317bDavid Gross limit_ptr = _env->GetIntArrayElements(limits, nullptr); 216226ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (limit_ptr == nullptr) { 216326ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Failed to get Java array elements"); 216426ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 216526ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 216626ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 216726ef7a739b724452f93f850a1c268c42e439317bDavid Gross 216826ef7a739b724452f93f850a1c268c42e439317bDavid Gross assert(limit_len == 6); 216926ef7a739b724452f93f850a1c268c42e439317bDavid Gross UNUSED(limit_len); // As the assert might not be compiled. 217026ef7a739b724452f93f850a1c268c42e439317bDavid Gross 217126ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.xStart = limit_ptr[0]; 217226ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.xEnd = limit_ptr[1]; 217326ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.yStart = limit_ptr[2]; 217426ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.yEnd = limit_ptr[3]; 217526ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.zStart = limit_ptr[4]; 217626ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.zEnd = limit_ptr[5]; 217726ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 217826ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.arrayStart = 0; 217926ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.arrayEnd = 0; 218026ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array2Start = 0; 218126ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array2End = 0; 218226ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array3Start = 0; 218326ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array3End = 0; 218426ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array4Start = 0; 218526ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array4End = 0; 218626ef7a739b724452f93f850a1c268c42e439317bDavid Gross 218726ef7a739b724452f93f850a1c268c42e439317bDavid Gross sca = ≻ 218826ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc_size = sizeof(sc); 218926ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 219026ef7a739b724452f93f850a1c268c42e439317bDavid Gross 21914a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross rsScriptReduce((RsContext)con, (RsScript)script, slot, 21924a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross in_allocs, in_len, (RsAllocation)aout, 21934a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross sca, sc_size); 219426ef7a739b724452f93f850a1c268c42e439317bDavid Gross 219526ef7a739b724452f93f850a1c268c42e439317bDavid Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 219626ef7a739b724452f93f850a1c268c42e439317bDavid Gross 219726ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (limits != nullptr) { 219826ef7a739b724452f93f850a1c268c42e439317bDavid Gross _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 219926ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 220026ef7a739b724452f93f850a1c268c42e439317bDavid Gross} 220126ef7a739b724452f93f850a1c268c42e439317bDavid Gross 2202fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// ----------------------------------- 2203fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 22040e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2205eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 2206e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jstring resName, jstring cacheDir, 2207e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jbyteArray scriptRef, jint length) 2208d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 220967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 221067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCCreate, con(%p)", (RsContext)con); 221167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2212e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 2213e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 resNameUTF(_env, resName); 2214e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 22150e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jlong ret = 0; 2216488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte* script_ptr = nullptr; 221743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint _exception = 0; 221843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint remaining; 221943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (!scriptRef) { 222043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 22218451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 222243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 222343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 222443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (length < 0) { 222543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 22268451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 222743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 222843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 2229e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams remaining = _env->GetArrayLength(scriptRef); 223043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (remaining < length) { 223143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 22328451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", 22338451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes // "length > script.length - offset"); 223443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 223543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 2236e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams script_ptr = (jbyte *) 223743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 2238ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (script_ptr == nullptr) { 2239ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2240ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 2241ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 224243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich 2243eff663f391fa4f119685d5c14489b94661ea126fTim Murray //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length); 2244e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 22453aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con, 2246e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk resNameUTF.c_str(), resNameUTF.length(), 2247e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk cacheDirUTF.c_str(), cacheDirUTF.length(), 2248e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams (const char *)script_ptr, length); 224939ddc950c9064129ead5de04b200106c0659f937Jason Sams 225043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit: 2251e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams if (script_ptr) { 2252e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 225343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception ? JNI_ABORT: 0); 225443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 2255d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 22563aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)ret; 2257d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2258d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2259460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2260460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid) 22616ab97682fd444586ee135912a4210417a1c8781bJason Sams{ 226267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 226367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, 226467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)eid); 226567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 22663aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 22676ab97682fd444586ee135912a4210417a1c8781bJason Sams} 22686ab97682fd444586ee135912a4210417a1c8781bJason Sams 2269460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2270460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig) 227108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 227267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 227367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 227467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)sid, slot, sig); 227567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 22763aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig); 227708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 227808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2279460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2280be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 2281be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{ 2282be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni if (kLogApi) { 22837ff53fa0d42795da55b65468e07df82029deda79Elliott Hughes ALOGD("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, 2284be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (void *)sid, slot); 2285be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 2286be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return (jlong)(uintptr_t)rsScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 2287be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 2288be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 2289be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 2290460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 229108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 229267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 229367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, 229467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot); 229567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 22963aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 229708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 229808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2299460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 23009807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 23019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _dstk, jlongArray _dstf, jlongArray _types) 230208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 230367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 230467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con); 230567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 230608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2307a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong id = 0; 2308a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2309a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* kernelsPtr; 23109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint kernelsLen = _env->GetArrayLength(_kernels); 2311488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 2312a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2313a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* srcPtr; 2314a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint srcLen = _env->GetArrayLength(_src); 2315a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 2316a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2317a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* dstkPtr; 2318a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint dstkLen = _env->GetArrayLength(_dstk); 2319a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 2320a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2321a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* dstfPtr; 2322a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint dstfLen = _env->GetArrayLength(_dstf); 2323a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 2324a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2325a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsType* typesPtr; 2326a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint typesLen = _env->GetArrayLength(_types); 2327a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 2328a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2329ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jKernelsPtr == nullptr) { 2330ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: kernels"); 2331a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2332a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2333a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jSrcPtr == nullptr) { 2334a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: src"); 2335a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2336a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2337a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstkPtr == nullptr) { 2338a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: dstk"); 2339a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2340a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2341a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstfPtr == nullptr) { 2342a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: dstf"); 2343a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2344ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2345a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jTypesPtr == nullptr) { 2346a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: types"); 2347a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2348a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2349a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2350a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 23519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < kernelsLen; ++i) { 23529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 23539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 23549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2355a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 23569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < srcLen; ++i) { 23579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 23589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 23599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2360a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 23619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstkLen; ++i) { 23629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 23639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 23649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2365a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 23669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstfLen; ++i) { 23679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 23689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 23699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2370a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 23719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < typesLen; ++i) { 23729807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat typesPtr[i] = (RsType)jTypesPtr[i]; 23739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 23749807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2375a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con, 23769807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 23779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 23789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 23799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 23809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsType *)typesPtr, typesLen * sizeof(RsType)); 23819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 23829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(kernelsPtr); 23839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(srcPtr); 23849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstkPtr); 23859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstfPtr); 23869807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(typesPtr); 2387a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2388a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wangcleanup: 2389a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jKernelsPtr != nullptr) { 2390a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 2391a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2392a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jSrcPtr != nullptr) { 2393a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 2394a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2395a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstkPtr != nullptr) { 2396a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 2397a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2398a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstfPtr != nullptr) { 2399a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 2400a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2401a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jTypesPtr != nullptr) { 2402a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 2403a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2404a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 240508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return id; 240608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 240708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 240808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2409460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 241008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 241167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 241267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 241367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 241467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2415eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 241608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 241708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 241808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2419460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 242008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 242167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 242267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 242367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 242467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2425eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 242608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 242708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 242808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2429460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 243008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 243167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 243267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 243367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2434eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 243508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 243608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2437d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2438d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 24390e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2440eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con, 2441331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA, 2442331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean depthMask, jboolean ditherEnable, 2443331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint srcFunc, jint destFunc, 2444331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint depthFunc) 2445d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 244667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 244767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con); 244867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 24493aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA, 2450331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc, 2451331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc); 2452d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2453d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 24540011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// --------------------------------------------------------------------------- 24550011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 24560011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void 2457460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a) 24580011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{ 245967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 246067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, 246167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramVertex)vpv, slot, (RsAllocation)a); 246267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2463eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a); 24640011bcf57ff711a221a3a4c73f2a79125111647dJason Sams} 246554c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 2466d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 2467460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 246854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{ 246967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 247067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 247167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsAllocation)a); 247267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2473eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a); 247454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams} 247554c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 247654c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void 2477460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 2478d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 247967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 248067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 248167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsSampler)a); 248267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2483eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a); 2484d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2485d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 248668afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// --------------------------------------------------------------------------- 2487d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2488460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2489eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 24909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 24917e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{ 2492b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 2493488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 24947e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams jint paramLen = _env->GetArrayLength(params); 2495ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jParamPtr == nullptr) { 2496ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2497ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 2498ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 24997e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 25012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 25022123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 25032123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 25042123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 250567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 250667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 250767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 25087e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 25109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 25119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 25129807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 25133aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 25142123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 25159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 25162123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 25179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 25189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 25197e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams return ret; 25207e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams} 25217e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25227e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25231fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// --------------------------------------------------------------------------- 25241fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 2525460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2526eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 25279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 25281fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{ 2529b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 2530488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 25310011bcf57ff711a221a3a4c73f2a79125111647dJason Sams jint paramLen = _env->GetArrayLength(params); 2532ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jParamPtr == nullptr) { 2533ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2534ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 2535ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 25361fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 253767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 253867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 253967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2540ee41112e1539de95596600fd2c6dada5d275217fJason Sams 25412123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 25422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 25432123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 25442123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 25452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 25469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 25479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 25489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 25499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 25509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 25513aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 25522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 25539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 25542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 25559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 25569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 25570011bcf57ff711a221a3a4c73f2a79125111647dJason Sams return ret; 25581fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams} 25591fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 2560ebfb436a49673693b98469683451bd9ede797557Jason Sams// --------------------------------------------------------------------------- 2561ebfb436a49673693b98469683451bd9ede797557Jason Sams 2562460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2563eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull) 2564ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 256567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 256667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, 256767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe pointSprite, cull); 256867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 25693aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull); 2570ebfb436a49673693b98469683451bd9ede797557Jason Sams} 2571ebfb436a49673693b98469683451bd9ede797557Jason Sams 2572d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2573d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2574d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2575d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 257678c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script) 2577d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 257867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 257967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script); 258067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2581eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindRootScript((RsContext)con, (RsScript)script); 2582d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2583d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2584d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 258578c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs) 2586d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 258767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 258867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs); 258967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2590eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs); 2591d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2592d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2593d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 259478c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf) 2595d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 259667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 259767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, 259867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)pf); 259967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2600eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf); 2601d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2602d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 26030826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void 260478c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf) 26050826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{ 260667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 260767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf); 260867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2609eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf); 26100826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams} 26110826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams 2612d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void 261378c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf) 2614ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 261567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 261667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf); 261767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2618eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf); 2619ebfb436a49673693b98469683451bd9ede797557Jason Sams} 2620ebfb436a49673693b98469683451bd9ede797557Jason Sams 2621d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato 262202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// --------------------------------------------------------------------------- 262302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 26240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2625eff663f391fa4f119685d5c14489b94661ea126fTim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 2626a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 262702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{ 262867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 262967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nSamplerCreate, con(%p)", (RsContext)con); 263067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 26313aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con, 2632a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)magFilter, 2633a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)minFilter, 2634a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapS, 2635a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapT, 2636a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapR, 2637a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk aniso); 263802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams} 263902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 2640bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// --------------------------------------------------------------------------- 2641bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams 2642460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 26439807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim) 2644164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{ 264567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 264667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshCreate, con(%p)", (RsContext)con); 264767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2648164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 2649a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong id = 0; 2650a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2651a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsAllocation* vtxPtr; 265225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint vtxLen = _env->GetArrayLength(_vtx); 2653488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr); 2654a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2655a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsAllocation* idxPtr; 2656a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint idxLen = _env->GetArrayLength(_idx); 2657a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr); 2658a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2659a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint primLen = _env->GetArrayLength(_prim); 2660a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint *primPtr = _env->GetIntArrayElements(_prim, nullptr); 2661a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2662ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jVtxPtr == nullptr) { 2663ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: vtx"); 2664a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanupMesh; 2665a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2666a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jIdxPtr == nullptr) { 2667a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: idx"); 2668a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanupMesh; 2669a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2670a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (primPtr == nullptr) { 2671a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: prim"); 2672a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanupMesh; 2673ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2674a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2675a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen); 26769807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < vtxLen; ++i) { 26779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i]; 26789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 26799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2680a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen); 26819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < idxLen; ++i) { 26829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i]; 26839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 26849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2685a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con, 2686a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang (RsAllocation *)vtxPtr, vtxLen, 2687a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang (RsAllocation *)idxPtr, idxLen, 2688a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang (uint32_t *)primPtr, primLen); 268980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 26909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(vtxPtr); 26919807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(idxPtr); 2692a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2693a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao WangcleanupMesh: 2694a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jVtxPtr != nullptr) { 2695a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0); 2696a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2697a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jIdxPtr != nullptr) { 2698a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0); 2699a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2700a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (primPtr != nullptr) { 2701a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseIntArrayElements(_prim, primPtr, 0); 2702a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2703a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 270425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk return id; 27059d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk} 27069d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk 270780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2708460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 270980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 271067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 271167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 271267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 271380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint vtxCount = 0; 2714eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount); 271580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return vtxCount; 271680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 271780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 271880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2719460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 272080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 272167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 272267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 272367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 272480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint idxCount = 0; 2725eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount); 272680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return idxCount; 272780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 272880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 272980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 27309807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs) 273180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 273267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 273367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 273467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 273580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 273680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation)); 2737eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs); 273880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 273980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numVtxIDs; i ++) { 27403aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 27419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_ids, i, 1, &alloc); 274280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 274380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 274480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 274580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 274680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 274780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 27489807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices) 274980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 275067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 275167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 275267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 275380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 275480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation)); 275580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t)); 275680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 2757eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices); 275880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 275980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numIndices; i ++) { 27603aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 27619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint prim = (jint)prims[i]; 27629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_idxIds, i, 1, &alloc); 27639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_primitives, i, 1, &prim); 276480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 276580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 276680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 276780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(prims); 2768164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk} 2769164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 277056f9e6f8d5436d50530807950661e66ca5efe2bbTim Murraystatic jint 277156f9e6f8d5436d50530807950661e66ca5efe2bbTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) { 277256f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray return (jint)sizeof(void*); 277356f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray} 277456f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 27750facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wangstatic jobject 27760facf021ea1a0399d956372b9d3ad9025a9a04d2Miao WangnAllocationGetByteBuffer(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 27770facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jlongArray strideArr, jint xBytesSize, 27780facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jint dimY, jint dimZ) { 27790facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (kLogApi) { 27800facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang ALOGD("nAllocationGetByteBuffer, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 27810facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 27820facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang 27830facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jlong *jStridePtr = _env->GetLongArrayElements(strideArr, nullptr); 27840facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (jStridePtr == nullptr) { 27850facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang ALOGE("Failed to get Java array elements: strideArr"); 27860facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang return 0; 27870facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 278856f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 27890facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang size_t strideIn = xBytesSize; 27900facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang void* ptr = nullptr; 27910facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (alloc != 0) { 27920facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang ptr = rsAllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 27930facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 27940facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang &strideIn, sizeof(size_t)); 27950facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 27960facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang 27970facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jobject byteBuffer = nullptr; 27980facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (ptr != nullptr) { 27990facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang size_t bufferSize = strideIn; 28000facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jStridePtr[0] = strideIn; 28010facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (dimY > 0) { 28020facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang bufferSize *= dimY; 28030facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28040facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (dimZ > 0) { 28050facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang bufferSize *= dimZ; 28060facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28070facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang byteBuffer = _env->NewDirectByteBuffer(ptr, (jlong) bufferSize); 28080facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28090facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang _env->ReleaseLongArrayElements(strideArr, jStridePtr, 0); 28100facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang return byteBuffer; 28110facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang} 2812164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// --------------------------------------------------------------------------- 2813164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 2814d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 281594d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript"; 2816d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 281776f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod methods[] = { 28181c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit", "()V", (void*)_nInit }, 28191c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2820eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 2821eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 2822eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 2823eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 2824eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 2825eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 28261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2827eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 2828eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 28292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 28302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 28312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java. 2832eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreate", "(JIII)J", (void*)nContextCreate }, 2833eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreateGL", "(JIIIIIIIIIIIIFI)J", (void*)nContextCreateGL }, 2834eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 2835eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 283647f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{"rsnContextSetCacheDir", "(JLjava/lang/String;)V", (void*)nContextSetCacheDir }, 2837eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetSurface", "(JIILandroid/view/Surface;)V", (void*)nContextSetSurface }, 2838eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 2839eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDump", "(JI)V", (void*)nContextDump }, 2840eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextPause", "(J)V", (void*)nContextPause }, 2841eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextResume", "(J)V", (void*)nContextResume }, 2842eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 2843281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 2844be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 2845281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 2846281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 2847460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAssignName", "(JJ[B)V", (void*)nAssignName }, 2848460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnGetName", "(JJ)Ljava/lang/String;", (void*)nGetName }, 2849460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 2850eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2851460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromFile", "(JLjava/lang/String;)J", (void*)nFileA3DCreateFromFile }, 28520e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream", "(JJ)J", (void*)nFileA3DCreateFromAssetStream }, 2853460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J", (void*)nFileA3DCreateFromAsset }, 2854460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetNumIndexEntries", "(JJ)I", (void*)nFileA3DGetNumIndexEntries }, 2855460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetIndexEntries", "(JJI[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries }, 28560e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex", "(JJI)J", (void*)nFileA3DGetEntryByIndex }, 2857eff663f391fa4f119685d5c14489b94661ea126fTim Murray 28580e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile", "(JLjava/lang/String;FI)J", (void*)nFontCreateFromFile }, 28590e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream", "(JLjava/lang/String;FIJ)J", (void*)nFontCreateFromAssetStream }, 28600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J", (void*)nFontCreateFromAsset }, 2861eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2862460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 28639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 2864460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementGetNativeData", "(JJ[I)V", (void*)nElementGetNativeData }, 28659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 2866460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2867460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 28689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData", "(JJ[J)V", (void*)nTypeGetNativeData }, 2869460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 28709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 2871460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 2872460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 2873460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 2874460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2875460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 2876460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 2877460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2878460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 28798c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{"rsnAllocationSetupBufferQueue", "(JJI)V", (void*)nAllocationSetupBufferQueue }, 28808c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{"rsnAllocationShareBufferQueue", "(JJJ)V", (void*)nAllocationShareBufferQueue }, 2881460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetSurface", "(JJ)Landroid/view/Surface;", (void*)nAllocationGetSurface }, 2882460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 2883460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 28848c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{"rsnAllocationIoReceive", "(JJ)J", (void*)nAllocationIoReceive }, 288587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 2886c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 288787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 2888460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 288987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 2890460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 289187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 289287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 289345cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 289487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 289587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 2896460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 2897460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 2898460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 2899460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 290046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterCreate", "(JJJ)J", (void*)nAllocationAdapterCreate }, 290146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterOffset", "(JJIIIIIIIII)V", (void*)nAllocationAdapterOffset }, 290246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 2903460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptBindAllocation", "(JJJI)V", (void*)nScriptBindAllocation }, 2904460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetTimeZone", "(JJ[B)V", (void*)nScriptSetTimeZone }, 2905460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvoke", "(JJI)V", (void*)nScriptInvoke }, 2906460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV }, 2907be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2908be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEach }, 29094a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross{"rsnScriptReduce", "(JJI[JJ[I)V", (void*)nScriptReduce }, 2910be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2911460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI }, 2912460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI }, 2913460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarJ", "(JJIJ)V", (void*)nScriptSetVarJ }, 2914460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarJ", "(JJI)J", (void*)nScriptGetVarJ }, 2915460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarF", "(JJIF)V", (void*)nScriptSetVarF }, 2916460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarF", "(JJI)F", (void*)nScriptGetVarF }, 2917460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarD", "(JJID)V", (void*)nScriptSetVarD }, 2918460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarD", "(JJI)D", (void*)nScriptGetVarD }, 2919460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarV", "(JJI[B)V", (void*)nScriptSetVarV }, 2920460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarV", "(JJI[B)V", (void*)nScriptGetVarV }, 2921460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarVE", "(JJI[BJ[I)V", (void*)nScriptSetVarVE }, 2922460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarObj", "(JJIJ)V", (void*)nScriptSetVarObj }, 2923eff663f391fa4f119685d5c14489b94661ea126fTim Murray 29240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 2925460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptIntrinsicCreate", "(JIJ)J", (void*)nScriptIntrinsicCreate }, 2926460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptKernelIDCreate", "(JJII)J", (void*)nScriptKernelIDCreate }, 2927be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 2928460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate }, 29299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 293035be56cce821d86f69026398ff9433e2d173b02fYang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;Ljava/lang/String;[J)J", (void*)nScriptGroup2Create }, 2931460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 2932460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 2933460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 2934281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 2935eff663f391fa4f119685d5c14489b94661ea126fTim Murray 293625207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Single", "(JJIIIIIIIIIFJJFJIIII)V", (void*)nScriptIntrinsicBLAS_Single }, 293725207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Double", "(JJIIIIIIIIIDJJDJIIII)V", (void*)nScriptIntrinsicBLAS_Double }, 293825207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Complex", "(JJIIIIIIIIIFFJJFFJIIII)V", (void*)nScriptIntrinsicBLAS_Complex }, 293925207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Z", "(JJIIIIIIIIIDDJJDDJIIII)V", (void*)nScriptIntrinsicBLAS_Z }, 294025207df658d6a8a3e885c7017fcc25702363583cTim Murray 29419cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray{"rsnScriptIntrinsicBLAS_BNNM", "(JJIIIJIJIJII)V", (void*)nScriptIntrinsicBLAS_BNNM }, 29429cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 29430e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate", "(JZZZZZZIII)J", (void*)nProgramStoreCreate }, 2944eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2945460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants }, 2946460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindTexture", "(JJIJ)V", (void*)nProgramBindTexture }, 2947460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindSampler", "(JJIJ)V", (void*)nProgramBindSampler }, 2948eff663f391fa4f119685d5c14489b94661ea126fTim Murray 29499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramFragmentCreate }, 2950460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramRasterCreate", "(JZI)J", (void*)nProgramRasterCreate }, 29519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramVertexCreate }, 2952eff663f391fa4f119685d5c14489b94661ea126fTim Murray 295378c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript", "(JJ)V", (void*)nContextBindRootScript }, 295478c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore", "(JJ)V", (void*)nContextBindProgramStore }, 295578c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment", "(JJ)V", (void*)nContextBindProgramFragment }, 295678c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex", "(JJ)V", (void*)nContextBindProgramVertex }, 295778c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster", "(JJ)V", (void*)nContextBindProgramRaster }, 2958eff663f391fa4f119685d5c14489b94661ea126fTim Murray 29590e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 2960eff663f391fa4f119685d5c14489b94661ea126fTim Murray 29619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate", "(J[J[J[I)J", (void*)nMeshCreate }, 2962eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2963460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetVertexBufferCount", "(JJ)I", (void*)nMeshGetVertexBufferCount }, 2964460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetIndexCount", "(JJ)I", (void*)nMeshGetIndexCount }, 29659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices", "(JJ[JI)V", (void*)nMeshGetVertices }, 29669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices", "(JJ[J[II)V", (void*)nMeshGetIndices }, 296780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 296856f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 29690facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang{"rsnAllocationGetByteBuffer", "(JJ[JIII)Ljava/nio/ByteBuffer;", (void*)nAllocationGetByteBuffer }, 2970d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 2971d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2972d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env) 2973d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2974d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return android::AndroidRuntime::registerNativeMethods( 2975d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams _env, classPathName, methods, NELEM(methods)); 2976d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2977d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2978d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2979d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2980d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved) 2981d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2982488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes JNIEnv* env = nullptr; 2983d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams jint result = -1; 2984d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2985d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 29863762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("ERROR: GetEnv failed\n"); 2987d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 2988d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 2989488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes assert(env != nullptr); 2990d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2991d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (registerFuncs(env) < 0) { 29920e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGE("ERROR: Renderscript native registration failed\n"); 2993d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 2994d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 2995d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2996d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams /* success -- return valid version number */ 2997d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams result = JNI_VERSION_1_4; 2998d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2999d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail: 3000d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return result; 3001d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 3002