android_renderscript_RenderScript.cpp revision 86c5c2dab70b03bf0823ef4d9167b0a6b69c0742
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 24cbe25a86b4aa3353c8016a129028671e902611fStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project 3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License. 6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at 7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software 11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and 14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License. 15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */ 16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17d1516dffa8d676fcad092d9736163829e6d0fdceJason Sams#define LOG_TAG "RenderScript_jni" 18f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdlib.h> 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdio.h> 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <fcntl.h> 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <unistd.h> 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <math.h> 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <utils/misc.h> 2509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer#include <inttypes.h> 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 27b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/Asset.h> 28b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h> 29b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h> 30f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h" 32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h" 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h" 34ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h" 35b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h" 36f4faeac3525fe1ce3707ab785a1651aec367589dJohn Reck#include "android/graphics/GraphicsJNI.h" 37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 381d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rs.h> 391d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rsEnv.h> 40fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams#include <gui/Surface.h> 41d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden#include <gui/GLConsumer.h> 42faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h> 43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 443762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE 4567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampestatic constexpr bool kLogApi = false; 46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 47d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android; 48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 4967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampetemplate <typename... T> 5067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampevoid UNUSED(T... t) {} 5167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe 52414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ 53e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams jint len = 0; \ 54488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes void *ptr = nullptr; \ 5587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang void *srcPtr = nullptr; \ 5621659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams size_t typeBytes = 0; \ 57414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines jint relFlag = 0; \ 58414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines if (readonly) { \ 59414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \ 6087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang /* readonly = true, also indicates we are copying to the allocation . */ \ 61414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines relFlag = JNI_ABORT; \ 62414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines } \ 63e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams switch(dataType) { \ 64e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_32: \ 65e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jfloatArray)data); \ 66e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \ 67ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 68ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 69ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 70ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 7121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 7287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 7387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 7487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 7587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 7687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 7787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 7887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 7987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 8087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 8187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 8387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 8587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 8687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 8787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 8887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 8987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 9087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 91414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \ 92e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 93e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_64: \ 94e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jdoubleArray)data); \ 95e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \ 96ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 97ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 98ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 99ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 10021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 10187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 10287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 10387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 10487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 10587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 10687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 10787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 10887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 10987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 11087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 11187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 11287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 11387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 11487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 11587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 11687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 11787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 11887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 11987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 120414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \ 121e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 122e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_8: \ 123e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_8: \ 124e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jbyteArray)data); \ 125e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \ 126ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 127ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 128ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 129ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 13021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 1; \ 13187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 13287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 13387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 13487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 13587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 13687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 13787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 13887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 13987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 14087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 14187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 14287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 14387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 14487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 14587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 14687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 14787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 14887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 14987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 150414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \ 151e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 152e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_16: \ 153e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_16: \ 1541333215d8e61c1cbcabb551ac9a49a801f90ca76Pirama Arumuga Nainar case RS_TYPE_FLOAT_16: \ 155e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jshortArray)data); \ 156e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetShortArrayElements((jshortArray)data, flag); \ 157ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 158ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 159ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 160ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 16121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 2; \ 16287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 16387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 16487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 16587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 16687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 16787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 16887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 16987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 17087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 17187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 17287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 17387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 17487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 17587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 17687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 17787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 17887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 17987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 18087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 181414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \ 182e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 183e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_32: \ 184e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_32: \ 185e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jintArray)data); \ 186e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetIntArrayElements((jintArray)data, flag); \ 187ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 188ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 189ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 190ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 19121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 19287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 19387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 19487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 19587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 19687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 19787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 19887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 19987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 20087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 20187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 20287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 20387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 20487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 20587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 20687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 20787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 20887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 20987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 21087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 211414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \ 212e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 213e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_64: \ 214e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_64: \ 215e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jlongArray)data); \ 216e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetLongArrayElements((jlongArray)data, flag); \ 217ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { \ 218ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements."); \ 219ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; \ 220ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } \ 22121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 22287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 22387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 22487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 22587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 22687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 22787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 22887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 22987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 23087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 23187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 23287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 23387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 23487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 23587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 23687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 23787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 23887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 23987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 24087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 241414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \ 242e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 243e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams default: \ 244e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams break; \ 245e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams } \ 24687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang UNUSED(len, ptr, srcPtr, typeBytes, relFlag); \ 247e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams} 248e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 249e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 250b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 { 251b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic: 2522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) { 253488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes fCStr = env->GetStringUTFChars(str, nullptr); 254b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fLength = env->GetStringUTFLength(str); 255b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 2562123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringToUTF8() { 257b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fEnv->ReleaseStringUTFChars(fJStr, fCStr); 258b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 259b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* c_str() const { return fCStr; } 260b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize length() const { return fLength; } 261b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 262b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate: 263b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk JNIEnv* fEnv; 264b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fJStr; 265b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* fCStr; 266b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize fLength; 267b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}; 268b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 2692123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 { 2702123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic: 2712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength) 2722123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk : mEnv(env), mStrings(strings), mStringsLength(stringsLength) { 273488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings = nullptr; 274488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mSizeArray = nullptr; 2752123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk if (stringsLength > 0) { 2762123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mCStrings = (const char **)calloc(stringsLength, sizeof(char *)); 2772123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t)); 2782123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct = 0; ct < stringsLength; ct ++) { 2792123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 280488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings[ct] = mEnv->GetStringUTFChars(s, nullptr); 2812123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray[ct] = mEnv->GetStringUTFLength(s); 2822123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2832123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2842123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2852123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringArrayToUTF8() { 2862123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct=0; ct < mStringsLength; ct++) { 2872123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 2882123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mEnv->ReleaseStringUTFChars(s, mCStrings[ct]); 2892123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2902123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mCStrings); 2912123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mSizeArray); 2922123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2932123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **c_str() const { return mCStrings; } 2942123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *c_str_len() const { return mSizeArray; } 2952123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize length() const { return mStringsLength; } 2962123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 2972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate: 2982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk JNIEnv *mEnv; 2992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jobjectArray mStrings; 3002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **mCStrings; 3012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *mSizeArray; 3022123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize mStringsLength; 3032123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk}; 3042123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 305d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 306d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 307ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0; 308d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 309d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this) 310d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 311eff663f391fa4f119685d5c14489b94661ea126fTim Murray gContextId = _env->GetFieldID(_this, "mContext", "J"); 312d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 313d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 314d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 315d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 31687e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) { 31787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytesPad = mSize * 4; 31887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytes = mSize * 3; 31987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 32087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 32187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang for (int i = 0; i < count; i++) { 32287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang memcpy(dst, src, sizeBytes); 32387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang dst += sizeBytesPad; 32487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang src += sizeBytes; 32587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } 32687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang} 32787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 32887e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) { 32987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytesPad = mSize * 4; 33087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytes = mSize * 3; 33187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 33287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 33387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang for (int i = 0; i < count; i++) { 33487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang memcpy(dst, src, sizeBytes); 33587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang dst += sizeBytes; 33687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang src += sizeBytesPad; 33787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } 33887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang} 33987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 34087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 34187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang// --------------------------------------------------------------------------- 3423eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void 343eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con) 34496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{ 34567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 34667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextFinish, con(%p)", (RsContext)con); 34767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 348eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextFinish((RsContext)con); 34996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams} 35096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams 351281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic jlong 352281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID, 353281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong returnValue, jlongArray fieldIDArray, 354281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray valueArray, jintArray sizeArray, 355281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray depClosureArray, jlongArray depFieldIDArray) { 35617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong ret = 0; 35717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 358281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 359281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 360ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jFieldIDs == nullptr) { 361ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: fieldIDs."); 362ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 363ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 364ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 36517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 36617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize values_length = _env->GetArrayLength(valueArray); 367ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jValues == nullptr) { 368ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: values."); 369ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 370ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 371ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 37217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 37317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 374ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jSizes == nullptr) { 375ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: sizes."); 376ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 377ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 378ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 37917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jDepClosures = 38017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->GetLongArrayElements(depClosureArray, nullptr); 38117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize depClosures_length = _env->GetArrayLength(depClosureArray); 382ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jDepClosures == nullptr) { 383ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: depClosures."); 384ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 385ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 386ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 38717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jDepFieldIDs = 38817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->GetLongArrayElements(depFieldIDArray, nullptr); 38917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray); 390ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jDepFieldIDs == nullptr) { 391ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: depFieldIDs."); 392ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 393ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 39417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 39517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni size_t numValues, numDependencies; 39617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsScriptFieldID* fieldIDs; 39717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsClosure* depClosures; 39817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsScriptFieldID* depFieldIDs; 39917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 40017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 40117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unmatched field IDs, values, and sizes in closure creation."); 40217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 40317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 40417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 40517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni numValues = (size_t)fieldIDs_length; 40617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 40717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (depClosures_length != depFieldIDs_length) { 40817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unmatched closures and field IDs for dependencies in closure creation."); 40917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 41017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 41117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 41217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni numDependencies = (size_t)depClosures_length; 41317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 41417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (numDependencies > numValues) { 41517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unexpected number of dependencies in closure creation"); 41617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 41717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 41817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 4197b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 42017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many arguments or globals in closure creation"); 42117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 42217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 42317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 42486c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (numValues > 0) { 42586c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 42686c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (fieldIDs == nullptr) { 42786c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni goto exit; 42886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 42986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } else { 43086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni // numValues == 0 43186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni // alloca(0) implementation is platform-dependent. 43286c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni fieldIDs = nullptr; 43317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 43417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 43517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni for (size_t i = 0; i < numValues; i++) { 436281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 437281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 438281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 43986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (numDependencies > 0) { 44086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies); 44186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (depClosures == nullptr) { 44286c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni goto exit; 44386c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 44486c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni 44586c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni for (size_t i = 0; i < numDependencies; i++) { 44686c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depClosures[i] = (RsClosure)jDepClosures[i]; 44786c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 44886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni 44986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depFieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numDependencies); 45086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni if (depFieldIDs == nullptr) { 45186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni goto exit; 45286c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 45386c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni 45486c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni for (size_t i = 0; i < numDependencies; i++) { 45586c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depFieldIDs[i] = (RsClosure)jDepFieldIDs[i]; 45686c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } 45786c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni } else { 45886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni // alloca(0) implementation is platform-dependent. 45986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depClosures = nullptr; 46086c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni depFieldIDs = nullptr; 461281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 462281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 46317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ret = (jlong)(uintptr_t)rsClosureCreate( 464281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, 465263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni fieldIDs, numValues, jValues, numValues, 46617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni (int*)jSizes, numValues, 46717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni depClosures, numDependencies, 46817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni depFieldIDs, numDependencies); 46917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 47017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Niexit: 47117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 47217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(depFieldIDArray, jDepFieldIDs, JNI_ABORT); 47317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(depClosureArray, jDepClosures, JNI_ABORT); 47417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 47517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 47617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 47717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 47817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return ret; 479281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 480281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 481be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 482be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID, 483be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray, 484be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jintArray sizeArray) { 48517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong ret = 0; 48617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 487be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr); 488be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize jParamLength = _env->GetArrayLength(paramArray); 489ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jParams == nullptr) { 490ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: params."); 491ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 492ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 493ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 494be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 495be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 496ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jFieldIDs == nullptr) { 497ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: fieldIDs."); 498ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 499ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 500ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 50117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 50217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize values_length = _env->GetArrayLength(valueArray); 503ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jValues == nullptr) { 504ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: values."); 505ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 506ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 507ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 50817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr); 50917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 510ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jSizes == nullptr) { 511ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: sizes."); 512ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 513ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 51417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 51517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni size_t numValues; 51617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsScriptFieldID* fieldIDs; 51717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 51817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (fieldIDs_length != values_length || values_length != sizes_length) { 51917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Unmatched field IDs, values, and sizes in closure creation."); 52017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 52117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 52217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 52317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni numValues = (size_t) fieldIDs_length; 52417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 5257b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) { 52617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many arguments or globals in closure creation"); 52717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 52817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 52917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 53017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues); 53117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (fieldIDs == nullptr) { 53217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 53317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 53417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 53517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni for (size_t i = 0; i< numValues; i++) { 536be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 537be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 538be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 53917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ret = (jlong)(uintptr_t)rsInvokeClosureCreate( 540be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, 541263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni fieldIDs, numValues, jValues, numValues, 54217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni (int*)jSizes, numValues); 54317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 54417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Niexit: 54517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 54617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT); 54717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT); 54817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT); 54917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseByteArrayElements(paramArray, jParams, JNI_ABORT); 55017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 55117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return ret; 552be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 553be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 554281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 555281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 556281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jint index, jlong value, jint size) { 557263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni // Size is signed with -1 indicating the value is an Allocation 558281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, 559263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni (uintptr_t)value, size); 560281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 561281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 562281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 563281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 564281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong fieldID, jlong value, jint size) { 565263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni // Size is signed with -1 indicating the value is an Allocation 566281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetGlobal((RsContext)con, (RsClosure)closureID, 567263cc90345784c3f60bf57c0de91afc4d6c3d5dbYang Ni (RsScriptFieldID)fieldID, (int64_t)value, size); 568281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 569281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 570281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic long 57135be56cce821d86f69026398ff9433e2d173b02fYang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, jstring name, 572ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni jstring cacheDir, jlongArray closureArray) { 57317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni jlong ret = 0; 57417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 57535be56cce821d86f69026398ff9433e2d173b02fYang Ni AutoJavaStringToUTF8 nameUTF(_env, name); 576ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 577ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni 578281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 579281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 580ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jClosures == nullptr) { 581ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: closures."); 582ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 583ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 58417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 58517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni RsClosure* closures; 58617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 5877b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (numClosures > (jsize) RS_SCRIPT_GROUP_MAX_NUMBER_CLOSURES) { 58817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many closures in script group"); 58917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 59017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 59117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 59217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 59317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (closures == nullptr) { 59417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni goto exit; 59517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 59617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 597281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < numClosures; i++) { 598281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni closures[i] = (RsClosure)jClosures[i]; 599281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 600281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 60117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ret = (jlong)(uintptr_t)rsScriptGroup2Create( 60235be56cce821d86f69026398ff9433e2d173b02fYang Ni (RsContext)con, nameUTF.c_str(), nameUTF.length(), 60335be56cce821d86f69026398ff9433e2d173b02fYang Ni cacheDirUTF.c_str(), cacheDirUTF.length(), 604ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni closures, numClosures); 60517c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 60617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Niexit: 60717c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 60817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(closureArray, jClosures, JNI_ABORT); 60917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni 61017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return ret; 611281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 612281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 613281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 614281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 615281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 616281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 617281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 61896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void 61925207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 62025207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 62125207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY, 62225207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 62325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 62425207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 62525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 62625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 62725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 62825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 62925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 63025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 63125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 63225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 63325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 63425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.f = alpha; 63525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.f = beta; 63625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 63725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 63825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 63925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 64025207df658d6a8a3e885c7017fcc25702363583cTim Murray 64125207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 64225207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 64325207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 64425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 64525207df658d6a8a3e885c7017fcc25702363583cTim Murray 64625207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 64725207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 64825207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 64925207df658d6a8a3e885c7017fcc25702363583cTim Murray} 65025207df658d6a8a3e885c7017fcc25702363583cTim Murray 65125207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 65225207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 65325207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 65425207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY, 65525207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 65625207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 65725207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 65825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 65925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 66025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 66125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 66225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 66325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 66425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 66525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 66625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 66725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.d = alpha; 66825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.d = beta; 66925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 67025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 67125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 67225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 67325207df658d6a8a3e885c7017fcc25702363583cTim Murray 67425207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 67525207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 67625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 67725207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 67825207df658d6a8a3e885c7017fcc25702363583cTim Murray 67925207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 6800b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 68125207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 68225207df658d6a8a3e885c7017fcc25702363583cTim Murray} 68325207df658d6a8a3e885c7017fcc25702363583cTim Murray 68425207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 68525207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 68625207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 68725207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX, 68825207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 68925207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 69025207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 69125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 69225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 69325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 69425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 69525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 69625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 69725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 69825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 69925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 70025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.r = alphaX; 70125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.i = alphaY; 70225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.c.r = betaX; 70382585b3906955e57e199d962b8fe11b2bab87fbaMiao Wang call.beta.c.i = betaY; 70425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 70525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 70625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 70725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 70825207df658d6a8a3e885c7017fcc25702363583cTim Murray 70925207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 71025207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 71125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 71225207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 71325207df658d6a8a3e885c7017fcc25702363583cTim Murray 71425207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7150b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 71625207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 71725207df658d6a8a3e885c7017fcc25702363583cTim Murray} 71825207df658d6a8a3e885c7017fcc25702363583cTim Murray 71925207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 72025207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 72125207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 72225207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX, 72325207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 72425207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 72525207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 72625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 72725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 72825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 72925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 73025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 73125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 73225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 73325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 73425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 73525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.r = alphaX; 73625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.i = alphaY; 73725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.z.r = betaX; 73882585b3906955e57e199d962b8fe11b2bab87fbaMiao Wang call.beta.z.i = betaY; 73925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 74025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 74125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 74225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 74325207df658d6a8a3e885c7017fcc25702363583cTim Murray 74425207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 74525207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 74625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 74725207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 74825207df658d6a8a3e885c7017fcc25702363583cTim Murray 74925207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7500b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 75125207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 75225207df658d6a8a3e885c7017fcc25702363583cTim Murray} 75325207df658d6a8a3e885c7017fcc25702363583cTim Murray 75425207df658d6a8a3e885c7017fcc25702363583cTim Murray 75525207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 7569cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim MurraynScriptIntrinsicBLAS_BNNM(JNIEnv *_env, jobject _this, jlong con, jlong id, jint M, jint N, jint K, 7579cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray jlong A, jint a_offset, jlong B, jint b_offset, jlong C, jint c_offset, 7589cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray jint c_mult_int) { 7599cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray RsBlasCall call; 7609cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray memset(&call, 0, sizeof(call)); 7619cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.func = RsBlas_bnnm; 7629cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.M = M; 7639cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.N = N; 7649cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.K = K; 7652514806817ec394d334595d76e20f3129117da6eMiao Wang call.a_offset = a_offset & 0xFF; 7662514806817ec394d334595d76e20f3129117da6eMiao Wang call.b_offset = b_offset & 0xFF; 7679cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.c_offset = c_offset; 7689cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray call.c_mult_int = c_mult_int; 7699cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7709cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray RsAllocation in_allocs[3]; 7719cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[0] = (RsAllocation)A; 7729cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[1] = (RsAllocation)B; 7739cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray in_allocs[2] = (RsAllocation)C; 7749cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7759cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 7760b34f2a3c545cb112a23072c92214e359a8df8c6Miao Wang in_allocs, NELEM(in_allocs), nullptr, 7779cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray &call, sizeof(call), nullptr, 0); 7789cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray} 7799cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7809cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 7819cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murraystatic void 782460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str) 7833eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{ 78467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 78567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 78667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 7873eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jint len = _env->GetArrayLength(str); 7883eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0); 789ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (cptr == nullptr) { 790ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 791ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 792ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 793ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 794eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len); 7953eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT); 7963eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams} 7973eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 798fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring 799460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj) 800fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{ 80167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 80267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 80367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 804488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes const char *name = nullptr; 805eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaGetName((RsContext)con, (void *)obj, &name); 806488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if(name == nullptr || strlen(name) == 0) { 807488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes return nullptr; 808581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk } 809fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk return _env->NewStringUTF(name); 810fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk} 811fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk 8127ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void 813460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 8147ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{ 81567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 81667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 81767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 818eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsObjDestroy((RsContext)con, (void *)obj); 8197ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams} 8207ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams 8213eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// --------------------------------------------------------------------------- 8223eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 823eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 824d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this) 825d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 82667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 82767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceCreate"); 82867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 8293aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsDeviceCreate(); 830d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 831d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 832d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 8335eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 834d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 83567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 83667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceDestroy"); 83767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 838d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return rsDeviceDestroy((RsDevice)dev); 839d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 840d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 841ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void 8425eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 843ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 84467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 84567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 84667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 847ebfb436a49673693b98469683451bd9ede797557Jason Sams return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 848ebfb436a49673693b98469683451bd9ede797557Jason Sams} 849ebfb436a49673693b98469683451bd9ede797557Jason Sams 850eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 85181cd2b18bd36285d1843f78418282e1dad156fbdJason SamsnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint flags, jint sdkVer, jint contextType) 852d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 85367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 85467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreate"); 85567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 85681cd2b18bd36285d1843f78418282e1dad156fbdJason Sams return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, 0, sdkVer, (RsContextType)contextType, flags); 857704ff64b099406bb328898a7443921f22dbffd6dJason Sams} 858704ff64b099406bb328898a7443921f22dbffd6dJason Sams 859eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 8605eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 8610e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint colorMin, jint colorPref, 8620e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint alphaMin, jint alphaPref, 8630e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint depthMin, jint depthPref, 8640e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint stencilMin, jint stencilPref, 8650e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint samplesMin, jint samplesPref, jfloat samplesQ, 8660e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint dpi) 86711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{ 86886c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni RsSurfaceConfig sc = {}; 86911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaMin = alphaMin; 87011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaPref = alphaPref; 87111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorMin = colorMin; 87211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorPref = colorPref; 87311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthMin = depthMin; 87411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthPref = depthPref; 87511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesMin = samplesMin; 87611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesPref = samplesPref; 87711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesQ = samplesQ; 87811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams 87967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 88067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreateGL"); 88167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 8823aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi); 883d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 884d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 885d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 886eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 8877d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{ 88867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 88967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 89067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 891eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetPriority((RsContext)con, p); 8927d787b4722eaeb79cab42c36060336e092b77b5fJason Sams} 8937d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 89447f31582b67f492d9e1523abd0d8b86c38ec007dTim Murraystatic void 89547f31582b67f492d9e1523abd0d8b86c38ec007dTim MurraynContextSetCacheDir(JNIEnv *_env, jobject _this, jlong con, jstring cacheDir) 89647f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{ 89747f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 89847f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray 89947f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray if (kLogApi) { 90047f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray ALOGD("ContextSetCacheDir, con(%p), cacheDir(%s)", (RsContext)con, cacheDirUTF.c_str()); 90147f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray } 90247f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray rsContextSetCacheDir((RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length()); 90347f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray} 90447f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray 9057d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 9067d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 9077d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void 908eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd) 909efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{ 91067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 91167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, 91267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (Surface *)wnd); 91367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 914efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 915488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes ANativeWindow * window = nullptr; 916488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (wnd == nullptr) { 917efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 918efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } else { 91964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown window = android_view_Surface_getNativeWindow(_env, wnd).get(); 920efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } 921efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 922eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetSurface((RsContext)con, width, height, window); 923efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams} 924efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 925efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void 926eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con) 927d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 92867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 92967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDestroy, con(%p)", (RsContext)con); 93067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 931eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDestroy((RsContext)con); 932d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 933d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 934715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void 935eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 936715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{ 93767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 93867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 93967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 940715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams rsContextDump((RsContext)con, bits); 941715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams} 942d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 943d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 944eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con) 94565e7aa56f56097418d617663683544c25b3988eaJason Sams{ 94667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 94767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPause, con(%p)", (RsContext)con); 94867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 949eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextPause((RsContext)con); 95065e7aa56f56097418d617663683544c25b3988eaJason Sams} 95165e7aa56f56097418d617663683544c25b3988eaJason Sams 95265e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void 953eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con) 95465e7aa56f56097418d617663683544c25b3988eaJason Sams{ 95567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 95667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextResume, con(%p)", (RsContext)con); 95767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 958eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextResume((RsContext)con); 95965e7aa56f56097418d617663683544c25b3988eaJason Sams} 96065e7aa56f56097418d617663683544c25b3988eaJason Sams 9611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 9621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring 963eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 9641c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 96567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 96667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con); 96767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 9681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams char buf[1024]; 9691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 9701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 9711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 972eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 97365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams buf, sizeof(buf), 97465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 975edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 9761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if (!id && receiveLen) { 97709993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 9781c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 9791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams return _env->NewStringUTF(buf); 9801c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 9811c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 982edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint 983eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 984516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 985516c31911578db8ce53529483c3ded918ac7dc6bJason Sams jint len = _env->GetArrayLength(data); 98667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 98767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 98867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 989488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = _env->GetIntArrayElements(data, nullptr); 990ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 991ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 992ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 993ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 994516c31911578db8ce53529483c3ded918ac7dc6bJason Sams size_t receiveLen; 9951c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 996eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 99765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, len * 4, 99865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 999edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 1000516c31911578db8ce53529483c3ded918ac7dc6bJason Sams if (!id && receiveLen) { 100109993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 1002516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 1003516c31911578db8ce53529483c3ded918ac7dc6bJason Sams _env->ReleaseIntArrayElements(data, ptr, 0); 10040e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 10051c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 10061c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 10071c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint 1008eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 10091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 101067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 101167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPeekMessage, con(%p)", (RsContext)con); 101267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1013488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr); 1014ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (auxDataPtr == nullptr) { 1015ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1016ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 1017ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 10181c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 10191c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 1020eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 1021edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 10221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[0] = (jint)subID; 10231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[1] = (jint)receiveLen; 10241c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 10250e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 1026516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 1027516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1028eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 1029516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 103067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 103167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextInitToClient, con(%p)", (RsContext)con); 103267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1033eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextInitToClient((RsContext)con); 1034516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 1035516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1036eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 1037516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 103867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 103967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con); 104067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1041eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDeinitToClient((RsContext)con); 1042516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 1043516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1044455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void 1045eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 1046455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{ 1047488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = nullptr; 1048455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams jint len = 0; 1049455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 1050455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams len = _env->GetArrayLength(data); 10514a043c1853c117c1b4c4342e76cd16a5abdc1045Stephen Hines ptr = _env->GetIntArrayElements(data, nullptr); 1052ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1053ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1054ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1055ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1056455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 105767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 105867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 105967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1060eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 1061455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 1062455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 1063455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 1064455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams} 1065455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 1066455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 1067516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1068460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 106967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, 107067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint size) 1071d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 107267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 107309993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con, 107467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe type, kind, norm, size); 107567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 107667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, 10778c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni norm, size); 1078d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1079d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1080460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1081eff663f391fa4f119685d5c14489b94661ea126fTim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con, 10829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 1083d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1084718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int fieldCount = _env->GetArrayLength(_ids); 108567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 108667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementCreate2, con(%p)", (RsContext)con); 108767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1088718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 1089488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jIds = _env->GetLongArrayElements(_ids, nullptr); 1090ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jIds == nullptr) { 1091ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: ids"); 1092ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 1093ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1094488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr); 1095ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jArraySizes == nullptr) { 1096ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: arraySizes"); 1097ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 1098ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 10999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 11009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 11019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 11029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 11039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < fieldCount; i ++) { 11049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat ids[i] = (RsElement)jIds[i]; 11059807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat arraySizes[i] = (uint32_t)jArraySizes[i]; 11069807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 1107718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 11082123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 11092123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 11102123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **nameArray = names.c_str(); 11112123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *sizeArray = names.c_str_len(); 11122123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 11133aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con, 11149807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (const RsElement *)ids, fieldCount, 11157a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams nameArray, fieldCount * sizeof(size_t), sizeArray, 11168c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni (const uint32_t *)arraySizes, fieldCount); 11172123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 11189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(ids); 11199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(arraySizes); 11209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 11219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 11229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 11233aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)id; 1124d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1125d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1126dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 1127460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData) 1128dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 1129dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int dataSize = _env->GetArrayLength(_elementData); 113067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 113167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetNativeData, con(%p)", (RsContext)con); 113267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1133dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1134dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements 1135dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(dataSize == 5); 1136dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 113778c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath uintptr_t elementData[5]; 1138eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize); 1139dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1140dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < dataSize; i ++) { 11419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint data = (jint)elementData[i]; 11429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_elementData, i, 1, &data); 1143dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1144dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1145dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1146dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1147dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 1148460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 11499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _IDs, 11507d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jobjectArray _names, 11517d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jintArray _arraySizes) 1152dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 11539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t dataSize = _env->GetArrayLength(_IDs); 115467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 115567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetSubElements, con(%p)", (RsContext)con); 115667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1157dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 11589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t)); 11599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const char **names = (const char **)malloc(dataSize * sizeof(const char *)); 116078c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t)); 1161dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 116267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 116367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (uint32_t)dataSize); 1164dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 11659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(uint32_t i = 0; i < dataSize; i++) { 11663aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong id = (jlong)(uintptr_t)ids[i]; 11679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint arraySize = (jint)arraySizes[i]; 1168dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 11699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_IDs, i, 1, &id); 11709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 1171dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1172dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1173dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(ids); 1174dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(names); 11757d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk free(arraySizes); 1176dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1177dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1178d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1179d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1180460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1181460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 1182b109cc78616abee7291eb42094cd156b5db3355dJason Sams jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 1183d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 118467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 118567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 118609993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv); 118767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 11883b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams 118967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, 11908c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni faces, yuv); 1191d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1192d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1193dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 11949807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData) 1195dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 1196dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // We are packing 6 items: mDimX; mDimY; mDimZ; 1197dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // mDimLOD; mDimFaces; mElement; into typeData 1198dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int elementCount = _env->GetArrayLength(_typeData); 1199dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1200dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(elementCount == 6); 120167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 120267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con); 120367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1204dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 12059807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t typeData[6]; 1206eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6); 1207dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1208dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < elementCount; i ++) { 12093aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong data = (jlong)(uintptr_t)typeData[i]; 12109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_typeData, i, 1, &data); 1211dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1212dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1213dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1214d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1215d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1216460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 121767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 121867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong pointer) 1219d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 122067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 122167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 122267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 122367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 122467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type, 122567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocationMipmapControl)mips, 12268c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni (uint32_t)usage, (uintptr_t)pointer); 1227d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1228d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1229d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1230460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 12315476b450e50939940dcf3f15c92335cee2fc572dJason Sams{ 123267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 123367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, 123467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe bits); 123567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1236eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 12375476b450e50939940dcf3f15c92335cee2fc572dJason Sams} 12385476b450e50939940dcf3f15c92335cee2fc572dJason Sams 12398c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wangstatic void 12408c1509249c5552270d8accc2c9512f499a8f5e2dMiao WangnAllocationSetupBufferQueue(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint numAlloc) 12418c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{ 12428c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang if (kLogApi) { 12438c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang ALOGD("nAllocationSetupBufferQueue, con(%p), alloc(%p), numAlloc(%d)", (RsContext)con, 12448c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang (RsAllocation)alloc, numAlloc); 12458c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang } 12468c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang rsAllocationSetupBufferQueue((RsContext)con, (RsAllocation)alloc, (uint32_t)numAlloc); 12478c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang} 12488c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang 12498c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wangstatic void 12508c1509249c5552270d8accc2c9512f499a8f5e2dMiao WangnAllocationShareBufferQueue(JNIEnv *_env, jobject _this, jlong con, jlong alloc1, jlong alloc2) 12518c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{ 12528c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang if (kLogApi) { 12538c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang ALOGD("nAllocationShareBufferQueue, con(%p), alloc1(%p), alloc2(%p)", (RsContext)con, 12548c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang (RsAllocation)alloc1, (RsAllocation)alloc2); 12558c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang } 12568c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang 12578c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang rsAllocationShareBufferQueue((RsContext)con, (RsAllocation)alloc1, (RsAllocation)alloc2); 12588c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang} 12598c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang 126072226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject 1261460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a) 1262615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{ 126367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 126467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 126567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1266615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams 126767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, 126867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)a); 126972226e0543461133b9e177a3e78ae50b0c65e797Jason Sams sp<IGraphicBufferProducer> bp = v; 1270488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes v->decStrong(nullptr); 1271fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 127272226e0543461133b9e177a3e78ae50b0c65e797Jason Sams jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp); 127372226e0543461133b9e177a3e78ae50b0c65e797Jason Sams return o; 1274fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams} 1275fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 1276fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void 1277460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 1278163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 127967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 128067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con, 128167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, (Surface *)sur); 128267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1283163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1284fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams sp<Surface> s; 1285163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams if (sur != 0) { 128664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown s = android_view_Surface_getSurface(_env, sur); 1287163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams } 1288163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 128967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, 129067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe static_cast<ANativeWindow *>(s.get())); 1291163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1292163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1293163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1294460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1295163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 129667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 129709993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 129867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1299460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray rsAllocationIoSend((RsContext)con, (RsAllocation)alloc); 1300163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1301163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 13028c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wangstatic jlong 1303460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1304163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 130567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 130609993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 130767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 13088c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang return (jlong) rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc); 1309163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1310163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1311163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1312460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1313f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{ 131467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 131567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 131667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1317eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 1318f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams} 1319f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams 1320460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 132167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 132267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 1323fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{ 1324ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1325ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 1326fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 13275476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.lockPixels(); 13285476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 13293aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con, 133065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 13318c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni ptr, bitmap.getSize(), usage); 13325476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.unlockPixels(); 13335476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 1334ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams} 1335fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 1336460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 133767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, 133867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint mip, jobject jbitmap, jint usage) 1339a314551d69098537337c970da615a8f8af58e1f1Tim Murray{ 1340ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1341ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 1342a314551d69098537337c970da615a8f8af58e1f1Tim Murray 1343a314551d69098537337c970da615a8f8af58e1f1Tim Murray bitmap.lockPixels(); 1344a314551d69098537337c970da615a8f8af58e1f1Tim Murray const void* ptr = bitmap.getPixels(); 13453aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con, 1346a314551d69098537337c970da615a8f8af58e1f1Tim Murray (RsType)type, (RsAllocationMipmapControl)mip, 13478c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni (uint32_t)usage, (uintptr_t)ptr); 1348a314551d69098537337c970da615a8f8af58e1f1Tim Murray bitmap.unlockPixels(); 1349a314551d69098537337c970da615a8f8af58e1f1Tim Murray return id; 1350a314551d69098537337c970da615a8f8af58e1f1Tim Murray} 1351a314551d69098537337c970da615a8f8af58e1f1Tim Murray 1352460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 135367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 135467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 135567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{ 1356ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1357ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 135867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 13595476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.lockPixels(); 13605476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 13613aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con, 136265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 13638c8daea2efe0f545f570e475250e37a6eb1cb910Yang Ni ptr, bitmap.getSize(), usage); 13645476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.unlockPixels(); 13655476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 136667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk} 136767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 136826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void 1369460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 137026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{ 1371ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1372ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 1373f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int w = bitmap.width(); 1374f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int h = bitmap.height(); 137526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk 13764ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.lockPixels(); 13774ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams const void* ptr = bitmap.getPixels(); 1378eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 1379304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 138038faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray w, h, ptr, bitmap.getSize(), 0); 13814ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.unlockPixels(); 13828a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 13838a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 13844ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void 1385460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 13868a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{ 1387ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck SkBitmap bitmap; 1388ed207b92747234eac88dd3664ecfb535e45d8ed1John Reck GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); 13898a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 13904ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.lockPixels(); 13914ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams void* ptr = bitmap.getPixels(); 1392eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize()); 13934ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.unlockPixels(); 1394835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk bitmap.notifyPixelsChanged(); 13958a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 13968a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 1397414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1398d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1399460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 140087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint count, jobject data, jint sizeBytes, jint dataType, jint mSize, 140187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jboolean usePadding) 1402d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1403e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 140467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 140567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 140667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 140767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe dataType); 140867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 140987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, 141087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1411d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1412d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1413d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1414c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1415c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint xoff, jint yoff, jint zoff, 1416c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 141749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{ 141867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 141986c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni jint len = _env->GetArrayLength(data); 1420c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang ALOGD("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 1421c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 142267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe sizeBytes); 142367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1424488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1425ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1426ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1427ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1428ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1429c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang rsAllocationElementData((RsContext)con, (RsAllocation)alloc, 1430c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang xoff, yoff, zoff, 1431c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang lod, ptr, sizeBytes, compIdx); 143249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 143349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams} 143449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams 1435c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang 1436414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 143749bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void 1438460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 143987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize, 144087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jboolean usePadding) 1441d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1442e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 1443e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 144467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 144567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 144667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 144767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 144887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h; 144987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, 145087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1451d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1452d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1453414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1454414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 145540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 1456eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 1457460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, 1458304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint dstMip, jint dstFace, 1459304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint width, jint height, 1460460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, 1461304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint srcMip, jint srcFace) 1462304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{ 146367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 146467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 146567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), dstFace(%i), width(%i), height(%i)," 146667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 146767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 146867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 146967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1470304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1471eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy2DRange((RsContext)con, 1472304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)dstAlloc, 1473304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstXoff, dstYoff, 1474304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstMip, dstFace, 1475304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk width, height, 1476304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)srcAlloc, 1477304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcXoff, srcYoff, 1478304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcMip, srcFace); 1479304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk} 1480304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1481414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1482304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void 1483460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 148487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType, 148587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1486b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 1487e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 148867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 148967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 149067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 149167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe lod, w, h, d, sizeBytes); 149267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 149387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h * d; 149487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, 149587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1496b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1497b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1498414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1499414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 1500b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void 1501eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 1502460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 1503b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint dstMip, 1504b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint width, jint height, jint depth, 1505460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 1506b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint srcMip) 1507b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 150867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 150967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 151067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), width(%i), height(%i)," 151167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 151267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, 151367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip); 151467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1515b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1516eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy3DRange((RsContext)con, 1517b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)dstAlloc, 1518b05d689653b1bc94836f716f29e9578677c29075Jason Sams dstXoff, dstYoff, dstZoff, dstMip, 1519b05d689653b1bc94836f716f29e9578677c29075Jason Sams width, height, depth, 1520b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)srcAlloc, 1521b05d689653b1bc94836f716f29e9578677c29075Jason Sams srcXoff, srcYoff, srcZoff, srcMip); 1522b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1523b05d689653b1bc94836f716f29e9578677c29075Jason Sams 152440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 1525414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 152640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 152787e908dfdece91b5f504386d4901fa3342dc8083Miao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType, 152887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1529fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 153021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 153167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 153267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 153367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 153487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = 0; 153587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocationRead, false, 153687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, ptr, len * typeBytes); 1537fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1538fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1539414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1540fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1541460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 154287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint count, jobject data, jint sizeBytes, jint dataType, 154387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1544fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 154521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 154667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 154767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 154867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 154967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 155087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocation1DRead, false, 155187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1552fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1553fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1554c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data. 1555c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void 155645cec0a9711f736df26fd097c6d74834e350f9bcMiao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1557c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint xoff, jint yoff, jint zoff, 155845cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 1559c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{ 1560c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang if (kLogApi) { 156186c5c2dab70b03bf0823ef4d9167b0a6b69c0742Yang Ni jint len = _env->GetArrayLength(data); 156245cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang ALOGD("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 156345cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 156445cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang sizeBytes); 1565c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang } 156645cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1567ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1568ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1569ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1570ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 157145cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang rsAllocationElementRead((RsContext)con, (RsAllocation)alloc, 157245cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang xoff, yoff, zoff, 1573a7e2509d8da69ab1c9e14b4ce6608786c572209aJason Sams lod, ptr, sizeBytes, compIdx); 1574bfa5e659e7b4cb49178d0e99712478b29f8301a7Miao Wang _env->ReleaseByteArrayElements(data, ptr, 0); 1575c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang} 1576c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang 1577414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1578fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1579460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 158087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, 158187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 158240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{ 158321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 158421659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 158567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 158667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 158767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 158867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 158987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h; 159087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocation2DRead, false, 159187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 159240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams} 159387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 1594c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1595c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void 1596c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 159787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jint d, jobject data, int sizeBytes, int dataType, 159887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1599c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{ 1600c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 1601c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang if (kLogApi) { 1602c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang ALOGD("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 1603c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 1604c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang lod, w, h, d, sizeBytes); 1605c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang } 160687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h * d; 160787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation3DRead, false, 160887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1609c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang} 1610d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1611460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1612460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1613dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 161467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 161567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 161667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16173aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a); 1618dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1619dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 16205edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void 1621460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 16225edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{ 162367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 162467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 162567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, dimX); 162667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1627eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 16285edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams} 16295edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams 163046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 163146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic jlong 163246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterCreate(JNIEnv *_env, jobject _this, jlong con, jlong basealloc, jlong type) 163346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 163446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 163546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterCreate, con(%p), base(%p), type(%p)", 163646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)basealloc, (RsElement)type); 163746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 163846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams return (jlong)(uintptr_t) rsAllocationAdapterCreate((RsContext)con, (RsType)type, 163946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsAllocation)basealloc); 164046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 164146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 164246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 164346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic void 164446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterOffset(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 164546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint x, jint y, jint z, jint face, jint lod, 164646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint a1, jint a2, jint a3, jint a4) 164746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 164846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams uint32_t params[] = { 164946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)x, (uint32_t)y, (uint32_t)z, (uint32_t)face, 165046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)lod, (uint32_t)a1, (uint32_t)a2, (uint32_t)a3, (uint32_t)a4 165146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams }; 165246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 165346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterOffset, con(%p), alloc(%p), x(%i), y(%i), z(%i), face(%i), lod(%i), arrays(%i %i %i %i)", 165446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)alloc, x, y, z, face, lod, a1, a2, a3, a4); 165546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 165646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams rsAllocationAdapterOffset((RsContext)con, (RsAllocation)alloc, 165746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams params, sizeof(params)); 165846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 165946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 166046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 1661aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// ----------------------------------- 1662aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1663460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1664460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset) 1665aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1666aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 16670e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", asset); 1668aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 16693aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength()); 1670b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1671b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1672b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1673460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1674eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path) 1675b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1676b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr); 1677488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1678b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1679b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1680b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1681b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1682b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); 1683488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (asset == nullptr) { 1684b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1685b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1686b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 16873aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset); 1688b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1689b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1690b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1691460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1692eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName) 1693b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1694b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 16953aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str()); 1696b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1697aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1698aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1699aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1700460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jint 1701460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D) 1702aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1703aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int32_t numEntries = 0; 1704eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D); 17050e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)numEntries; 1706aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1707aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1708aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void 1709460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries) 1710aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 17110e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 1712aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry)); 1713aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1714eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D); 1715aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1716aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk for(jint i = 0; i < numEntries; i ++) { 1717aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName)); 1718aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID); 1719aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 1720aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1721aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk free(fileEntries); 1722aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1723aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 17240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1725460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index) 1726aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 17270e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 17283aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D); 1729aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1730aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1731d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1732d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1733d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17340e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1735eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con, 1736b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fileName, jfloat fontSize, jint dpi) 17379b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{ 1738b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 17393aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con, 1740e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fileNameUTF.c_str(), fileNameUTF.length(), 1741e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi); 1742b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1743b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1744b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1745b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 17460e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1747eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, 17480e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jstring name, jfloat fontSize, jint dpi, jlong native_asset) 1749b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1750b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 1751b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 nameUTF(_env, name); 1752b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 17533aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1754e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk nameUTF.c_str(), nameUTF.length(), 1755e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1756b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1757b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1758b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1759b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 17600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1761eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path, 1762b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jfloat fontSize, jint dpi) 1763b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1764b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr); 1765488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1766b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1767b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1768b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1769b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1770b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); 1771488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (asset == nullptr) { 1772b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1773b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 17749b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 17753aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1776e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk str.c_str(), str.length(), 1777e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1778b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1779b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk delete asset; 17809b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk return id; 17819b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk} 17829b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 1783bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// ----------------------------------- 1784bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 1785bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void 1786460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot) 1787d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 178867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 178967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, 179067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsScript)script, (RsAllocation)alloc, slot); 179167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1792eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 1793d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1794d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1795d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1796460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val) 17974d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 179867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 179967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, 180067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 180167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1802eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 18034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 18044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 18057c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint 1806460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18077c4caadb939b1563328251c156262c179a685c70Tim Murray{ 180867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 180967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 181067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18117c4caadb939b1563328251c156262c179a685c70Tim Murray int value = 0; 1812eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18137c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18147c4caadb939b1563328251c156262c179a685c70Tim Murray} 18157c4caadb939b1563328251c156262c179a685c70Tim Murray 18164d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1817460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 18186f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{ 181967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 182009993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 182167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 182267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1823eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 18246f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams} 18256f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams 18266f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void 1827460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 1828031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{ 182967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 183009993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 183167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 183267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1833eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 1834031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines} 1835031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines 18367c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong 1837460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18387c4caadb939b1563328251c156262c179a685c70Tim Murray{ 183967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 184067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 184167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18427c4caadb939b1563328251c156262c179a685c70Tim Murray jlong value = 0; 1843eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18447c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18457c4caadb939b1563328251c156262c179a685c70Tim Murray} 18467c4caadb939b1563328251c156262c179a685c70Tim Murray 1847031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void 1848460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val) 18494d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 185067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 185167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, 185267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 185367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1854eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 18554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 18564d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 18577c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat 1858460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18597c4caadb939b1563328251c156262c179a685c70Tim Murray{ 186067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 186167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 186267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18637c4caadb939b1563328251c156262c179a685c70Tim Murray jfloat value = 0; 1864eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18657c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18667c4caadb939b1563328251c156262c179a685c70Tim Murray} 18677c4caadb939b1563328251c156262c179a685c70Tim Murray 18684d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1869460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val) 1870ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{ 187167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 187267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, 187367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 187467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1875eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 1876ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines} 1877ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines 18787c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble 1879460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 18807c4caadb939b1563328251c156262c179a685c70Tim Murray{ 188167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 188267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 188367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18847c4caadb939b1563328251c156262c179a685c70Tim Murray jdouble value = 0; 1885eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 18867c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 18877c4caadb939b1563328251c156262c179a685c70Tim Murray} 18887c4caadb939b1563328251c156262c179a685c70Tim Murray 1889ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void 1890460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 18914d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 189267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 189367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 189467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18954d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1896488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1897ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1898ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1899ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1900ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1901eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 19024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 19034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 19044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1905adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void 1906460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 19077c4caadb939b1563328251c156262c179a685c70Tim Murray{ 190867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 190967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 191067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19117c4caadb939b1563328251c156262c179a685c70Tim Murray jint len = _env->GetArrayLength(data); 1912488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1913ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1914ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1915ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1916ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1917eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 1918414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements(data, ptr, 0); 19197c4caadb939b1563328251c156262c179a685c70Tim Murray} 19207c4caadb939b1563328251c156262c179a685c70Tim Murray 19217c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void 192267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 192367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong elem, jintArray dims) 1924adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{ 192567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 192667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 192767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1928adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint len = _env->GetArrayLength(data); 1929488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1930ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1931ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1932ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1933ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1934adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1935488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr); 1936ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (dimsPtr == nullptr) { 1937ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1938ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1939ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1940eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 1941bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines (const uint32_t*) dimsPtr, dimsLen); 1942adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1943adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1944adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines} 1945adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines 1946d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1947d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1948460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone) 1949584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{ 195067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 195167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script); 195267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1953584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1954584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jint length = _env->GetArrayLength(timeZone); 1955584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jbyte* timeZone_ptr; 1956584a375df68ed7d62b38389078c6804edf228f9cRomain Guy timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 1957ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (timeZone_ptr == nullptr) { 1958ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1959ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1960ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1961584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1962eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 1963584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1964584a375df68ed7d62b38389078c6804edf228f9cRomain Guy if (timeZone_ptr) { 1965584a375df68ed7d62b38389078c6804edf228f9cRomain Guy _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1966584a375df68ed7d62b38389078c6804edf228f9cRomain Guy } 1967584a375df68ed7d62b38389078c6804edf228f9cRomain Guy} 1968584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 196922534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void 1970460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot) 197122534176fb5c1257130ef4ee589739ca42766a32Jason Sams{ 197267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 197367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 197467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1975eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvoke((RsContext)con, (RsScript)obj, slot); 197622534176fb5c1257130ef4ee589739ca42766a32Jason Sams} 197722534176fb5c1257130ef4ee589739ca42766a32Jason Sams 1978584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void 1979460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 1980be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{ 198167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 198267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 198367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19844d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1985488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1986ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (ptr == nullptr) { 1987ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 1988ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 1989ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 1990eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 19914d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1992be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams} 1993be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 19946e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void 1995be7b1defb6b11920703b241ba5815fb09487bb02Chris WailesnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 1996be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jlongArray ains, jlong aout, jbyteArray params, 1997be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jintArray limits) 19986e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{ 199967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 20009eb9dd326ae93cd84eb9bbc740f753fe8d8c7a13Chih-Hung Hsieh ALOGD("nScriptForEach, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 200167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2002949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2003be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint in_len = 0; 2004488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *in_ptr = nullptr; 2005949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2006488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsAllocation *in_allocs = nullptr; 2007949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2008488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 2009be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_len = _env->GetArrayLength(ains); 20107b2a46fee0f95b9ae2485db36e0d279730623c4aYang Ni if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 201117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Too many arguments in kernel launch."); 201217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni // TODO (b/20758983): Report back to Java and throw an exception 201317c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return; 201417c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 2015eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 201617c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni in_ptr = _env->GetLongArrayElements(ains, nullptr); 2017ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (in_ptr == nullptr) { 2018ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2019ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 2020ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2021ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang 2022be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (sizeof(RsAllocation) == sizeof(jlong)) { 2023be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)in_ptr; 2024be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } else { 2025be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes // Convert from 64-bit jlong types to the native pointer type. 2026eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 2027be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 202817c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni if (in_allocs == nullptr) { 202917c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni ALOGE("Failed launching kernel for lack of memory."); 203017c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 203117c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni return; 203217c2d7a3e1fac8d8876262255eb24f2f81c8fbacYang Ni } 2033be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2034be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes for (int index = in_len; --index >= 0;) { 2035be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs[index] = (RsAllocation)in_ptr[index]; 2036be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2037be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2038949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 2039949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2040be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint param_len = 0; 2041488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *param_ptr = nullptr; 2042be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2043488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 2044be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_len = _env->GetArrayLength(params); 2045488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes param_ptr = _env->GetByteArrayElements(params, nullptr); 2046ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (param_ptr == nullptr) { 2047ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2048ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 2049ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2050c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines } 2051949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2052488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsScriptCall sc, *sca = nullptr; 2053be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes uint32_t sc_size = 0; 2054949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2055be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint limit_len = 0; 2056488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *limit_ptr = nullptr; 2057949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2058488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 2059be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limit_len = _env->GetArrayLength(limits); 2060488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes limit_ptr = _env->GetIntArrayElements(limits, nullptr); 2061ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (limit_ptr == nullptr) { 2062ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2063ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 2064ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2065949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2066be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes assert(limit_len == 6); 206767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe UNUSED(limit_len); // As the assert might not be compiled. 2068949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2069be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xStart = limit_ptr[0]; 2070be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xEnd = limit_ptr[1]; 2071be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yStart = limit_ptr[2]; 2072be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yEnd = limit_ptr[3]; 2073be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zStart = limit_ptr[4]; 2074be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zEnd = limit_ptr[5]; 2075be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 207614331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayStart = 0; 207714331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayEnd = 0; 207814331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2Start = 0; 207914331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2End = 0; 208014331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3Start = 0; 208114331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3End = 0; 208214331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4Start = 0; 208314331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4End = 0; 2084949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2085be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sca = ≻ 2086e8f2e445fdb138416043a16659bbf86fbbd3fff8Yang Ni // sc_size is required, but unused, by the runtime and drivers. 2087e8f2e445fdb138416043a16659bbf86fbbd3fff8Yang Ni sc_size = sizeof(sc); 2088be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2089949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2090be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes rsScriptForEachMulti((RsContext)con, (RsScript)script, slot, 2091be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs, in_len, (RsAllocation)aout, 2092be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_ptr, param_len, sca, sc_size); 2093949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2094488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 2095be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 2096949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 2097949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 2098488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 2099be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT); 2100eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes } 2101c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines 2102488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 2103be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 2104be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 2105949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes} 2106949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 210736eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Walastatic void 210836eb1f74b3d19d9dbae0803f3bc271683be811ceMatt WalanScriptReduce(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 210936eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala jlong ain, jlong aout, jintArray limits) 211036eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala{ 211136eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala if (kLogApi) { 211236eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala ALOGD("nScriptReduce, con(%p), s(%p), slot(%i) ain(%" PRId64 ") aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ain, aout); 211336eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala } 211436eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala 211536eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala RsScriptCall sc, *sca = nullptr; 211636eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala uint32_t sc_size = 0; 211736eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala 211836eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala jint limit_len = 0; 211936eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala jint *limit_ptr = nullptr; 212036eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala 212136eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala // If the caller passed limits, reflect them in the RsScriptCall. 212236eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala if (limits != nullptr) { 212336eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala limit_len = _env->GetArrayLength(limits); 212436eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala limit_ptr = _env->GetIntArrayElements(limits, nullptr); 2125ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (limit_ptr == nullptr) { 2126ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2127ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return; 2128ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 212936eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala 213036eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala // We expect to be passed an array [x1, x2] which specifies 213136eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala // the sub-range for a 1-dimensional reduction. 213236eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala assert(limit_len == 2); 213336eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala UNUSED(limit_len); // As the assert might not be compiled. 213436eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala 213536eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.xStart = limit_ptr[0]; 213636eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.xEnd = limit_ptr[1]; 213736eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.yStart = 0; 213836eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.yEnd = 0; 213936eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.zStart = 0; 214036eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.zEnd = 0; 214136eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 214236eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.arrayStart = 0; 214336eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.arrayEnd = 0; 214436eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.array2Start = 0; 214536eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.array2End = 0; 214636eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.array3Start = 0; 214736eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.array3End = 0; 214836eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.array4Start = 0; 214936eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc.array4End = 0; 215036eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala 215136eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sca = ≻ 215236eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sc_size = sizeof(sc); 215336eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala } 215436eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala 215536eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala rsScriptReduce((RsContext)con, (RsScript)script, slot, 215636eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala (RsAllocation)ain, (RsAllocation)aout, 215736eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala sca, sc_size); 215836eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala 215936eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala if (limits != nullptr) { 216036eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 216136eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala } 216236eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala} 216336eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala 216426ef7a739b724452f93f850a1c268c42e439317bDavid Grossstatic void 216526ef7a739b724452f93f850a1c268c42e439317bDavid GrossnScriptReduceNew(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 216626ef7a739b724452f93f850a1c268c42e439317bDavid Gross jlongArray ains, jlong aout, jintArray limits) 216726ef7a739b724452f93f850a1c268c42e439317bDavid Gross{ 216826ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (kLogApi) { 216926ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGD("nScriptReduceNew, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout); 217026ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 217126ef7a739b724452f93f850a1c268c42e439317bDavid Gross 217226ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (ains == nullptr) { 217326ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("At least one input required."); 217426ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 217526ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 217626ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 217726ef7a739b724452f93f850a1c268c42e439317bDavid Gross jint in_len = _env->GetArrayLength(ains); 217826ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) { 217926ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Too many arguments in kernel launch."); 218026ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 218126ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 218226ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 218326ef7a739b724452f93f850a1c268c42e439317bDavid Gross 218426ef7a739b724452f93f850a1c268c42e439317bDavid Gross jlong *in_ptr = _env->GetLongArrayElements(ains, nullptr); 218526ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (in_ptr == nullptr) { 218626ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Failed to get Java array elements"); 218726ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 218826ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 218926ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 219026ef7a739b724452f93f850a1c268c42e439317bDavid Gross 219126ef7a739b724452f93f850a1c268c42e439317bDavid Gross RsAllocation *in_allocs = nullptr; 219226ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (sizeof(RsAllocation) == sizeof(jlong)) { 219326ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_allocs = (RsAllocation*)in_ptr; 219426ef7a739b724452f93f850a1c268c42e439317bDavid Gross } else { 219526ef7a739b724452f93f850a1c268c42e439317bDavid Gross // Convert from 64-bit jlong types to the native pointer type. 219626ef7a739b724452f93f850a1c268c42e439317bDavid Gross 219726ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 219826ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (in_allocs == nullptr) { 219926ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Failed launching kernel for lack of memory."); 220026ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 220126ef7a739b724452f93f850a1c268c42e439317bDavid Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 220226ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 220326ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 220426ef7a739b724452f93f850a1c268c42e439317bDavid Gross 220526ef7a739b724452f93f850a1c268c42e439317bDavid Gross for (int index = in_len; --index >= 0;) { 220626ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_allocs[index] = (RsAllocation)in_ptr[index]; 220726ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 220826ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 220926ef7a739b724452f93f850a1c268c42e439317bDavid Gross 221026ef7a739b724452f93f850a1c268c42e439317bDavid Gross RsScriptCall sc, *sca = nullptr; 221126ef7a739b724452f93f850a1c268c42e439317bDavid Gross uint32_t sc_size = 0; 221226ef7a739b724452f93f850a1c268c42e439317bDavid Gross 221326ef7a739b724452f93f850a1c268c42e439317bDavid Gross jint limit_len = 0; 221426ef7a739b724452f93f850a1c268c42e439317bDavid Gross jint *limit_ptr = nullptr; 221526ef7a739b724452f93f850a1c268c42e439317bDavid Gross 221626ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (limits != nullptr) { 221726ef7a739b724452f93f850a1c268c42e439317bDavid Gross limit_len = _env->GetArrayLength(limits); 221826ef7a739b724452f93f850a1c268c42e439317bDavid Gross limit_ptr = _env->GetIntArrayElements(limits, nullptr); 221926ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (limit_ptr == nullptr) { 222026ef7a739b724452f93f850a1c268c42e439317bDavid Gross ALOGE("Failed to get Java array elements"); 222126ef7a739b724452f93f850a1c268c42e439317bDavid Gross // TODO (b/20758983): Report back to Java and throw an exception 222226ef7a739b724452f93f850a1c268c42e439317bDavid Gross return; 222326ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 222426ef7a739b724452f93f850a1c268c42e439317bDavid Gross 222526ef7a739b724452f93f850a1c268c42e439317bDavid Gross assert(limit_len == 6); 222626ef7a739b724452f93f850a1c268c42e439317bDavid Gross UNUSED(limit_len); // As the assert might not be compiled. 222726ef7a739b724452f93f850a1c268c42e439317bDavid Gross 222826ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.xStart = limit_ptr[0]; 222926ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.xEnd = limit_ptr[1]; 223026ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.yStart = limit_ptr[2]; 223126ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.yEnd = limit_ptr[3]; 223226ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.zStart = limit_ptr[4]; 223326ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.zEnd = limit_ptr[5]; 223426ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 223526ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.arrayStart = 0; 223626ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.arrayEnd = 0; 223726ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array2Start = 0; 223826ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array2End = 0; 223926ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array3Start = 0; 224026ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array3End = 0; 224126ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array4Start = 0; 224226ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc.array4End = 0; 224326ef7a739b724452f93f850a1c268c42e439317bDavid Gross 224426ef7a739b724452f93f850a1c268c42e439317bDavid Gross sca = ≻ 224526ef7a739b724452f93f850a1c268c42e439317bDavid Gross sc_size = sizeof(sc); 224626ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 224726ef7a739b724452f93f850a1c268c42e439317bDavid Gross 224826ef7a739b724452f93f850a1c268c42e439317bDavid Gross rsScriptReduceNew((RsContext)con, (RsScript)script, slot, 224926ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_allocs, in_len, (RsAllocation)aout, 225026ef7a739b724452f93f850a1c268c42e439317bDavid Gross sca, sc_size); 225126ef7a739b724452f93f850a1c268c42e439317bDavid Gross 225226ef7a739b724452f93f850a1c268c42e439317bDavid Gross _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 225326ef7a739b724452f93f850a1c268c42e439317bDavid Gross 225426ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (limits != nullptr) { 225526ef7a739b724452f93f850a1c268c42e439317bDavid Gross _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 225626ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 225726ef7a739b724452f93f850a1c268c42e439317bDavid Gross} 225826ef7a739b724452f93f850a1c268c42e439317bDavid Gross 2259fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// ----------------------------------- 2260fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 22610e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2262eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 2263e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jstring resName, jstring cacheDir, 2264e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jbyteArray scriptRef, jint length) 2265d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 226667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 226767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCCreate, con(%p)", (RsContext)con); 226867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2269e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 2270e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 resNameUTF(_env, resName); 2271e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 22720e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jlong ret = 0; 2273488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte* script_ptr = nullptr; 227443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint _exception = 0; 227543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint remaining; 227643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (!scriptRef) { 227743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 22788451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 227943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 228043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 228143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (length < 0) { 228243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 22838451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 228443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 228543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 2286e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams remaining = _env->GetArrayLength(scriptRef); 228743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (remaining < length) { 228843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 22898451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", 22908451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes // "length > script.length - offset"); 229143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 229243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 2293e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams script_ptr = (jbyte *) 229443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 2295ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (script_ptr == nullptr) { 2296ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2297ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return ret; 2298ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 229943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich 2300eff663f391fa4f119685d5c14489b94661ea126fTim Murray //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length); 2301e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 23023aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con, 2303e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk resNameUTF.c_str(), resNameUTF.length(), 2304e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk cacheDirUTF.c_str(), cacheDirUTF.length(), 2305e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams (const char *)script_ptr, length); 230639ddc950c9064129ead5de04b200106c0659f937Jason Sams 230743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit: 2308e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams if (script_ptr) { 2309e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 231043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception ? JNI_ABORT: 0); 231143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 2312d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 23133aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)ret; 2314d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2315d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2316460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2317460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid) 23186ab97682fd444586ee135912a4210417a1c8781bJason Sams{ 231967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 232067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, 232167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)eid); 232267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 23233aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 23246ab97682fd444586ee135912a4210417a1c8781bJason Sams} 23256ab97682fd444586ee135912a4210417a1c8781bJason Sams 2326460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2327460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig) 232808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 232967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 233067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 233167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)sid, slot, sig); 233267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 23333aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig); 233408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 233508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2336460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2337be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 2338be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{ 2339be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni if (kLogApi) { 23407ff53fa0d42795da55b65468e07df82029deda79Elliott Hughes ALOGD("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, 2341be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (void *)sid, slot); 2342be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 2343be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return (jlong)(uintptr_t)rsScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 2344be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 2345be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 2346be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 2347460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 234808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 234967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 235067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, 235167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot); 235267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 23533aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 235408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 235508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2356460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 23579807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 23589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _dstk, jlongArray _dstf, jlongArray _types) 235908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 236067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 236167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con); 236267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 236308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2364a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong id = 0; 2365a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2366a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* kernelsPtr; 23679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint kernelsLen = _env->GetArrayLength(_kernels); 2368488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 2369a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2370a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* srcPtr; 2371a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint srcLen = _env->GetArrayLength(_src); 2372a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 2373a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2374a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* dstkPtr; 2375a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint dstkLen = _env->GetArrayLength(_dstk); 2376a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 2377a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2378a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsScriptKernelID* dstfPtr; 2379a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint dstfLen = _env->GetArrayLength(_dstf); 2380a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 2381a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2382a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsType* typesPtr; 2383a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint typesLen = _env->GetArrayLength(_types); 2384a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 2385a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2386ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jKernelsPtr == nullptr) { 2387ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: kernels"); 2388a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2389a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2390a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jSrcPtr == nullptr) { 2391a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: src"); 2392a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2393a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2394a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstkPtr == nullptr) { 2395a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: dstk"); 2396a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2397a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2398a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstfPtr == nullptr) { 2399a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: dstf"); 2400a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2401ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2402a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jTypesPtr == nullptr) { 2403a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: types"); 2404a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanup; 2405a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2406a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2407a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 24089807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < kernelsLen; ++i) { 24099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 24109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 24119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2412a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 24139807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < srcLen; ++i) { 24149807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 24159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 24169807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2417a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 24189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstkLen; ++i) { 24199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 24209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 24219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2422a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 24239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstfLen; ++i) { 24249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 24259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 24269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2427a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 24289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < typesLen; ++i) { 24299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat typesPtr[i] = (RsType)jTypesPtr[i]; 24309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 24319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2432a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con, 24339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 24349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 24359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 24369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 24379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsType *)typesPtr, typesLen * sizeof(RsType)); 24389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 24399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(kernelsPtr); 24409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(srcPtr); 24419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstkPtr); 24429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstfPtr); 24439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(typesPtr); 2444a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2445a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wangcleanup: 2446a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jKernelsPtr != nullptr) { 2447a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 2448a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2449a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jSrcPtr != nullptr) { 2450a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 2451a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2452a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstkPtr != nullptr) { 2453a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 2454a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2455a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jDstfPtr != nullptr) { 2456a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 2457a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2458a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jTypesPtr != nullptr) { 2459a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 2460a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2461a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 246208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return id; 246308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 246408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 246508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2466460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 246708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 246867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 246967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 247067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 247167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2472eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 247308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 247408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 247508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2476460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 247708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 247867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 247967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 248067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 248167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2482eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 248308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 248408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 248508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 2486460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 248708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 248867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 248967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 249067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2491eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 249208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 249308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2494d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2495d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 24960e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2497eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con, 2498331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA, 2499331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean depthMask, jboolean ditherEnable, 2500331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint srcFunc, jint destFunc, 2501331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint depthFunc) 2502d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 250367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 250467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con); 250567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 25063aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA, 2507331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc, 2508331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc); 2509d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2510d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 25110011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// --------------------------------------------------------------------------- 25120011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 25130011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void 2514460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a) 25150011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{ 251667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 251767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, 251867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramVertex)vpv, slot, (RsAllocation)a); 251967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2520eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a); 25210011bcf57ff711a221a3a4c73f2a79125111647dJason Sams} 252254c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 2523d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 2524460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 252554c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{ 252667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 252767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 252867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsAllocation)a); 252967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2530eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a); 253154c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams} 253254c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 253354c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void 2534460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 2535d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 253667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 253767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 253867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsSampler)a); 253967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2540eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a); 2541d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2542d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 254368afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// --------------------------------------------------------------------------- 2544d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2545460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2546eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 25479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 25487e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{ 2549b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 2550488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 25517e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams jint paramLen = _env->GetArrayLength(params); 2552ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jParamPtr == nullptr) { 2553ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2554ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 2555ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 25567e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 25582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 25592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 25602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 25612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 256267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 256367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 256467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 25657e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 25679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 25689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 25699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 25703aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 25712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 25729807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 25732123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 25749807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 25759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 25767e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams return ret; 25777e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams} 25787e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25797e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 25801fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// --------------------------------------------------------------------------- 25811fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 2582460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2583eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 25849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 25851fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{ 2586b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 2587488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 25880011bcf57ff711a221a3a4c73f2a79125111647dJason Sams jint paramLen = _env->GetArrayLength(params); 2589ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jParamPtr == nullptr) { 2590ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements"); 2591ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang return 0; 2592ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 25931fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 259467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 259567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 259667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2597ee41112e1539de95596600fd2c6dada5d275217fJason Sams 25982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 25992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 26002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 26012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 26022123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 26039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 26049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 26059807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 26069807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 26079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 26083aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 26092123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 26109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 26112123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 26129807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 26139807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 26140011bcf57ff711a221a3a4c73f2a79125111647dJason Sams return ret; 26151fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams} 26161fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 2617ebfb436a49673693b98469683451bd9ede797557Jason Sams// --------------------------------------------------------------------------- 2618ebfb436a49673693b98469683451bd9ede797557Jason Sams 2619460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2620eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull) 2621ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 262267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 262367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, 262467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe pointSprite, cull); 262567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 26263aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull); 2627ebfb436a49673693b98469683451bd9ede797557Jason Sams} 2628ebfb436a49673693b98469683451bd9ede797557Jason Sams 2629d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2630d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2631d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2632d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 263378c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script) 2634d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 263567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 263667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script); 263767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2638eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindRootScript((RsContext)con, (RsScript)script); 2639d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2640d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2641d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 264278c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs) 2643d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 264467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 264567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs); 264667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2647eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs); 2648d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2649d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2650d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 265178c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf) 2652d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 265367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 265467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, 265567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)pf); 265667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2657eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf); 2658d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2659d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 26600826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void 266178c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf) 26620826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{ 266367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 266467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf); 266567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2666eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf); 26670826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams} 26680826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams 2669d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void 267078c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf) 2671ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 267267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 267367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf); 267467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2675eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf); 2676ebfb436a49673693b98469683451bd9ede797557Jason Sams} 2677ebfb436a49673693b98469683451bd9ede797557Jason Sams 2678d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato 267902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// --------------------------------------------------------------------------- 268002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 26810e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2682eff663f391fa4f119685d5c14489b94661ea126fTim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 2683a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 268402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{ 268567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 268667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nSamplerCreate, con(%p)", (RsContext)con); 268767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 26883aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con, 2689a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)magFilter, 2690a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)minFilter, 2691a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapS, 2692a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapT, 2693a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapR, 2694a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk aniso); 269502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams} 269602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 2697bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// --------------------------------------------------------------------------- 2698bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams 2699460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 27009807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim) 2701164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{ 270267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 270367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshCreate, con(%p)", (RsContext)con); 270467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2705164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 2706a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong id = 0; 2707a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2708a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsAllocation* vtxPtr; 270925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint vtxLen = _env->GetArrayLength(_vtx); 2710488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr); 2711a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2712a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang RsAllocation* idxPtr; 2713a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint idxLen = _env->GetArrayLength(_idx); 2714a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr); 2715a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2716a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint primLen = _env->GetArrayLength(_prim); 2717a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang jint *primPtr = _env->GetIntArrayElements(_prim, nullptr); 2718a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2719ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang if (jVtxPtr == nullptr) { 2720ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang ALOGE("Failed to get Java array elements: vtx"); 2721a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanupMesh; 2722a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2723a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jIdxPtr == nullptr) { 2724a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: idx"); 2725a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanupMesh; 2726a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2727a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (primPtr == nullptr) { 2728a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang ALOGE("Failed to get Java array elements: prim"); 2729a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang goto cleanupMesh; 2730ba8766c5db4b2c35f3461abf221e723e3bbbfa99Miao Wang } 2731a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2732a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen); 27339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < vtxLen; ++i) { 27349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i]; 27359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 27369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2737a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen); 27389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < idxLen; ++i) { 27399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i]; 27409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 27419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 2742a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con, 2743a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang (RsAllocation *)vtxPtr, vtxLen, 2744a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang (RsAllocation *)idxPtr, idxLen, 2745a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang (uint32_t *)primPtr, primLen); 274680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 27479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(vtxPtr); 27489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(idxPtr); 2749a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 2750a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao WangcleanupMesh: 2751a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jVtxPtr != nullptr) { 2752a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0); 2753a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2754a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (jIdxPtr != nullptr) { 2755a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0); 2756a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2757a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang if (primPtr != nullptr) { 2758a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang _env->ReleaseIntArrayElements(_prim, primPtr, 0); 2759a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang } 2760a4ad5f840173ecbfb679153a4f9460d2b06538e7Miao Wang 276125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk return id; 27629d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk} 27639d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk 276480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2765460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 276680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 276767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 276867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 276967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 277080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint vtxCount = 0; 2771eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount); 277280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return vtxCount; 277380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 277480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 277580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2776460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 277780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 277867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 277967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 278067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 278180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint idxCount = 0; 2782eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount); 278380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return idxCount; 278480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 278580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 278680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 27879807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs) 278880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 278967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 279067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 279167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 279280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 279380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation)); 2794eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs); 279580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 279680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numVtxIDs; i ++) { 27973aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 27989807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_ids, i, 1, &alloc); 279980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 280080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 280180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 280280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 280380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 280480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 28059807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices) 280680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 280767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 280867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 280967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 281080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 281180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation)); 281280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t)); 281380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 2814eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices); 281580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 281680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numIndices; i ++) { 28173aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 28189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint prim = (jint)prims[i]; 28199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_idxIds, i, 1, &alloc); 28209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_primitives, i, 1, &prim); 282180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 282280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 282380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 282480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(prims); 2825164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk} 2826164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 282756f9e6f8d5436d50530807950661e66ca5efe2bbTim Murraystatic jint 282856f9e6f8d5436d50530807950661e66ca5efe2bbTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) { 282956f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray return (jint)sizeof(void*); 283056f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray} 283156f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 28320facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wangstatic jobject 28330facf021ea1a0399d956372b9d3ad9025a9a04d2Miao WangnAllocationGetByteBuffer(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 28340facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jlongArray strideArr, jint xBytesSize, 28350facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jint dimY, jint dimZ) { 28360facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (kLogApi) { 28370facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang ALOGD("nAllocationGetByteBuffer, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 28380facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28390facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang 28400facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jlong *jStridePtr = _env->GetLongArrayElements(strideArr, nullptr); 28410facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (jStridePtr == nullptr) { 28420facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang ALOGE("Failed to get Java array elements: strideArr"); 28430facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang return 0; 28440facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 284556f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 28460facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang size_t strideIn = xBytesSize; 28470facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang void* ptr = nullptr; 28480facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (alloc != 0) { 28490facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang ptr = rsAllocationGetPointer((RsContext)con, (RsAllocation)alloc, 0, 28500facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 0, 0, 28510facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang &strideIn, sizeof(size_t)); 28520facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28530facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang 28540facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jobject byteBuffer = nullptr; 28550facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (ptr != nullptr) { 28560facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang size_t bufferSize = strideIn; 28570facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang jStridePtr[0] = strideIn; 28580facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (dimY > 0) { 28590facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang bufferSize *= dimY; 28600facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28610facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang if (dimZ > 0) { 28620facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang bufferSize *= dimZ; 28630facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28640facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang byteBuffer = _env->NewDirectByteBuffer(ptr, (jlong) bufferSize); 28650facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang } 28660facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang _env->ReleaseLongArrayElements(strideArr, jStridePtr, 0); 28670facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang return byteBuffer; 28680facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang} 2869164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// --------------------------------------------------------------------------- 2870164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 2871d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 287294d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript"; 2873d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 287476f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod methods[] = { 28751c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit", "()V", (void*)_nInit }, 28761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2877eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 2878eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 2879eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 2880eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 2881eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 2882eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 28831c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2884eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 2885eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 28862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 28872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 28882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java. 2889eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreate", "(JIII)J", (void*)nContextCreate }, 2890eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreateGL", "(JIIIIIIIIIIIIFI)J", (void*)nContextCreateGL }, 2891eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 2892eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 289347f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{"rsnContextSetCacheDir", "(JLjava/lang/String;)V", (void*)nContextSetCacheDir }, 2894eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetSurface", "(JIILandroid/view/Surface;)V", (void*)nContextSetSurface }, 2895eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 2896eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDump", "(JI)V", (void*)nContextDump }, 2897eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextPause", "(J)V", (void*)nContextPause }, 2898eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextResume", "(J)V", (void*)nContextResume }, 2899eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 2900281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 2901be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 2902281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 2903281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 2904460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAssignName", "(JJ[B)V", (void*)nAssignName }, 2905460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnGetName", "(JJ)Ljava/lang/String;", (void*)nGetName }, 2906460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 2907eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2908460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromFile", "(JLjava/lang/String;)J", (void*)nFileA3DCreateFromFile }, 29090e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream", "(JJ)J", (void*)nFileA3DCreateFromAssetStream }, 2910460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J", (void*)nFileA3DCreateFromAsset }, 2911460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetNumIndexEntries", "(JJ)I", (void*)nFileA3DGetNumIndexEntries }, 2912460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetIndexEntries", "(JJI[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries }, 29130e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex", "(JJI)J", (void*)nFileA3DGetEntryByIndex }, 2914eff663f391fa4f119685d5c14489b94661ea126fTim Murray 29150e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile", "(JLjava/lang/String;FI)J", (void*)nFontCreateFromFile }, 29160e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream", "(JLjava/lang/String;FIJ)J", (void*)nFontCreateFromAssetStream }, 29170e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J", (void*)nFontCreateFromAsset }, 2918eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2919460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 29209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 2921460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementGetNativeData", "(JJ[I)V", (void*)nElementGetNativeData }, 29229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 2923460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2924460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 29259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData", "(JJ[J)V", (void*)nTypeGetNativeData }, 2926460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 29279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 2928460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 2929460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 2930460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 2931460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2932460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 2933460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 2934460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2935460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 29368c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{"rsnAllocationSetupBufferQueue", "(JJI)V", (void*)nAllocationSetupBufferQueue }, 29378c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{"rsnAllocationShareBufferQueue", "(JJJ)V", (void*)nAllocationShareBufferQueue }, 2938460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetSurface", "(JJ)Landroid/view/Surface;", (void*)nAllocationGetSurface }, 2939460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 2940460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 29418c1509249c5552270d8accc2c9512f499a8f5e2dMiao Wang{"rsnAllocationIoReceive", "(JJ)J", (void*)nAllocationIoReceive }, 294287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 2943c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 294487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 2945460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 294687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 2947460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 294887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 294987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 295045cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 295187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 295287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 2953460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 2954460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 2955460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 2956460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 295746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterCreate", "(JJJ)J", (void*)nAllocationAdapterCreate }, 295846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterOffset", "(JJIIIIIIIII)V", (void*)nAllocationAdapterOffset }, 295946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 2960460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptBindAllocation", "(JJJI)V", (void*)nScriptBindAllocation }, 2961460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetTimeZone", "(JJ[B)V", (void*)nScriptSetTimeZone }, 2962460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvoke", "(JJI)V", (void*)nScriptInvoke }, 2963460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV }, 2964be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2965be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEach }, 296636eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala{"rsnScriptReduce", "(JJIJJ[I)V", (void*)nScriptReduce }, 296726ef7a739b724452f93f850a1c268c42e439317bDavid Gross{"rsnScriptReduceNew", "(JJI[JJ[I)V", (void*)nScriptReduceNew }, 2968be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2969460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI }, 2970460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI }, 2971460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarJ", "(JJIJ)V", (void*)nScriptSetVarJ }, 2972460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarJ", "(JJI)J", (void*)nScriptGetVarJ }, 2973460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarF", "(JJIF)V", (void*)nScriptSetVarF }, 2974460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarF", "(JJI)F", (void*)nScriptGetVarF }, 2975460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarD", "(JJID)V", (void*)nScriptSetVarD }, 2976460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarD", "(JJI)D", (void*)nScriptGetVarD }, 2977460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarV", "(JJI[B)V", (void*)nScriptSetVarV }, 2978460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarV", "(JJI[B)V", (void*)nScriptGetVarV }, 2979460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarVE", "(JJI[BJ[I)V", (void*)nScriptSetVarVE }, 2980460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarObj", "(JJIJ)V", (void*)nScriptSetVarObj }, 2981eff663f391fa4f119685d5c14489b94661ea126fTim Murray 29820e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 2983460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptIntrinsicCreate", "(JIJ)J", (void*)nScriptIntrinsicCreate }, 2984460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptKernelIDCreate", "(JJII)J", (void*)nScriptKernelIDCreate }, 2985be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 2986460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate }, 29879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 298835be56cce821d86f69026398ff9433e2d173b02fYang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;Ljava/lang/String;[J)J", (void*)nScriptGroup2Create }, 2989460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 2990460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 2991460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 2992281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 2993eff663f391fa4f119685d5c14489b94661ea126fTim Murray 299425207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Single", "(JJIIIIIIIIIFJJFJIIII)V", (void*)nScriptIntrinsicBLAS_Single }, 299525207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Double", "(JJIIIIIIIIIDJJDJIIII)V", (void*)nScriptIntrinsicBLAS_Double }, 299625207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Complex", "(JJIIIIIIIIIFFJJFFJIIII)V", (void*)nScriptIntrinsicBLAS_Complex }, 299725207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Z", "(JJIIIIIIIIIDDJJDDJIIII)V", (void*)nScriptIntrinsicBLAS_Z }, 299825207df658d6a8a3e885c7017fcc25702363583cTim Murray 29999cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray{"rsnScriptIntrinsicBLAS_BNNM", "(JJIIIJIJIJII)V", (void*)nScriptIntrinsicBLAS_BNNM }, 30009cb16a2f91c79845e5425fbf55f3b679fb18a4ddTim Murray 30010e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate", "(JZZZZZZIII)J", (void*)nProgramStoreCreate }, 3002eff663f391fa4f119685d5c14489b94661ea126fTim Murray 3003460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants }, 3004460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindTexture", "(JJIJ)V", (void*)nProgramBindTexture }, 3005460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindSampler", "(JJIJ)V", (void*)nProgramBindSampler }, 3006eff663f391fa4f119685d5c14489b94661ea126fTim Murray 30079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramFragmentCreate }, 3008460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramRasterCreate", "(JZI)J", (void*)nProgramRasterCreate }, 30099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramVertexCreate }, 3010eff663f391fa4f119685d5c14489b94661ea126fTim Murray 301178c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript", "(JJ)V", (void*)nContextBindRootScript }, 301278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore", "(JJ)V", (void*)nContextBindProgramStore }, 301378c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment", "(JJ)V", (void*)nContextBindProgramFragment }, 301478c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex", "(JJ)V", (void*)nContextBindProgramVertex }, 301578c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster", "(JJ)V", (void*)nContextBindProgramRaster }, 3016eff663f391fa4f119685d5c14489b94661ea126fTim Murray 30170e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 3018eff663f391fa4f119685d5c14489b94661ea126fTim Murray 30199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate", "(J[J[J[I)J", (void*)nMeshCreate }, 3020eff663f391fa4f119685d5c14489b94661ea126fTim Murray 3021460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetVertexBufferCount", "(JJ)I", (void*)nMeshGetVertexBufferCount }, 3022460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetIndexCount", "(JJ)I", (void*)nMeshGetIndexCount }, 30239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices", "(JJ[JI)V", (void*)nMeshGetVertices }, 30249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices", "(JJ[J[II)V", (void*)nMeshGetIndices }, 302580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 302656f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 30270facf021ea1a0399d956372b9d3ad9025a9a04d2Miao Wang{"rsnAllocationGetByteBuffer", "(JJ[JIII)Ljava/nio/ByteBuffer;", (void*)nAllocationGetByteBuffer }, 3028d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 3029d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 3030d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env) 3031d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 3032d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return android::AndroidRuntime::registerNativeMethods( 3033d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams _env, classPathName, methods, NELEM(methods)); 3034d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 3035d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 3036d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 3037d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 3038d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved) 3039d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 3040488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes JNIEnv* env = nullptr; 3041d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams jint result = -1; 3042d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 3043d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 30443762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("ERROR: GetEnv failed\n"); 3045d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 3046d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 3047488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes assert(env != nullptr); 3048d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 3049d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (registerFuncs(env) < 0) { 30500e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGE("ERROR: Renderscript native registration failed\n"); 3051d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 3052d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 3053d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 3054d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams /* success -- return valid version number */ 3055d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams result = JNI_VERSION_1_4; 3056d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 3057d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail: 3058d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return result; 3059d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 3060