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 27bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski#include <android-base/macros.h> 28b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/Asset.h> 29bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski#include <androidfw/AssetManager2.h> 30b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h> 31dc01e938c2550390a540311b22e3e6c7603ed975Steven Moreland#include <android-base/macros.h> 32f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h" 342279b2534272282a5b5152723235da397e49195cSteven Moreland#include <nativehelper/JNIHelp.h> 35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h" 36ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h" 37b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h" 38f4faeac3525fe1ce3707ab785a1651aec367589dJohn Reck#include "android/graphics/GraphicsJNI.h" 3933287e8a893821be86b395ce9d5d639cc8a535f3Miao Wang#include "android/native_window.h" 4033287e8a893821be86b395ce9d5d639cc8a535f3Miao Wang#include "android/native_window_jni.h" 41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 421d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rsEnv.h> 43cbb0206cb478c862cb871a65e85115281ef12e02Miao Wang#include <rsApiStubs.h> 44fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams#include <gui/Surface.h> 45d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden#include <gui/GLConsumer.h> 46faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h> 47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 483762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE 4967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampestatic constexpr bool kLogApi = false; 50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 51d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android; 52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 53414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ 54e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams jint len = 0; \ 55488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes void *ptr = nullptr; \ 5687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang void *srcPtr = nullptr; \ 5721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams size_t typeBytes = 0; \ 58414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines jint relFlag = 0; \ 59414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines if (readonly) { \ 60414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \ 6187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang /* readonly = true, also indicates we are copying to the allocation . */ \ 62414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines relFlag = JNI_ABORT; \ 63414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines } \ 64e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams switch(dataType) { \ 65e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_32: \ 66e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jfloatArray)data); \ 67e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \ 68ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 69ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 70ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 71ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 7221659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 7387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 7487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 7587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 7687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 7787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 7887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 7987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 8087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 8187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 8287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 8487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 8687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 8787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 8887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 8987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 9087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 9187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 92414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \ 93e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 94e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_64: \ 95e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jdoubleArray)data); \ 96e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \ 97ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 98ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 99ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 100ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 10121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 10287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 10387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 10487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 10587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 10687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 10787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 10887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 10987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 11087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 11187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 11287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 11387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 11487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 11587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 11687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 11787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 11887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 11987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 12087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 121414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \ 122e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 123e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_8: \ 124e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_8: \ 125e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jbyteArray)data); \ 126e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \ 127ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 128ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 129ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 130ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 13121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 1; \ 13287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 13387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 13487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 13587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 13687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 13787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 13887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 13987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 14087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 14187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 14287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 14387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 14487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 14587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 14687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 14787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 14887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 14987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 15087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 151414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \ 152e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 153e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_16: \ 154e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_16: \ 1551333215d8e61c1cbcabb551ac9a49a801f90ca76Pirama Arumuga Nainar case RS_TYPE_FLOAT_16: \ 156e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jshortArray)data); \ 157e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetShortArrayElements((jshortArray)data, flag); \ 158ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 159ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 160ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 161ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 16221659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 2; \ 16387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 16487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 16587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 16687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 16787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 16887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 16987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 17087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 17187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 17287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 17387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 17487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 17587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 17687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 17787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 17887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 17987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 18087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 18187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 182414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \ 183e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 184e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_32: \ 185e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_32: \ 186e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jintArray)data); \ 187e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetIntArrayElements((jintArray)data, flag); \ 188ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 189ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 190ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 191ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 19221659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 19387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 19487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 19587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 19687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 19787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 19887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 19987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 20087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 20187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 20287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 20387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 20487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 20587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 20687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 20787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 20887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 20987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 21087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 21187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 212414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \ 213e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 214e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_64: \ 215e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_64: \ 216e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jlongArray)data); \ 217e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetLongArrayElements((jlongArray)data, flag); \ 218ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 219ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 220ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 221ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 22221659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 22387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 22487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 22587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 22687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 22787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 22887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 22987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 23087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 23187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 23287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 23387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 23487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 23587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 23687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 23787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 23887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 23987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 24087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 24187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 242414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \ 243e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 244e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams default: \ 245e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams break; \ 246e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams } \ 24787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang UNUSED(len, ptr, srcPtr, typeBytes, relFlag); \ 248e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams} 249e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 250e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 251b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 { 252b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic: 2532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) { 254488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes fCStr = env->GetStringUTFChars(str, nullptr); 255b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fLength = env->GetStringUTFLength(str); 256b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 2572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringToUTF8() { 258b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fEnv->ReleaseStringUTFChars(fJStr, fCStr); 259b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 260b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* c_str() const { return fCStr; } 261b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize length() const { return fLength; } 262b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 263b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate: 264b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk JNIEnv* fEnv; 265b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fJStr; 266b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* fCStr; 267b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize fLength; 268b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}; 269b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 2702123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 { 2712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic: 2722123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength) 2732123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk : mEnv(env), mStrings(strings), mStringsLength(stringsLength) { 274488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings = nullptr; 275488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mSizeArray = nullptr; 2762123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk if (stringsLength > 0) { 2772123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mCStrings = (const char **)calloc(stringsLength, sizeof(char *)); 2782123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t)); 2792123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct = 0; ct < stringsLength; ct ++) { 2802123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 281488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings[ct] = mEnv->GetStringUTFChars(s, nullptr); 2822123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray[ct] = mEnv->GetStringUTFLength(s); 2832123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2842123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2852123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2862123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringArrayToUTF8() { 2872123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct=0; ct < mStringsLength; ct++) { 2882123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 2892123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mEnv->ReleaseStringUTFChars(s, mCStrings[ct]); 2902123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2912123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mCStrings); 2922123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mSizeArray); 2932123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2942123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **c_str() const { return mCStrings; } 2952123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *c_str_len() const { return mSizeArray; } 2962123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize length() const { return mStringsLength; } 2972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 2982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate: 2992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk JNIEnv *mEnv; 3002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jobjectArray mStrings; 3012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **mCStrings; 3022123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *mSizeArray; 3032123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize mStringsLength; 3042123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk}; 3052123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 306d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 307d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 308ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0; 309d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 310d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this) 311d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 312eff663f391fa4f119685d5c14489b94661ea126fTim Murray gContextId = _env->GetFieldID(_this, "mContext", "J"); 313d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 314d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 315d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 316d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 31787e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) { 31887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytesPad = mSize * 4; 31987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytes = mSize * 3; 32087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 32187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 32287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang for (int i = 0; i < count; i++) { 32387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang memcpy(dst, src, sizeBytes); 32487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang dst += sizeBytesPad; 32587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang src += sizeBytes; 32687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } 32787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang} 32887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 32987e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) { 33087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytesPad = mSize * 4; 33187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytes = mSize * 3; 33287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 33387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 33487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang for (int i = 0; i < count; i++) { 33587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang memcpy(dst, src, sizeBytes); 33687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang dst += sizeBytes; 33787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang src += sizeBytesPad; 33887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } 33987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang} 34087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 34187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 34287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang// --------------------------------------------------------------------------- 3433eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void 344eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con) 34596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{ 34667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 34767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextFinish, con(%p)", (RsContext)con); 34867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 349eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextFinish((RsContext)con); 35096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams} 35196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams 352281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic jlong 353281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID, 354281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong returnValue, jlongArray fieldIDArray, 355281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray valueArray, jintArray sizeArray, 356281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray depClosureArray, jlongArray depFieldIDArray) { 35717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong ret = 0; 35817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 359281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 360281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 361ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jFieldIDs == nullptr) { 362ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: fieldIDs."); 363ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 364ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 365ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 36617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 36717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize values_length = _env->GetArrayLength(valueArray); 368ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jValues == nullptr) { 369ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: values."); 370ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 371ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 372ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 37317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 37417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 375ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jSizes == nullptr) { 376ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: sizes."); 377ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 378ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 379ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 38017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jDepClosures = 38117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->GetLongArrayElements(depClosureArray, nullptr); 38217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize depClosures_length = _env->GetArrayLength(depClosureArray); 383ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jDepClosures == nullptr) { 384ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: depClosures."); 385ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 386ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 387ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 38817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jDepFieldIDs = 38917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->GetLongArrayElements(depFieldIDArray, nullptr); 39017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray); 391ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jDepFieldIDs == nullptr) { 392ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: depFieldIDs."); 393ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 394ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 39517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 39617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni size_t numValues, numDependencies; 39717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsScriptFieldID* fieldIDs; 39817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsClosure* depClosures; 39917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsScriptFieldID* depFieldIDs; 40017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 40117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 40217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unmatched field IDs, values, and sizes in closure creation."); 40317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 40417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 40517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 40617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni numValues = (size_t)fieldIDs_length; 40717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 40817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (depClosures_length != depFieldIDs_length) { 40917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unmatched closures and field IDs for dependencies in closure creation."); 41017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 41117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 41217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 41317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni numDependencies = (size_t)depClosures_length; 41417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 41517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (numDependencies > numValues) { 41617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unexpected number of dependencies in closure creation"); 41717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 41817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 41917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 4207b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 42117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many arguments or globals in closure creation"); 42217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 42317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 42417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 42586c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (numValues > 0) { 42686c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 42786c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (fieldIDs == nullptr) { 42886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni goto exit; 42986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 43086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } else { 43186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni // numValues == 0 43286c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni // alloca(0) implementation is platform-dependent. 43386c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni fieldIDs = nullptr; 43417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 43517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 43617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni for (size_t i = 0; i < numValues; i++) { 437281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 438281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 439281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 44086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (numDependencies > 0) { 44186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies); 44286c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (depClosures == nullptr) { 44386c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni goto exit; 44486c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 44586c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni 44686c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni for (size_t i = 0; i < numDependencies; i++) { 44786c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depClosures[i] = (RsClosure)jDepClosures[i]; 44886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 44986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni 45086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depFieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numDependencies); 45186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (depFieldIDs == nullptr) { 45286c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni goto exit; 45386c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 45486c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni 45586c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni for (size_t i = 0; i < numDependencies; i++) { 45686c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depFieldIDs[i] = (RsClosure)jDepFieldIDs[i]; 45786c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 45886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } else { 45986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni // alloca(0) implementation is platform-dependent. 46086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depClosures = nullptr; 46186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depFieldIDs = nullptr; 462281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 463281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 46417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ret = (jlong)(uintptr_t)rsClosureCreate( 465281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, 466263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni fieldIDs, numValues, jValues, numValues, 46717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni (int*)jSizes, numValues, 46817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni depClosures, numDependencies, 46917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni depFieldIDs, numDependencies); 47017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 47117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Niexit: 47217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 47317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(depFieldIDArray, jDepFieldIDs, JNI_ABORT); 47417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(depClosureArray, jDepClosures, JNI_ABORT); 47517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 47617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 47717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 47817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 47917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return ret; 480281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 481281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 482be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 483be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID, 484be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray, 485be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jintArray sizeArray) { 48617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong ret = 0; 48717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 488be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr); 489be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize jParamLength = _env->GetArrayLength(paramArray); 490ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jParams == nullptr) { 491ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: params."); 492ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 493ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 494ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 495be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 496be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 497ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jFieldIDs == nullptr) { 498ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: fieldIDs."); 499ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 500ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 501ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 50217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 50317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize values_length = _env->GetArrayLength(valueArray); 504ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jValues == nullptr) { 505ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: values."); 506ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 507ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 508ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 50917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 51017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 511ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jSizes == nullptr) { 512ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: sizes."); 513ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 514ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 51517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 51617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni size_t numValues; 51717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsScriptFieldID* fieldIDs; 51817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 51917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 52017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unmatched field IDs, values, and sizes in closure creation."); 52117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 52217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 52317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 52417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni numValues = (size_t) fieldIDs_length; 52517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 5267b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 52717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many arguments or globals in closure creation"); 52817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 52917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 53017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 53117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 53217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (fieldIDs == nullptr) { 53317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 53417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 53517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 53617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni for (size_t i = 0; i< numValues; i++) { 537be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 538be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 539be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 54017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ret = (jlong)(uintptr_t)rsInvokeClosureCreate( 541be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, 542263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni fieldIDs, numValues, jValues, numValues, 54317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni (int*)jSizes, numValues); 54417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 54517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Niexit: 54617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 54717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 54817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 54917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 55017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseByteArrayElements(paramArray, jParams, JNI_ABORT); 55117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 55217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return ret; 553be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 554be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 555281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 556281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 557281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jint index, jlong value, jint size) { 558263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni // Size is signed with -1 indicating the value is an Allocation 559281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, 560263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni (uintptr_t)value, size); 561281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 562281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 563281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 564281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 565281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong fieldID, jlong value, jint size) { 566263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni // Size is signed with -1 indicating the value is an Allocation 567281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetGlobal((RsContext)con, (RsClosure)closureID, 568263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni (RsScriptFieldID)fieldID, (int64_t)value, size); 569281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 570281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 571281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic long 57235be56cce821d86f69026398ff9433e2d173b02fYang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, jstring name, 573ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni jstring cacheDir, jlongArray closureArray) { 57417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong ret = 0; 57517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 57635be56cce821d86f69026398ff9433e2d173b02fYang Ni AutoJavaStringToUTF8 nameUTF(_env, name); 577ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 578ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni 579281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 580281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 581ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jClosures == nullptr) { 582ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: closures."); 583ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 584ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 58517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 58617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsClosure* closures; 58717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 5887b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (numClosures > (jsize) RS_SCRIPT_GROUP_MAX_NUMBER_CLOSURES) { 58917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many closures in script group"); 59017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 59117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 59217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 59317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 59417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (closures == nullptr) { 59517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 59617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 59717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 598281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < numClosures; i++) { 599281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni closures[i] = (RsClosure)jClosures[i]; 600281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 601281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 60217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ret = (jlong)(uintptr_t)rsScriptGroup2Create( 60335be56cce821d86f69026398ff9433e2d173b02fYang Ni (RsContext)con, nameUTF.c_str(), nameUTF.length(), 60435be56cce821d86f69026398ff9433e2d173b02fYang Ni cacheDirUTF.c_str(), cacheDirUTF.length(), 605ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni closures, numClosures); 60617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 60717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Niexit: 60817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 60917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(closureArray, jClosures, JNI_ABORT); 61017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 61117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return ret; 612281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 613281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 614281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 615281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 616281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 617281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 618281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 61996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void 62025207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 62125207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 62225207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY, 62325207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 62425207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 62525207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 62625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 62725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 62825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 62925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 63025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 63125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 63225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 63325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 63425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 63525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.f = alpha; 63625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.f = beta; 63725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 63825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 63925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 64025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 64125207df658d6a8a3e885c7017fcc25702363583cTim Murray 64225207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 64325207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 64425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 64525207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 64625207df658d6a8a3e885c7017fcc25702363583cTim Murray 64725207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 648b742fcc808165fbeeb1a48761e7d629f60207de2Miao Wang in_allocs, NELEM(in_allocs), nullptr, 64925207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 65025207df658d6a8a3e885c7017fcc25702363583cTim Murray} 65125207df658d6a8a3e885c7017fcc25702363583cTim Murray 65225207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 65325207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 65425207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 65525207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY, 65625207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 65725207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 65825207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 65925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 66025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 66125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 66225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 66325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 66425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 66525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 66625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 66725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 66825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.d = alpha; 66925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.d = beta; 67025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 67125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 67225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 67325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 67425207df658d6a8a3e885c7017fcc25702363583cTim Murray 67525207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 67625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 67725207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 67825207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 67925207df658d6a8a3e885c7017fcc25702363583cTim Murray 68025207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 6810b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 68225207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 68325207df658d6a8a3e885c7017fcc25702363583cTim Murray} 68425207df658d6a8a3e885c7017fcc25702363583cTim Murray 68525207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 68625207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 68725207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 68825207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX, 68925207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 69025207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 69125207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 69225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 69325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 69425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 69525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 69625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 69725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 69825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 69925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 70025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 70125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.r = alphaX; 70225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.i = alphaY; 70325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.c.r = betaX; 70482585b3906955e57e199d962b8fe11b2bab87fbaMiao Wang call.beta.c.i = betaY; 70525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 70625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 70725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 70825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 70925207df658d6a8a3e885c7017fcc25702363583cTim Murray 71025207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 71125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 71225207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 71325207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 71425207df658d6a8a3e885c7017fcc25702363583cTim Murray 71525207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7160b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 71725207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 71825207df658d6a8a3e885c7017fcc25702363583cTim Murray} 71925207df658d6a8a3e885c7017fcc25702363583cTim Murray 72025207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 72125207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 72225207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 72325207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX, 72425207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 72525207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 72625207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 72725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 72825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 72925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 73025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 73125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 73225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 73325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 73425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 73525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 73625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.r = alphaX; 73725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.i = alphaY; 73825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.z.r = betaX; 73982585b3906955e57e199d962b8fe11b2bab87fbaMiao Wang call.beta.z.i = betaY; 74025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 74125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 74225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 74325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 74425207df658d6a8a3e885c7017fcc25702363583cTim Murray 74525207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 74625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 74725207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 74825207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 74925207df658d6a8a3e885c7017fcc25702363583cTim Murray 75025207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7510b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 75225207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 75325207df658d6a8a3e885c7017fcc25702363583cTim Murray} 75425207df658d6a8a3e885c7017fcc25702363583cTim Murray 75525207df658d6a8a3e885c7017fcc25702363583cTim Murray 75625207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 7579cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim MurraynScriptIntrinsicBLAS_BNNM(JNIEnv *_env, jobject _this, jlong con, jlong id, jint M, jint N, jint K, 7589cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray jlong A, jint a_offset, jlong B, jint b_offset, jlong C, jint c_offset, 7599cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray jint c_mult_int) { 7609cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray RsBlasCall call; 7619cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray memset(&call, 0, sizeof(call)); 7629cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.func = RsBlas_bnnm; 7639cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.M = M; 7649cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.N = N; 7659cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.K = K; 7662514806817ec394d334595d76e20f3129117da6eMiao Wang call.a_offset = a_offset & 0xFF; 7672514806817ec394d334595d76e20f3129117da6eMiao Wang call.b_offset = b_offset & 0xFF; 7689cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.c_offset = c_offset; 7699cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.c_mult_int = c_mult_int; 7709cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7719cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray RsAllocation in_allocs[3]; 7729cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[0] = (RsAllocation)A; 7739cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[1] = (RsAllocation)B; 7749cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[2] = (RsAllocation)C; 7759cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7769cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7770b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7789cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray &call, sizeof(call), nullptr, 0); 7799cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray} 7809cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7819cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7829cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murraystatic void 783460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str) 7843eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{ 78567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 78667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 78767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 7883eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jint len = _env->GetArrayLength(str); 7893eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0); 790ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (cptr == nullptr) { 791ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 792ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 793ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 794ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 795eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len); 7963eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT); 7973eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams} 7983eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 799fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring 800460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj) 801fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{ 80267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 80367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 80467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 805488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes const char *name = nullptr; 806eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaGetName((RsContext)con, (void *)obj, &name); 807488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if(name == nullptr || strlen(name) == 0) { 808488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes return nullptr; 809581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk } 810fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk return _env->NewStringUTF(name); 811fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk} 812fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk 8137ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void 814460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 8157ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{ 81667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 81767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 81867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 819eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsObjDestroy((RsContext)con, (void *)obj); 8207ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams} 8217ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams 8223eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// --------------------------------------------------------------------------- 8233eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 824eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 825d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this) 826d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 82767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 82867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceCreate"); 82967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 8303aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsDeviceCreate(); 831d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 832d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 833d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 8345eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 835d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 83667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 83767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceDestroy"); 83867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 839d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return rsDeviceDestroy((RsDevice)dev); 840d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 841d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 842ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void 8435eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 844ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 84567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 84667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 84767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 848ebfb436a49673693b98469683451bd9ede797557Jason Sams return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 849ebfb436a49673693b98469683451bd9ede797557Jason Sams} 850ebfb436a49673693b98469683451bd9ede797557Jason Sams 851eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 85281cd2b18bd36285d1843f78418282e1dad156fbdJason SamsnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint flags, jint sdkVer, jint contextType) 853d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 85467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 85567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreate"); 85667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 85781cd2b18bd36285d1843f78418282e1dad156fbdJason Sams return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, 0, sdkVer, (RsContextType)contextType, flags); 858704ff64b099406bb328898a7443921f22dbffd6dJason Sams} 859704ff64b099406bb328898a7443921f22dbffd6dJason Sams 860eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 8615eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 8620e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint colorMin, jint colorPref, 8630e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint alphaMin, jint alphaPref, 8640e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint depthMin, jint depthPref, 8650e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint stencilMin, jint stencilPref, 8660e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint samplesMin, jint samplesPref, jfloat samplesQ, 8670e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint dpi) 86811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{ 86986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni RsSurfaceConfig sc = {}; 87011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaMin = alphaMin; 87111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaPref = alphaPref; 87211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorMin = colorMin; 87311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorPref = colorPref; 87411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthMin = depthMin; 87511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthPref = depthPref; 87611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesMin = samplesMin; 87711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesPref = samplesPref; 87811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesQ = samplesQ; 87911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams 88067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 88167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreateGL"); 88267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 8833aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi); 884d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 885d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 886d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 887eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 8887d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{ 88967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 89067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 89167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 892eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetPriority((RsContext)con, p); 8937d787b4722eaeb79cab42c36060336e092b77b5fJason Sams} 8947d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 89547f31582b67f492d9e1523abd0d8b86c38ec007dTim Murraystatic void 89647f31582b67f492d9e1523abd0d8b86c38ec007dTim MurraynContextSetCacheDir(JNIEnv *_env, jobject _this, jlong con, jstring cacheDir) 89747f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{ 89847f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 89947f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray 90047f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray if (kLogApi) { 90147f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray ALOGD("ContextSetCacheDir, con(%p), cacheDir(%s)", (RsContext)con, cacheDirUTF.c_str()); 90247f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray } 90347f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray rsContextSetCacheDir((RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length()); 90447f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray} 90547f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray 9067d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 9077d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 9087d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void 909eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd) 910efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{ 91167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 91267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, 91367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (Surface *)wnd); 91467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 915efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 916488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes ANativeWindow * window = nullptr; 917488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (wnd == nullptr) { 918efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 919efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } else { 92064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown window = android_view_Surface_getNativeWindow(_env, wnd).get(); 921efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } 922efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 923eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetSurface((RsContext)con, width, height, window); 924efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams} 925efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 926efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void 927eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con) 928d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 92967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 93067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDestroy, con(%p)", (RsContext)con); 93167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 932eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDestroy((RsContext)con); 933d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 934d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 935715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void 936eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 937715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{ 93867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 93967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 94067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 941715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams rsContextDump((RsContext)con, bits); 942715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams} 943d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 944d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 945eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con) 94665e7aa56f56097418d617663683544c25b3988eaJason Sams{ 94767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 94867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPause, con(%p)", (RsContext)con); 94967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 950eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextPause((RsContext)con); 95165e7aa56f56097418d617663683544c25b3988eaJason Sams} 95265e7aa56f56097418d617663683544c25b3988eaJason Sams 95365e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void 954eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con) 95565e7aa56f56097418d617663683544c25b3988eaJason Sams{ 95667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 95767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextResume, con(%p)", (RsContext)con); 95867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 959eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextResume((RsContext)con); 96065e7aa56f56097418d617663683544c25b3988eaJason Sams} 96165e7aa56f56097418d617663683544c25b3988eaJason Sams 9621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 9631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring 964eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 9651c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 96667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 96767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con); 96867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 9691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams char buf[1024]; 9701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 9711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 9721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 973eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 97465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams buf, sizeof(buf), 97565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 976edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 9771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if (!id && receiveLen) { 97809993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 9791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 9801c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams return _env->NewStringUTF(buf); 9811c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 9821c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 983edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint 984eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 985516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 986516c31911578db8ce53529483c3ded918ac7dc6bJason Sams jint len = _env->GetArrayLength(data); 98767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 98867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 98967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 990488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = _env->GetIntArrayElements(data, nullptr); 991ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 992ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 993ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 994ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 995516c31911578db8ce53529483c3ded918ac7dc6bJason Sams size_t receiveLen; 9961c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 997eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 99865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, len * 4, 99965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 1000edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 1001516c31911578db8ce53529483c3ded918ac7dc6bJason Sams if (!id && receiveLen) { 100209993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 1003516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 1004516c31911578db8ce53529483c3ded918ac7dc6bJason Sams _env->ReleaseIntArrayElements(data, ptr, 0); 10050e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 10061c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 10071c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 10081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint 1009eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 10101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 101167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 101267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPeekMessage, con(%p)", (RsContext)con); 101367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1014488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr); 1015ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (auxDataPtr == nullptr) { 1016ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1017ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 1018ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 10191c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 10201c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 1021eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 1022edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 10231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[0] = (jint)subID; 10241c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[1] = (jint)receiveLen; 10251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 10260e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 1027516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 1028516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1029eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 1030516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 103167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 103267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextInitToClient, con(%p)", (RsContext)con); 103367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1034eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextInitToClient((RsContext)con); 1035516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 1036516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1037eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 1038516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 103967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 104067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con); 104167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1042eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDeinitToClient((RsContext)con); 1043516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 1044516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1045455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void 1046eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 1047455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{ 1048488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = nullptr; 1049455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams jint len = 0; 1050455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 1051455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams len = _env->GetArrayLength(data); 10524a043c1853c117c1b4c4342e76cd16a5abdc1045Stephen Hines ptr = _env->GetIntArrayElements(data, nullptr); 1053ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1054ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1055ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1056ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1057455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 105867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 105967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 106067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1061eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 1062455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 1063455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 1064455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 1065455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams} 1066455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 1067455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 1068516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1069460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 107067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, 107167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint size) 1072d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 107367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 107409993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con, 107567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe type, kind, norm, size); 107667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 107767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, 10788c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni norm, size); 1079d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1080d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1081460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1082eff663f391fa4f119685d5c14489b94661ea126fTim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con, 10839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 1084d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1085718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int fieldCount = _env->GetArrayLength(_ids); 108667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 108767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementCreate2, con(%p)", (RsContext)con); 108867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1089718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 1090488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jIds = _env->GetLongArrayElements(_ids, nullptr); 1091ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jIds == nullptr) { 1092ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: ids"); 1093ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 1094ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1095488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr); 1096ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jArraySizes == nullptr) { 1097ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: arraySizes"); 1098ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 1099ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 11009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 11019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 11029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 11039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 11049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < fieldCount; i ++) { 11059807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat ids[i] = (RsElement)jIds[i]; 11069807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat arraySizes[i] = (uint32_t)jArraySizes[i]; 11079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 1108718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 11092123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 11102123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 11112123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **nameArray = names.c_str(); 11122123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *sizeArray = names.c_str_len(); 11132123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 11143aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con, 11159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (const RsElement *)ids, fieldCount, 11167a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams nameArray, fieldCount * sizeof(size_t), sizeArray, 11178c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni (const uint32_t *)arraySizes, fieldCount); 11182123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 11199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(ids); 11209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(arraySizes); 11219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 11229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 11239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 11243aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)id; 1125d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1127dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 1128460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData) 1129dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 1130dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int dataSize = _env->GetArrayLength(_elementData); 113167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 113267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetNativeData, con(%p)", (RsContext)con); 113367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1134dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1135dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements 1136dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(dataSize == 5); 1137dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1138cbb0206cb478c862cb871a65e85115281ef12e02Miao Wang uint32_t elementData[5]; 1139eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize); 1140dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1141dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < dataSize; i ++) { 11429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint data = (jint)elementData[i]; 11439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_elementData, i, 1, &data); 1144dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1145dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1146dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1147dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1148dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 1149460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 11509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _IDs, 11517d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jobjectArray _names, 11527d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jintArray _arraySizes) 1153dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 11549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t dataSize = _env->GetArrayLength(_IDs); 115567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 115667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetSubElements, con(%p)", (RsContext)con); 115767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1158dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 11599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t)); 11609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const char **names = (const char **)malloc(dataSize * sizeof(const char *)); 1161cbb0206cb478c862cb871a65e85115281ef12e02Miao Wang size_t *arraySizes = (size_t *)malloc(dataSize * sizeof(size_t)); 1162dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 116367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 116467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (uint32_t)dataSize); 1165dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 11669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(uint32_t i = 0; i < dataSize; i++) { 11673aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong id = (jlong)(uintptr_t)ids[i]; 11689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint arraySize = (jint)arraySizes[i]; 1169dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 11709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_IDs, i, 1, &id); 11719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 1172dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1173dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1174dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(ids); 1175dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(names); 11767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk free(arraySizes); 1177dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1178dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1179d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1180d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1181460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1182460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 1183b109cc78616abee7291eb42094cd156b5db3355dJason Sams jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 1184d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 118567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 118667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 118709993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv); 118867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 11893b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams 119067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, 11918c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni faces, yuv); 1192d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1193d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1194dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 11959807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData) 1196dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 1197dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // We are packing 6 items: mDimX; mDimY; mDimZ; 1198dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // mDimLOD; mDimFaces; mElement; into typeData 1199dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int elementCount = _env->GetArrayLength(_typeData); 1200dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1201dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(elementCount == 6); 120267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 120367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con); 120467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1205dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 12069807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t typeData[6]; 1207eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6); 1208dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1209dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < elementCount; i ++) { 12103aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong data = (jlong)(uintptr_t)typeData[i]; 12119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_typeData, i, 1, &data); 1212dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1213dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1214dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1215d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1216d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1217460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 121867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 121967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong pointer) 1220d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 122167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 122267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 122367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 122467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 122567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type, 122667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocationMipmapControl)mips, 12278c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni (uint32_t)usage, (uintptr_t)pointer); 1228d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1229d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1230d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1231460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 12325476b450e50939940dcf3f15c92335cee2fc572dJason Sams{ 123367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 123467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, 123567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe bits); 123667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1237eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 12385476b450e50939940dcf3f15c92335cee2fc572dJason Sams} 12395476b450e50939940dcf3f15c92335cee2fc572dJason Sams 12408c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wangstatic void 12418c1509249c5552270d8accc2c9512f499a8f5e2dMiao WangnAllocationSetupBufferQueue(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint numAlloc) 12428c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{ 12438c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang if (kLogApi) { 12448c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang ALOGD("nAllocationSetupBufferQueue, con(%p), alloc(%p), numAlloc(%d)", (RsContext)con, 12458c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang (RsAllocation)alloc, numAlloc); 12468c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang } 12478c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang rsAllocationSetupBufferQueue((RsContext)con, (RsAllocation)alloc, (uint32_t)numAlloc); 12488c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang} 12498c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang 12508c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wangstatic void 12518c1509249c5552270d8accc2c9512f499a8f5e2dMiao WangnAllocationShareBufferQueue(JNIEnv *_env, jobject _this, jlong con, jlong alloc1, jlong alloc2) 12528c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{ 12538c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang if (kLogApi) { 12548c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang ALOGD("nAllocationShareBufferQueue, con(%p), alloc1(%p), alloc2(%p)", (RsContext)con, 12558c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang (RsAllocation)alloc1, (RsAllocation)alloc2); 12568c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang } 12578c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang 12588c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang rsAllocationShareBufferQueue((RsContext)con, (RsAllocation)alloc1, (RsAllocation)alloc2); 12598c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang} 12608c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang 126172226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject 1262460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a) 1263615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{ 126467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 126567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 126667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1267615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams 12681e95fc86581514c718fc96367f6d575e87fecffbMiao Wang ANativeWindow *anw = (ANativeWindow *)rsAllocationGetSurface((RsContext)con, (RsAllocation)a); 12691e95fc86581514c718fc96367f6d575e87fecffbMiao Wang 12701e95fc86581514c718fc96367f6d575e87fecffbMiao Wang sp<Surface> surface(static_cast<Surface*>(anw)); 12711e95fc86581514c718fc96367f6d575e87fecffbMiao Wang sp<IGraphicBufferProducer> bp = surface->getIGraphicBufferProducer(); 1272fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 127372226e0543461133b9e177a3e78ae50b0c65e797Jason Sams jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp); 127472226e0543461133b9e177a3e78ae50b0c65e797Jason Sams return o; 1275fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams} 1276fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 1277fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void 1278460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 1279163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 128067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 128167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con, 128267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, (Surface *)sur); 128367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1284163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 128533287e8a893821be86b395ce9d5d639cc8a535f3Miao Wang ANativeWindow *anw = nullptr; 1286163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams if (sur != 0) { 1287f35ddc9843af8979944a41237e3ad72248894c26Miao Wang // Connect the native window handle to buffer queue. 128833287e8a893821be86b395ce9d5d639cc8a535f3Miao Wang anw = ANativeWindow_fromSurface(_env, sur); 1289f35ddc9843af8979944a41237e3ad72248894c26Miao Wang native_window_api_connect(anw, NATIVE_WINDOW_API_CPU); 1290163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams } 1291163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 129233287e8a893821be86b395ce9d5d639cc8a535f3Miao Wang rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, anw); 1293163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1294163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1295163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1296460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1297163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 129867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 129909993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 130067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1301460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray rsAllocationIoSend((RsContext)con, (RsAllocation)alloc); 1302163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1303163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 13048c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wangstatic jlong 1305460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1306163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 130767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 130809993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 130967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 13108c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang return (jlong) rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc); 1311163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1312163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1313163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1314460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1315f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{ 131667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 131767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 131867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1319eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 1320f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams} 1321f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams 1322460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 132367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 132467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 1325fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{ 1326ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1327ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 1328fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 13295476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 13303aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con, 133165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 13327569de0f90959b7eb9b432cc349425ab6d27f6ccMike Reed ptr, bitmap.computeByteSize(), usage); 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 const void* ptr = bitmap.getPixels(); 13443aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con, 1345a314551d69098537337c970da615a8f8af58e1f1Tim Murray (RsType)type, (RsAllocationMipmapControl)mip, 13468c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni (uint32_t)usage, (uintptr_t)ptr); 1347a314551d69098537337c970da615a8f8af58e1f1Tim Murray return id; 1348a314551d69098537337c970da615a8f8af58e1f1Tim Murray} 1349a314551d69098537337c970da615a8f8af58e1f1Tim Murray 1350460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 135167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 135267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 135367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{ 1354ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1355ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 135667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 13575476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 13583aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con, 135965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 13607569de0f90959b7eb9b432cc349425ab6d27f6ccMike Reed ptr, bitmap.computeByteSize(), usage); 13615476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 136267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk} 136367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 136426ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void 1365460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 136626ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{ 1367ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1368ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 1369f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int w = bitmap.width(); 1370f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int h = bitmap.height(); 137126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk 13724ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams const void* ptr = bitmap.getPixels(); 1373eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 1374304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 13757569de0f90959b7eb9b432cc349425ab6d27f6ccMike Reed w, h, ptr, bitmap.computeByteSize(), 0); 13768a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 13778a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 13784ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void 1379460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 13808a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{ 1381ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1382ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 13838a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 13844ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams void* ptr = bitmap.getPixels(); 13857569de0f90959b7eb9b432cc349425ab6d27f6ccMike Reed rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.computeByteSize()); 1386835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk bitmap.notifyPixelsChanged(); 13878a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 13888a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 1389414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1390d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1391460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 139287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint count, jobject data, jint sizeBytes, jint dataType, jint mSize, 139387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jboolean usePadding) 1394d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1395e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 139667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 139767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 139867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 139967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe dataType); 140067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 140187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, 140287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1403d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1404d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1405d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1406c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1407c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint xoff, jint yoff, jint zoff, 1408c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 140949bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{ 141067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 141186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni jint len = _env->GetArrayLength(data); 1412c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang ALOGD("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 1413c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 141467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe sizeBytes); 141567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1416488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1417ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1418ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1419ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1420ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1421c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang rsAllocationElementData((RsContext)con, (RsAllocation)alloc, 1422c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang xoff, yoff, zoff, 1423c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang lod, ptr, sizeBytes, compIdx); 142449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 142549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams} 142649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams 1427c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang 1428414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 142949bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void 1430460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 143187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize, 143287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jboolean usePadding) 1433d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1434e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 1435e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 143667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 143767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 143867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 143967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 144087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h; 144187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, 144287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1443d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1444d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1445414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1446414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 144740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 1448eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 1449460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, 1450304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint dstMip, jint dstFace, 1451304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint width, jint height, 1452460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, 1453304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint srcMip, jint srcFace) 1454304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{ 145567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 145667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 145767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), dstFace(%i), width(%i), height(%i)," 145867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 145967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 146067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 146167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1462304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1463eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy2DRange((RsContext)con, 1464304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)dstAlloc, 1465304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstXoff, dstYoff, 1466304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstMip, dstFace, 1467304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk width, height, 1468304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)srcAlloc, 1469304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcXoff, srcYoff, 1470304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcMip, srcFace); 1471304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk} 1472304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1473414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1474304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void 1475460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 147687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType, 147787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1478b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 1479e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 148067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 148167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 148267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 148367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe lod, w, h, d, sizeBytes); 148467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 148587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h * d; 148687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, 148787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1488b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1489b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1490414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1491414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 1492b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void 1493eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 1494460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 1495b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint dstMip, 1496b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint width, jint height, jint depth, 1497460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 1498b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint srcMip) 1499b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 150067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 150167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 150267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), width(%i), height(%i)," 150367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 150467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, 150567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip); 150667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1507b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1508eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy3DRange((RsContext)con, 1509b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)dstAlloc, 1510b05d689653b1bc94836f716f29e9578677c29075Jason Sams dstXoff, dstYoff, dstZoff, dstMip, 1511b05d689653b1bc94836f716f29e9578677c29075Jason Sams width, height, depth, 1512b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)srcAlloc, 1513b05d689653b1bc94836f716f29e9578677c29075Jason Sams srcXoff, srcYoff, srcZoff, srcMip); 1514b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1515b05d689653b1bc94836f716f29e9578677c29075Jason Sams 151640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 1517414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 151840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 151987e908dfdece91b5f504386d4901fa3342dc8083Miao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType, 152087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1521fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 152221659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 152367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 152467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 152567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 152687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = 0; 152787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocationRead, false, 152887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, ptr, len * typeBytes); 1529fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1530fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1531414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1532fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1533460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 153487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint count, jobject data, jint sizeBytes, jint dataType, 153587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1536fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 153721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 153867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 153967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 154067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 154167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 154287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocation1DRead, false, 154387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1544fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1545fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1546c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data. 1547c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void 154845cec0a9711f736df26fd097c6d74834e350f9bcMiao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1549c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint xoff, jint yoff, jint zoff, 155045cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 1551c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{ 1552c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang if (kLogApi) { 155386c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni jint len = _env->GetArrayLength(data); 155445cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang ALOGD("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 155545cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 155645cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang sizeBytes); 1557c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang } 155845cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1559ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1560ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1561ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1562ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 156345cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang rsAllocationElementRead((RsContext)con, (RsAllocation)alloc, 156445cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang xoff, yoff, zoff, 1565a7e2509d8da69ab1c9e14b4ce6608786c572209aJason Sams lod, ptr, sizeBytes, compIdx); 1566bfa5e659e7b4cb49178d0e99712478b29f8301a7Miao Wang _env->ReleaseByteArrayElements(data, ptr, 0); 1567c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang} 1568c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang 1569414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1570fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1571460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 157287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, 157387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 157440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{ 157521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 157621659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 157767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 157867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 157967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 158067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 158187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h; 158287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocation2DRead, false, 158387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 158440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams} 158587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 1586c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1587c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void 1588c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 158987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jint d, jobject data, int sizeBytes, int dataType, 159087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1591c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{ 1592c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 1593c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang if (kLogApi) { 1594c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang ALOGD("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 1595c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 1596c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang lod, w, h, d, sizeBytes); 1597c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang } 159887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h * d; 159987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation3DRead, false, 160087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1601c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang} 1602d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1603460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1604460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1605dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 160667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 160767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 160867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16093aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a); 1610dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1611dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 16125edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void 1613460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 16145edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{ 161567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 161667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 161767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, dimX); 161867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1619eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 16205edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams} 16215edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams 162246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 162346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic jlong 162446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterCreate(JNIEnv *_env, jobject _this, jlong con, jlong basealloc, jlong type) 162546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 162646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 162746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterCreate, con(%p), base(%p), type(%p)", 162846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)basealloc, (RsElement)type); 162946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 163046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams return (jlong)(uintptr_t) rsAllocationAdapterCreate((RsContext)con, (RsType)type, 163146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsAllocation)basealloc); 163246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 163346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 163446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 163546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic void 163646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterOffset(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 163746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint x, jint y, jint z, jint face, jint lod, 163846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint a1, jint a2, jint a3, jint a4) 163946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 164046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams uint32_t params[] = { 164146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)x, (uint32_t)y, (uint32_t)z, (uint32_t)face, 164246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)lod, (uint32_t)a1, (uint32_t)a2, (uint32_t)a3, (uint32_t)a4 164346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams }; 164446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 164546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterOffset, con(%p), alloc(%p), x(%i), y(%i), z(%i), face(%i), lod(%i), arrays(%i %i %i %i)", 164646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)alloc, x, y, z, face, lod, a1, a2, a3, a4); 164746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 164846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams rsAllocationAdapterOffset((RsContext)con, (RsAllocation)alloc, 164946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams params, sizeof(params)); 165046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 165146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 165246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 1653aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// ----------------------------------- 1654aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1655460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1656460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset) 1657aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1658aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 16590e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", asset); 1660aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 16613aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength()); 1662b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1663b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1664b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1665460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1666eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path) 1667b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1668bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski Guarded<AssetManager2>* mgr = AssetManagerForJavaObject(_env, _assetMgr); 1669488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1670b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1671b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1672b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1673b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1674bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski std::unique_ptr<Asset> asset; 1675bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski { 1676bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski ScopedLock<AssetManager2> locked_mgr(*mgr); 1677bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski asset = locked_mgr->Open(str.c_str(), Asset::ACCESS_BUFFER); 1678bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski if (asset == nullptr) { 1679bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski return 0; 1680bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski } 1681b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1682b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1683bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset.release()); 1684b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1685b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1686b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1687460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1688eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName) 1689b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1690b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 16913aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str()); 1692b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1693aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1694aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1695aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1696460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jint 1697460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D) 1698aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1699aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int32_t numEntries = 0; 1700eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D); 17010e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)numEntries; 1702aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1703aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1704aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void 1705460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries) 1706aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 17070e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 1708aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry)); 1709aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1710eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D); 1711aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1712aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk for(jint i = 0; i < numEntries; i ++) { 1713aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName)); 1714aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID); 1715aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 1716aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1717aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk free(fileEntries); 1718aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1719aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 17200e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1721460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index) 1722aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 17230e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 17243aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D); 1725aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1726aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1727d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1728d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1729d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17300e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1731eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con, 1732b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fileName, jfloat fontSize, jint dpi) 17339b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{ 1734b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 17353aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con, 1736e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fileNameUTF.c_str(), fileNameUTF.length(), 1737e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi); 1738b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1739b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1740b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1741b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 17420e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1743eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, 17440e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jstring name, jfloat fontSize, jint dpi, jlong native_asset) 1745b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1746b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 1747b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 nameUTF(_env, name); 1748b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 17493aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1750e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk nameUTF.c_str(), nameUTF.length(), 1751e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1752b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1753b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1754b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1755b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 17560e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1757eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path, 1758b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jfloat fontSize, jint dpi) 1759b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1760bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski Guarded<AssetManager2>* mgr = AssetManagerForJavaObject(_env, _assetMgr); 1761488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1762b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1763b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1764b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1765b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1766bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski std::unique_ptr<Asset> asset; 1767bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski { 1768bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski ScopedLock<AssetManager2> locked_mgr(*mgr); 1769bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski asset = locked_mgr->Open(str.c_str(), Asset::ACCESS_BUFFER); 1770bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski if (asset == nullptr) { 1771bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski return 0; 1772bebfcc46a249a70af04bc18490a897888a142fb8Adam Lesinski } 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()); 17799b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk return id; 17809b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk} 17819b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 1782bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// ----------------------------------- 1783bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 1784bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void 1785460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot) 1786d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 178767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 178867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, 178967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsScript)script, (RsAllocation)alloc, slot); 179067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1791eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 1792d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1793d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1794d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1795460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val) 17964d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 179767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 179867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, 179967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 180067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1801eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 18024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 18034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 18047c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint 1805460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18067c4caadb939b1563328251c156262c179a685c70Tim Murray{ 180767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 180867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 180967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18107c4caadb939b1563328251c156262c179a685c70Tim Murray int value = 0; 1811eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18127c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18137c4caadb939b1563328251c156262c179a685c70Tim Murray} 18147c4caadb939b1563328251c156262c179a685c70Tim Murray 18154d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1816460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 18176f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{ 181867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 181909993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 182067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 182167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1822eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 18236f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams} 18246f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams 18256f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void 1826460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 1827031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{ 182867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 182909993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 183067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 183167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1832eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 1833031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines} 1834031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines 18357c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong 1836460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18377c4caadb939b1563328251c156262c179a685c70Tim Murray{ 183867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 183967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 184067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18417c4caadb939b1563328251c156262c179a685c70Tim Murray jlong value = 0; 1842eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18437c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18447c4caadb939b1563328251c156262c179a685c70Tim Murray} 18457c4caadb939b1563328251c156262c179a685c70Tim Murray 1846031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void 1847460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val) 18484d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 184967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 185067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, 185167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 185267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1853eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 18544d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 18554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 18567c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat 1857460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18587c4caadb939b1563328251c156262c179a685c70Tim Murray{ 185967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 186067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 186167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18627c4caadb939b1563328251c156262c179a685c70Tim Murray jfloat value = 0; 1863eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18647c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18657c4caadb939b1563328251c156262c179a685c70Tim Murray} 18667c4caadb939b1563328251c156262c179a685c70Tim Murray 18674d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1868460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val) 1869ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{ 187067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 187167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, 187267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 187367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1874eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 1875ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines} 1876ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines 18777c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble 1878460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18797c4caadb939b1563328251c156262c179a685c70Tim Murray{ 188067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 188167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 188267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18837c4caadb939b1563328251c156262c179a685c70Tim Murray jdouble value = 0; 1884eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18857c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18867c4caadb939b1563328251c156262c179a685c70Tim Murray} 18877c4caadb939b1563328251c156262c179a685c70Tim Murray 1888ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void 1889460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 18904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 189167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 189267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 189367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18944d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1895488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1896ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1897ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1898ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1899ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1900eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 19014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 19024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 19034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1904adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void 1905460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 19067c4caadb939b1563328251c156262c179a685c70Tim Murray{ 190767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 190867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 190967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19107c4caadb939b1563328251c156262c179a685c70Tim Murray jint len = _env->GetArrayLength(data); 1911488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1912ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1913ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1914ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1915ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1916eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 1917414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements(data, ptr, 0); 19187c4caadb939b1563328251c156262c179a685c70Tim Murray} 19197c4caadb939b1563328251c156262c179a685c70Tim Murray 19207c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void 192167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 192267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong elem, jintArray dims) 1923adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{ 192467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 192567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 192667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1927adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint len = _env->GetArrayLength(data); 1928488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1929ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1930ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1931ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1932ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1933adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1934488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr); 1935ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (dimsPtr == nullptr) { 1936ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1937ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1938ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1939eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 1940bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines (const uint32_t*) dimsPtr, dimsLen); 1941adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1942adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1943adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines} 1944adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines 1945d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1946d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1947460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone) 1948584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{ 194967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 195067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script); 195167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1952584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1953584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jint length = _env->GetArrayLength(timeZone); 1954584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jbyte* timeZone_ptr; 1955584a375df68ed7d62b38389078c6804edf228f9cRomain Guy timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 1956ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (timeZone_ptr == nullptr) { 1957ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1958ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1959ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1960584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1961eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 1962584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1963584a375df68ed7d62b38389078c6804edf228f9cRomain Guy if (timeZone_ptr) { 1964584a375df68ed7d62b38389078c6804edf228f9cRomain Guy _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1965584a375df68ed7d62b38389078c6804edf228f9cRomain Guy } 1966584a375df68ed7d62b38389078c6804edf228f9cRomain Guy} 1967584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 196822534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void 1969460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot) 197022534176fb5c1257130ef4ee589739ca42766a32Jason Sams{ 197167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 197267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 197367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1974eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvoke((RsContext)con, (RsScript)obj, slot); 197522534176fb5c1257130ef4ee589739ca42766a32Jason Sams} 197622534176fb5c1257130ef4ee589739ca42766a32Jason Sams 1977584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void 1978460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 1979be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{ 198067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 198167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 198267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19834d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1984488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1985ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1986ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1987ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1988ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1989eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 19904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1991be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams} 1992be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 19936e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void 1994be7b1defb6b11920703b241ba5815fb09487bb02Chris WailesnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 1995be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jlongArray ains, jlong aout, jbyteArray params, 1996be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jintArray limits) 19976e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{ 199867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 19999eb9dd326ae93cd84eb9bbc740f753fe8d8c7a13Chih-Hung Hsieh ALOGD("nScriptForEach, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 200067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2001949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2002be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint in_len = 0; 2003488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *in_ptr = nullptr; 2004949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2005488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsAllocation *in_allocs = nullptr; 2006949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2007488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 2008be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_len = _env->GetArrayLength(ains); 20097b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 201017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many arguments in kernel launch."); 201117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni // TODO (b/20758983): Report back to Java and throw an exception 201217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return; 201317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 2014eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 201517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni in_ptr = _env->GetLongArrayElements(ains, nullptr); 2016ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (in_ptr == nullptr) { 2017ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2018ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 2019ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2020ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 2021be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (sizeof(RsAllocation) == sizeof(jlong)) { 2022be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)in_ptr; 2023be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } else { 2024be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes // Convert from 64-bit jlong types to the native pointer type. 2025eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 2026be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 202717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (in_allocs == nullptr) { 202817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Failed launching kernel for lack of memory."); 202917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 203017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return; 203117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 2032be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2033be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes for (int index = in_len; --index >= 0;) { 2034be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs[index] = (RsAllocation)in_ptr[index]; 2035be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2036be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2037949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 2038949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2039be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint param_len = 0; 2040488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *param_ptr = nullptr; 2041be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2042488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 2043be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_len = _env->GetArrayLength(params); 2044488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes param_ptr = _env->GetByteArrayElements(params, nullptr); 2045ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (param_ptr == nullptr) { 2046ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2047ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 2048ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2049c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines } 2050949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2051488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsScriptCall sc, *sca = nullptr; 2052be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes uint32_t sc_size = 0; 2053949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2054be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint limit_len = 0; 2055488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *limit_ptr = nullptr; 2056949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2057488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 2058be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limit_len = _env->GetArrayLength(limits); 2059488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes limit_ptr = _env->GetIntArrayElements(limits, nullptr); 2060ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (limit_ptr == nullptr) { 2061ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2062ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 2063ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2064949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2065be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes assert(limit_len == 6); 206667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe UNUSED(limit_len); // As the assert might not be compiled. 2067949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2068be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xStart = limit_ptr[0]; 2069be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xEnd = limit_ptr[1]; 2070be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yStart = limit_ptr[2]; 2071be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yEnd = limit_ptr[3]; 2072be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zStart = limit_ptr[4]; 2073be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zEnd = limit_ptr[5]; 2074be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 207514331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayStart = 0; 207614331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayEnd = 0; 207714331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2Start = 0; 207814331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2End = 0; 207914331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3Start = 0; 208014331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3End = 0; 208114331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4Start = 0; 208214331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4End = 0; 2083949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2084be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sca = ≻ 2085e8f2e445fdb138416043a16659bbf86fbbd3fff8Yang Ni // sc_size is required, but unused, by the runtime and drivers. 2086e8f2e445fdb138416043a16659bbf86fbbd3fff8Yang Ni sc_size = sizeof(sc); 2087be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2088949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2089be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes rsScriptForEachMulti((RsContext)con, (RsScript)script, slot, 2090be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs, in_len, (RsAllocation)aout, 2091be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_ptr, param_len, sca, sc_size); 2092949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2093488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 2094be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 2095949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 2096949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2097488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 2098be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT); 2099eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes } 2100c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines 2101488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 2102be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 2103be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2104949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes} 2105949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 210636eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Walastatic void 210736eb1f74b3d19d9dbae0803f3bc271683be811ceMatt WalanScriptReduce(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 21084a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross jlongArray ains, jlong aout, jintArray limits) 210936eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala{ 211036eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala if (kLogApi) { 21114a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross ALOGD("nScriptReduce, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 211226ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 211326ef7a739b724452f93f850a1c268c42e439317bDavid Gross 211426ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (ains == nullptr) { 211526ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("At least one input required."); 211626ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 211726ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 211826ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 211926ef7a739b724452f93f850a1c268c42e439317bDavid Gross jint in_len = _env->GetArrayLength(ains); 212026ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 212126ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Too many arguments in kernel launch."); 212226ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 212326ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 212426ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 212526ef7a739b724452f93f850a1c268c42e439317bDavid Gross 212626ef7a739b724452f93f850a1c268c42e439317bDavid Gross jlong *in_ptr = _env->GetLongArrayElements(ains, nullptr); 212726ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (in_ptr == nullptr) { 212826ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Failed to get Java array elements"); 212926ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 213026ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 213126ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 213226ef7a739b724452f93f850a1c268c42e439317bDavid Gross 213326ef7a739b724452f93f850a1c268c42e439317bDavid Gross RsAllocation *in_allocs = nullptr; 213426ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (sizeof(RsAllocation) == sizeof(jlong)) { 213526ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_allocs = (RsAllocation*)in_ptr; 213626ef7a739b724452f93f850a1c268c42e439317bDavid Gross } else { 213726ef7a739b724452f93f850a1c268c42e439317bDavid Gross // Convert from 64-bit jlong types to the native pointer type. 213826ef7a739b724452f93f850a1c268c42e439317bDavid Gross 213926ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 214026ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (in_allocs == nullptr) { 214126ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Failed launching kernel for lack of memory."); 214226ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 214326ef7a739b724452f93f850a1c268c42e439317bDavid Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 214426ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 214526ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 214626ef7a739b724452f93f850a1c268c42e439317bDavid Gross 214726ef7a739b724452f93f850a1c268c42e439317bDavid Gross for (int index = in_len; --index >= 0;) { 214826ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_allocs[index] = (RsAllocation)in_ptr[index]; 214926ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 215026ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 215126ef7a739b724452f93f850a1c268c42e439317bDavid Gross 215226ef7a739b724452f93f850a1c268c42e439317bDavid Gross RsScriptCall sc, *sca = nullptr; 215326ef7a739b724452f93f850a1c268c42e439317bDavid Gross uint32_t sc_size = 0; 215426ef7a739b724452f93f850a1c268c42e439317bDavid Gross 215526ef7a739b724452f93f850a1c268c42e439317bDavid Gross jint limit_len = 0; 215626ef7a739b724452f93f850a1c268c42e439317bDavid Gross jint *limit_ptr = nullptr; 215726ef7a739b724452f93f850a1c268c42e439317bDavid Gross 215826ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (limits != nullptr) { 215926ef7a739b724452f93f850a1c268c42e439317bDavid Gross limit_len = _env->GetArrayLength(limits); 216026ef7a739b724452f93f850a1c268c42e439317bDavid Gross limit_ptr = _env->GetIntArrayElements(limits, nullptr); 216126ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (limit_ptr == nullptr) { 216226ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Failed to get Java array elements"); 216326ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 216426ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 216526ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 216626ef7a739b724452f93f850a1c268c42e439317bDavid Gross 216726ef7a739b724452f93f850a1c268c42e439317bDavid Gross assert(limit_len == 6); 216826ef7a739b724452f93f850a1c268c42e439317bDavid Gross UNUSED(limit_len); // As the assert might not be compiled. 216926ef7a739b724452f93f850a1c268c42e439317bDavid Gross 217026ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.xStart = limit_ptr[0]; 217126ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.xEnd = limit_ptr[1]; 217226ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.yStart = limit_ptr[2]; 217326ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.yEnd = limit_ptr[3]; 217426ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.zStart = limit_ptr[4]; 217526ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.zEnd = limit_ptr[5]; 217626ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 217726ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.arrayStart = 0; 217826ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.arrayEnd = 0; 217926ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array2Start = 0; 218026ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array2End = 0; 218126ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array3Start = 0; 218226ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array3End = 0; 218326ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array4Start = 0; 218426ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array4End = 0; 218526ef7a739b724452f93f850a1c268c42e439317bDavid Gross 218626ef7a739b724452f93f850a1c268c42e439317bDavid Gross sca = ≻ 218726ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc_size = sizeof(sc); 218826ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 218926ef7a739b724452f93f850a1c268c42e439317bDavid Gross 21904a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross rsScriptReduce((RsContext)con, (RsScript)script, slot, 21914a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross in_allocs, in_len, (RsAllocation)aout, 21924a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross sca, sc_size); 219326ef7a739b724452f93f850a1c268c42e439317bDavid Gross 219426ef7a739b724452f93f850a1c268c42e439317bDavid Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 219526ef7a739b724452f93f850a1c268c42e439317bDavid Gross 219626ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (limits != nullptr) { 219726ef7a739b724452f93f850a1c268c42e439317bDavid Gross _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 219826ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 219926ef7a739b724452f93f850a1c268c42e439317bDavid Gross} 220026ef7a739b724452f93f850a1c268c42e439317bDavid Gross 2201fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// ----------------------------------- 2202fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 22030e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2204eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 2205e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jstring resName, jstring cacheDir, 2206e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jbyteArray scriptRef, jint length) 2207d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 220867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 220967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCCreate, con(%p)", (RsContext)con); 221067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2211e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 2212e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 resNameUTF(_env, resName); 2213e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 22140e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jlong ret = 0; 2215488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte* script_ptr = nullptr; 221643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint _exception = 0; 221743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint remaining; 221843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (!scriptRef) { 221943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 22208451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 222143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 222243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 222343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (length < 0) { 222443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 22258451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 222643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 222743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 2228e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams remaining = _env->GetArrayLength(scriptRef); 222943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (remaining < length) { 223043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 22318451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", 22328451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes // "length > script.length - offset"); 223343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 223443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 2235e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams script_ptr = (jbyte *) 223643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 2237ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (script_ptr == nullptr) { 2238ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2239ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 2240ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 224143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich 2242eff663f391fa4f119685d5c14489b94661ea126fTim Murray //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length); 2243e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 22443aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con, 2245e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk resNameUTF.c_str(), resNameUTF.length(), 2246e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk cacheDirUTF.c_str(), cacheDirUTF.length(), 2247e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams (const char *)script_ptr, length); 224839ddc950c9064129ead5de04b200106c0659f937Jason Sams 224943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit: 2250e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams if (script_ptr) { 2251e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 225243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception ? JNI_ABORT: 0); 225343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 2254d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 22553aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)ret; 2256d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2257d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2258460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2259460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid) 22606ab97682fd444586ee135912a4210417a1c8781bJason Sams{ 226167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 226267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, 226367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)eid); 226467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 22653aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 22666ab97682fd444586ee135912a4210417a1c8781bJason Sams} 22676ab97682fd444586ee135912a4210417a1c8781bJason Sams 2268460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2269460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig) 227008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 227167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 227267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 227367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)sid, slot, sig); 227467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 22753aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig); 227608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 227708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2278460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2279be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 2280be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{ 2281be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni if (kLogApi) { 22827ff53fa0d42795da55b65468e07df82029deda79Elliott Hughes ALOGD("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, 2283be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (void *)sid, slot); 2284be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 2285be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return (jlong)(uintptr_t)rsScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 2286be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 2287be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 2288be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 2289460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 229008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 229167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 229267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, 229367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot); 229467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 22953aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 229608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 229708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2298460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 22999807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 23009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _dstk, jlongArray _dstf, jlongArray _types) 230108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 230267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 230367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con); 230467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 230508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2306a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong id = 0; 2307a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2308a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* kernelsPtr; 23099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint kernelsLen = _env->GetArrayLength(_kernels); 2310488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 2311a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2312a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* srcPtr; 2313a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint srcLen = _env->GetArrayLength(_src); 2314a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 2315a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2316a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* dstkPtr; 2317a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint dstkLen = _env->GetArrayLength(_dstk); 2318a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 2319a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2320a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* dstfPtr; 2321a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint dstfLen = _env->GetArrayLength(_dstf); 2322a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 2323a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2324a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsType* typesPtr; 2325a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint typesLen = _env->GetArrayLength(_types); 2326a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 2327a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2328ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jKernelsPtr == nullptr) { 2329ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: kernels"); 2330a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2331a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2332a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jSrcPtr == nullptr) { 2333a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: src"); 2334a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2335a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2336a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstkPtr == nullptr) { 2337a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: dstk"); 2338a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2339a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2340a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstfPtr == nullptr) { 2341a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: dstf"); 2342a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2343ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2344a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jTypesPtr == nullptr) { 2345a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: types"); 2346a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2347a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2348a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2349a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 23509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < kernelsLen; ++i) { 23519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 23529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 23539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2354a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 23559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < srcLen; ++i) { 23569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 23579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 23589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2359a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 23609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstkLen; ++i) { 23619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 23629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 23639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2364a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 23659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstfLen; ++i) { 23669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 23679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 23689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2369a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 23709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < typesLen; ++i) { 23719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat typesPtr[i] = (RsType)jTypesPtr[i]; 23729807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 23739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2374a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con, 23759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 23769807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 23779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 23789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 23799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsType *)typesPtr, typesLen * sizeof(RsType)); 23809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 23819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(kernelsPtr); 23829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(srcPtr); 23839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstkPtr); 23849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstfPtr); 23859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(typesPtr); 2386a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2387a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wangcleanup: 2388a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jKernelsPtr != nullptr) { 2389a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 2390a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2391a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jSrcPtr != nullptr) { 2392a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 2393a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2394a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstkPtr != nullptr) { 2395a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 2396a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2397a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstfPtr != nullptr) { 2398a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 2399a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2400a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jTypesPtr != nullptr) { 2401a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 2402a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2403a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 240408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return id; 240508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 240608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 240708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2408460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 240908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 241067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 241167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 241267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 241367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2414eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 241508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 241608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 241708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2418460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 241908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 242067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 242167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 242267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 242367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2424eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 242508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 242608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 242708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2428460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 242908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 243067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 243167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 243267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2433eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 243408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 243508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2436d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2437d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 24380e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2439eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con, 2440331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA, 2441331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean depthMask, jboolean ditherEnable, 2442331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint srcFunc, jint destFunc, 2443331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint depthFunc) 2444d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 244567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 244667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con); 244767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 24483aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA, 2449331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc, 2450331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc); 2451d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2452d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 24530011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// --------------------------------------------------------------------------- 24540011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 24550011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void 2456460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a) 24570011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{ 245867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 245967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, 246067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramVertex)vpv, slot, (RsAllocation)a); 246167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2462eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a); 24630011bcf57ff711a221a3a4c73f2a79125111647dJason Sams} 246454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 2465d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 2466460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 246754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{ 246867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 246967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 247067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsAllocation)a); 247167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2472eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a); 247354c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams} 247454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 247554c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void 2476460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 2477d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 247867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 247967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 248067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsSampler)a); 248167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2482eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a); 2483d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2484d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 248568afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// --------------------------------------------------------------------------- 2486d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2487460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2488eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 24899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 24907e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{ 2491b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 2492488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 24937e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams jint paramLen = _env->GetArrayLength(params); 2494ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jParamPtr == nullptr) { 2495ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2496ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 2497ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 24987e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 24992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 25002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 25012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 25022123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 25032123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 250467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 250567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 250667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 25077e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25089807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 25099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 25109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 25119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 25123aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 25132123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 25149807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 25152123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 25169807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 25179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 25187e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams return ret; 25197e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams} 25207e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25217e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25221fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// --------------------------------------------------------------------------- 25231fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 2524460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2525eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 25269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 25271fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{ 2528b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 2529488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 25300011bcf57ff711a221a3a4c73f2a79125111647dJason Sams jint paramLen = _env->GetArrayLength(params); 2531ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jParamPtr == nullptr) { 2532ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2533ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 2534ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 25351fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 253667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 253767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 253867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2539ee41112e1539de95596600fd2c6dada5d275217fJason Sams 25402123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 25412123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 25422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 25432123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 25442123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 25459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 25469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 25479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 25489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 25499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 25503aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 25512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 25529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 25532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 25549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 25559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 25560011bcf57ff711a221a3a4c73f2a79125111647dJason Sams return ret; 25571fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams} 25581fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 2559ebfb436a49673693b98469683451bd9ede797557Jason Sams// --------------------------------------------------------------------------- 2560ebfb436a49673693b98469683451bd9ede797557Jason Sams 2561460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2562eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull) 2563ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 256467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 256567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, 256667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe pointSprite, cull); 256767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 25683aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull); 2569ebfb436a49673693b98469683451bd9ede797557Jason Sams} 2570ebfb436a49673693b98469683451bd9ede797557Jason Sams 2571d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2572d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2573d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2574d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 257578c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script) 2576d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 257767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 257867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script); 257967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2580eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindRootScript((RsContext)con, (RsScript)script); 2581d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2582d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2583d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 258478c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs) 2585d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 258667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 258767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs); 258867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2589eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs); 2590d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2591d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2592d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 259378c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf) 2594d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 259567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 259667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, 259767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)pf); 259867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2599eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf); 2600d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2601d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 26020826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void 260378c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf) 26040826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{ 260567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 260667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf); 260767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2608eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf); 26090826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams} 26100826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams 2611d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void 261278c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf) 2613ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 261467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 261567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf); 261667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2617eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf); 2618ebfb436a49673693b98469683451bd9ede797557Jason Sams} 2619ebfb436a49673693b98469683451bd9ede797557Jason Sams 2620d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato 262102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// --------------------------------------------------------------------------- 262202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 26230e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2624eff663f391fa4f119685d5c14489b94661ea126fTim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 2625a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 262602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{ 262767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 262867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nSamplerCreate, con(%p)", (RsContext)con); 262967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 26303aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con, 2631a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)magFilter, 2632a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)minFilter, 2633a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapS, 2634a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapT, 2635a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapR, 2636a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk aniso); 263702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams} 263802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 2639bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// --------------------------------------------------------------------------- 2640bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams 2641460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 26429807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim) 2643164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{ 264467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 264567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshCreate, con(%p)", (RsContext)con); 264667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2647164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 2648a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong id = 0; 2649a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2650a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsAllocation* vtxPtr; 265125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint vtxLen = _env->GetArrayLength(_vtx); 2652488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr); 2653a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2654a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsAllocation* idxPtr; 2655a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint idxLen = _env->GetArrayLength(_idx); 2656a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr); 2657a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2658a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint primLen = _env->GetArrayLength(_prim); 2659a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint *primPtr = _env->GetIntArrayElements(_prim, nullptr); 2660a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2661ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jVtxPtr == nullptr) { 2662ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: vtx"); 2663a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanupMesh; 2664a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2665a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jIdxPtr == nullptr) { 2666a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: idx"); 2667a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanupMesh; 2668a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2669a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (primPtr == nullptr) { 2670a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: prim"); 2671a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanupMesh; 2672ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2673a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2674a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen); 26759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < vtxLen; ++i) { 26769807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i]; 26779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 26789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2679a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen); 26809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < idxLen; ++i) { 26819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i]; 26829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 26839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2684a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con, 2685a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang (RsAllocation *)vtxPtr, vtxLen, 2686a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang (RsAllocation *)idxPtr, idxLen, 2687a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang (uint32_t *)primPtr, primLen); 268880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 26899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(vtxPtr); 26909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(idxPtr); 2691a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2692a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao WangcleanupMesh: 2693a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jVtxPtr != nullptr) { 2694a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0); 2695a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2696a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jIdxPtr != nullptr) { 2697a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0); 2698a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2699a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (primPtr != nullptr) { 2700a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseIntArrayElements(_prim, primPtr, 0); 2701a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2702a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 270325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk return id; 27049d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk} 27059d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk 270680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2707460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 270880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 270967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 271067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 271167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 271280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint vtxCount = 0; 2713eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount); 271480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return vtxCount; 271580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 271680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 271780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2718460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 271980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 272067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 272167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 272267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 272380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint idxCount = 0; 2724eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount); 272580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return idxCount; 272680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 272780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 272880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 27299807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs) 273080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 273167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 273267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 273367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 273480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 273580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation)); 2736eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs); 273780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 273880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numVtxIDs; i ++) { 27393aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 27409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_ids, i, 1, &alloc); 274180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 274280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 274380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 274480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 274580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 274680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 27479807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices) 274880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 274967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 275067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 275167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 275280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 275380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation)); 275480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t)); 275580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 2756eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices); 275780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 275880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numIndices; i ++) { 27593aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 27609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint prim = (jint)prims[i]; 27619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_idxIds, i, 1, &alloc); 27629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_primitives, i, 1, &prim); 276380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 276480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 276580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 276680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(prims); 2767164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk} 2768164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 276956f9e6f8d5436d50530807950661e66ca5efe2bbTim Murraystatic jint 277056f9e6f8d5436d50530807950661e66ca5efe2bbTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) { 277156f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray return (jint)sizeof(void*); 277256f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray} 277356f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 27740facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wangstatic jobject 27750facf021ea1a0399d956372b9d3ad9025a9a04d2Miao WangnAllocationGetByteBuffer(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 27760facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jlongArray strideArr, jint xBytesSize, 27770facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jint dimY, jint dimZ) { 27780facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (kLogApi) { 27790facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang ALOGD("nAllocationGetByteBuffer, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 27800facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 27810facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang 27820facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jlong *jStridePtr = _env->GetLongArrayElements(strideArr, nullptr); 27830facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (jStridePtr == nullptr) { 27840facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang ALOGE("Failed to get Java array elements: strideArr"); 27850facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang return 0; 27860facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 278756f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 27880facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang size_t strideIn = xBytesSize; 27890facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang void* ptr = nullptr; 27900facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (alloc != 0) { 27910facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang ptr = rsAllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 27920facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 27930facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang &strideIn, sizeof(size_t)); 27940facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 27950facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang 27960facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jobject byteBuffer = nullptr; 27970facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (ptr != nullptr) { 27980facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang size_t bufferSize = strideIn; 27990facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jStridePtr[0] = strideIn; 28000facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (dimY > 0) { 28010facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang bufferSize *= dimY; 28020facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28030facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (dimZ > 0) { 28040facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang bufferSize *= dimZ; 28050facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28060facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang byteBuffer = _env->NewDirectByteBuffer(ptr, (jlong) bufferSize); 28070facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28080facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang _env->ReleaseLongArrayElements(strideArr, jStridePtr, 0); 28090facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang return byteBuffer; 28100facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang} 2811164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// --------------------------------------------------------------------------- 2812164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 2813d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 281494d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript"; 2815d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 281676f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod methods[] = { 28171c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit", "()V", (void*)_nInit }, 28181c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2819eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 2820eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 2821eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 2822eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 2823eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 2824eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 28251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2826eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 2827eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 28282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 28292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 28302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java. 2831eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreate", "(JIII)J", (void*)nContextCreate }, 2832eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreateGL", "(JIIIIIIIIIIIIFI)J", (void*)nContextCreateGL }, 2833eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 2834eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 283547f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{"rsnContextSetCacheDir", "(JLjava/lang/String;)V", (void*)nContextSetCacheDir }, 2836eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetSurface", "(JIILandroid/view/Surface;)V", (void*)nContextSetSurface }, 2837eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 2838eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDump", "(JI)V", (void*)nContextDump }, 2839eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextPause", "(J)V", (void*)nContextPause }, 2840eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextResume", "(J)V", (void*)nContextResume }, 2841eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 2842281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 2843be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 2844281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 2845281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 2846460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAssignName", "(JJ[B)V", (void*)nAssignName }, 2847460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnGetName", "(JJ)Ljava/lang/String;", (void*)nGetName }, 2848460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 2849eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2850460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromFile", "(JLjava/lang/String;)J", (void*)nFileA3DCreateFromFile }, 28510e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream", "(JJ)J", (void*)nFileA3DCreateFromAssetStream }, 2852460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J", (void*)nFileA3DCreateFromAsset }, 2853460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetNumIndexEntries", "(JJ)I", (void*)nFileA3DGetNumIndexEntries }, 2854460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetIndexEntries", "(JJI[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries }, 28550e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex", "(JJI)J", (void*)nFileA3DGetEntryByIndex }, 2856eff663f391fa4f119685d5c14489b94661ea126fTim Murray 28570e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile", "(JLjava/lang/String;FI)J", (void*)nFontCreateFromFile }, 28580e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream", "(JLjava/lang/String;FIJ)J", (void*)nFontCreateFromAssetStream }, 28590e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J", (void*)nFontCreateFromAsset }, 2860eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2861460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 28629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 2863460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementGetNativeData", "(JJ[I)V", (void*)nElementGetNativeData }, 28649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 2865460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2866460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 28679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData", "(JJ[J)V", (void*)nTypeGetNativeData }, 2868460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 28699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 2870460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 2871460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 2872460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 2873460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2874460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 2875460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 2876460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2877460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 28788c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{"rsnAllocationSetupBufferQueue", "(JJI)V", (void*)nAllocationSetupBufferQueue }, 28798c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{"rsnAllocationShareBufferQueue", "(JJJ)V", (void*)nAllocationShareBufferQueue }, 2880460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetSurface", "(JJ)Landroid/view/Surface;", (void*)nAllocationGetSurface }, 2881460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 2882460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 28838c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{"rsnAllocationIoReceive", "(JJ)J", (void*)nAllocationIoReceive }, 288487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 2885c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 288687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 2887460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 288887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 2889460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 289087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 289187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 289245cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 289387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 289487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 2895460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 2896460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 2897460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 2898460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 289946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterCreate", "(JJJ)J", (void*)nAllocationAdapterCreate }, 290046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterOffset", "(JJIIIIIIIII)V", (void*)nAllocationAdapterOffset }, 290146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 2902460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptBindAllocation", "(JJJI)V", (void*)nScriptBindAllocation }, 2903460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetTimeZone", "(JJ[B)V", (void*)nScriptSetTimeZone }, 2904460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvoke", "(JJI)V", (void*)nScriptInvoke }, 2905460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV }, 2906be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2907be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEach }, 29084a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross{"rsnScriptReduce", "(JJI[JJ[I)V", (void*)nScriptReduce }, 2909be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2910460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI }, 2911460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI }, 2912460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarJ", "(JJIJ)V", (void*)nScriptSetVarJ }, 2913460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarJ", "(JJI)J", (void*)nScriptGetVarJ }, 2914460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarF", "(JJIF)V", (void*)nScriptSetVarF }, 2915460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarF", "(JJI)F", (void*)nScriptGetVarF }, 2916460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarD", "(JJID)V", (void*)nScriptSetVarD }, 2917460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarD", "(JJI)D", (void*)nScriptGetVarD }, 2918460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarV", "(JJI[B)V", (void*)nScriptSetVarV }, 2919460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarV", "(JJI[B)V", (void*)nScriptGetVarV }, 2920460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarVE", "(JJI[BJ[I)V", (void*)nScriptSetVarVE }, 2921460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarObj", "(JJIJ)V", (void*)nScriptSetVarObj }, 2922eff663f391fa4f119685d5c14489b94661ea126fTim Murray 29230e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 2924460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptIntrinsicCreate", "(JIJ)J", (void*)nScriptIntrinsicCreate }, 2925460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptKernelIDCreate", "(JJII)J", (void*)nScriptKernelIDCreate }, 2926be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 2927460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate }, 29289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 292935be56cce821d86f69026398ff9433e2d173b02fYang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;Ljava/lang/String;[J)J", (void*)nScriptGroup2Create }, 2930460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 2931460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 2932460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 2933281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 2934eff663f391fa4f119685d5c14489b94661ea126fTim Murray 293525207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Single", "(JJIIIIIIIIIFJJFJIIII)V", (void*)nScriptIntrinsicBLAS_Single }, 293625207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Double", "(JJIIIIIIIIIDJJDJIIII)V", (void*)nScriptIntrinsicBLAS_Double }, 293725207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Complex", "(JJIIIIIIIIIFFJJFFJIIII)V", (void*)nScriptIntrinsicBLAS_Complex }, 293825207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Z", "(JJIIIIIIIIIDDJJDDJIIII)V", (void*)nScriptIntrinsicBLAS_Z }, 293925207df658d6a8a3e885c7017fcc25702363583cTim Murray 29409cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray{"rsnScriptIntrinsicBLAS_BNNM", "(JJIIIJIJIJII)V", (void*)nScriptIntrinsicBLAS_BNNM }, 29419cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 29420e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate", "(JZZZZZZIII)J", (void*)nProgramStoreCreate }, 2943eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2944460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants }, 2945460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindTexture", "(JJIJ)V", (void*)nProgramBindTexture }, 2946460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindSampler", "(JJIJ)V", (void*)nProgramBindSampler }, 2947eff663f391fa4f119685d5c14489b94661ea126fTim Murray 29489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramFragmentCreate }, 2949460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramRasterCreate", "(JZI)J", (void*)nProgramRasterCreate }, 29509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramVertexCreate }, 2951eff663f391fa4f119685d5c14489b94661ea126fTim Murray 295278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript", "(JJ)V", (void*)nContextBindRootScript }, 295378c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore", "(JJ)V", (void*)nContextBindProgramStore }, 295478c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment", "(JJ)V", (void*)nContextBindProgramFragment }, 295578c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex", "(JJ)V", (void*)nContextBindProgramVertex }, 295678c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster", "(JJ)V", (void*)nContextBindProgramRaster }, 2957eff663f391fa4f119685d5c14489b94661ea126fTim Murray 29580e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 2959eff663f391fa4f119685d5c14489b94661ea126fTim Murray 29609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate", "(J[J[J[I)J", (void*)nMeshCreate }, 2961eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2962460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetVertexBufferCount", "(JJ)I", (void*)nMeshGetVertexBufferCount }, 2963460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetIndexCount", "(JJ)I", (void*)nMeshGetIndexCount }, 29649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices", "(JJ[JI)V", (void*)nMeshGetVertices }, 29659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices", "(JJ[J[II)V", (void*)nMeshGetIndices }, 296680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 296756f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 29680facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang{"rsnAllocationGetByteBuffer", "(JJ[JIII)Ljava/nio/ByteBuffer;", (void*)nAllocationGetByteBuffer }, 2969d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 2970d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2971d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env) 2972d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2973d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return android::AndroidRuntime::registerNativeMethods( 2974d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams _env, classPathName, methods, NELEM(methods)); 2975d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2976d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2977d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2978d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2979d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved) 2980d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2981488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes JNIEnv* env = nullptr; 2982d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams jint result = -1; 2983d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2984d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 29853762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("ERROR: GetEnv failed\n"); 2986d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 2987d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 2988488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes assert(env != nullptr); 2989d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2990d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (registerFuncs(env) < 0) { 29910e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGE("ERROR: Renderscript native registration failed\n"); 2992d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 2993d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 2994d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2995d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams /* success -- return valid version number */ 2996d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams result = JNI_VERSION_1_4; 2997d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2998d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail: 2999d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return result; 3000d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 3001