android_renderscript_RenderScript.cpp revision 47f31582b67f492d9e1523abd0d8b86c38ec007d
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 24cbe25a86b4aa3353c8016a129028671e902611fStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project 3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License. 6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at 7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software 11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and 14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License. 15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */ 16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams#define LOG_TAG "libRS_jni" 18f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdlib.h> 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdio.h> 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <fcntl.h> 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <unistd.h> 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <math.h> 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <utils/misc.h> 2509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer#include <inttypes.h> 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 27eece0dda56ae29fff6e9003df97594f6ac50b6e2Derek Sollenberger#include <SkBitmap.h> 28ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams 29b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/Asset.h> 30b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h> 31b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h> 32f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h" 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h" 35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h" 36ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h" 37b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h" 38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 391d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rs.h> 401d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rsEnv.h> 41fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams#include <gui/Surface.h> 42d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden#include <gui/GLConsumer.h> 43faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h> 44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 453762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE 4667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampestatic constexpr bool kLogApi = false; 47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 48d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android; 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 5067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampetemplate <typename... T> 5167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampevoid UNUSED(T... t) {} 5267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe 53414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ 54e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams jint len = 0; \ 55488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes void *ptr = nullptr; \ 5687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang void *srcPtr = nullptr; \ 5721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams size_t typeBytes = 0; \ 58414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines jint relFlag = 0; \ 59414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines if (readonly) { \ 60414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines /* The on-release mode should only be JNI_ABORT for read-only accesses. */ \ 6187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang /* readonly = true, also indicates we are copying to the allocation . */ \ 62414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines relFlag = JNI_ABORT; \ 63414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines } \ 64e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams switch(dataType) { \ 65e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_32: \ 66e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jfloatArray)data); \ 67e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetFloatArrayElements((jfloatArray)data, flag); \ 6821659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 6987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 7087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 7187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 7287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 7387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 7487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 7587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 7687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 7787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 7887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 7987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 8087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 8287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 8387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 8487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 8587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 8687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 8787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 88414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag); \ 89e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 90e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_FLOAT_64: \ 91e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jdoubleArray)data); \ 92e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag); \ 9321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 9487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 9587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 9687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 9787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 9887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 9987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 10087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 10187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 10287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 10387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 10487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 10587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 10687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 10787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 10887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 10987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 11087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 11187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 11287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 113414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag); \ 114e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 115e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_8: \ 116e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_8: \ 117e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jbyteArray)data); \ 118e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetByteArrayElements((jbyteArray)data, flag); \ 11921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 1; \ 12087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 12187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 12287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 12387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 12487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 12587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 12687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 12787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 12887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 12987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 13087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 13187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 13287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 13387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 13487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 13587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 13687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 13787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 13887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 139414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag); \ 140e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 141e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_16: \ 142e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_16: \ 143e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jshortArray)data); \ 144e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetShortArrayElements((jshortArray)data, flag); \ 14521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 2; \ 14687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 14787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 14887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 14987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 15087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 15187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 15287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 15387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 15487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 15587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 15687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 15787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 15887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 15987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 16087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 16187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 16287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 16387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 16487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 165414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag); \ 166e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 167e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_32: \ 168e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_32: \ 169e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jintArray)data); \ 170e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetIntArrayElements((jintArray)data, flag); \ 17121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 4; \ 17287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 17387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 17487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 17587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 17687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 17787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 17887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 17987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 18087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 18187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 18287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 18387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 18487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 18587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 18687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 18787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 18887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 18987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 19087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 191414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag); \ 192e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 193e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_SIGNED_64: \ 194e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams case RS_TYPE_UNSIGNED_64: \ 195e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams len = _env->GetArrayLength((jlongArray)data); \ 196e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams ptr = _env->GetLongArrayElements((jlongArray)data, flag); \ 19721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams typeBytes = 8; \ 19887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (usePadding) { \ 19987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang srcPtr = ptr; \ 20087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang len = len / 3 * 4; \ 20187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (count == 0) { \ 20287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang count = len / 4; \ 20387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 20487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = malloc (len * typeBytes); \ 20587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang if (readonly) { \ 20687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithPadding(ptr, srcPtr, mSize, count); \ 20787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 20887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 20987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 21087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang copyWithUnPadding(srcPtr, ptr, mSize, count); \ 21187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 21287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang free(ptr); \ 21387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang ptr = srcPtr; \ 21487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } else { \ 21587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang fnc(__VA_ARGS__); \ 21687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } \ 217414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag); \ 218e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams return; \ 219e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams default: \ 220e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams break; \ 221e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams } \ 22287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang UNUSED(len, ptr, srcPtr, typeBytes, relFlag); \ 223e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams} 224e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 225e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams 226b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 { 227b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic: 2282123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) { 229488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes fCStr = env->GetStringUTFChars(str, nullptr); 230b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fLength = env->GetStringUTFLength(str); 231b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 2322123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringToUTF8() { 233b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fEnv->ReleaseStringUTFChars(fJStr, fCStr); 234b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 235b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* c_str() const { return fCStr; } 236b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize length() const { return fLength; } 237b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 238b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate: 239b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk JNIEnv* fEnv; 240b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fJStr; 241b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk const char* fCStr; 242b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jsize fLength; 243b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}; 244b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 2452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 { 2462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic: 2472123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength) 2482123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk : mEnv(env), mStrings(strings), mStringsLength(stringsLength) { 249488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings = nullptr; 250488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mSizeArray = nullptr; 2512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk if (stringsLength > 0) { 2522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mCStrings = (const char **)calloc(stringsLength, sizeof(char *)); 2532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t)); 2542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct = 0; ct < stringsLength; ct ++) { 2552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 256488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes mCStrings[ct] = mEnv->GetStringUTFChars(s, nullptr); 2572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mSizeArray[ct] = mEnv->GetStringUTFLength(s); 2582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk ~AutoJavaStringArrayToUTF8() { 2622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk for (jsize ct=0; ct < mStringsLength; ct++) { 2632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct); 2642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk mEnv->ReleaseStringUTFChars(s, mCStrings[ct]); 2652123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2662123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mCStrings); 2672123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk free(mSizeArray); 2682123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk } 2692123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **c_str() const { return mCStrings; } 2702123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *c_str_len() const { return mSizeArray; } 2712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize length() const { return mStringsLength; } 2722123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 2732123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate: 2742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk JNIEnv *mEnv; 2752123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jobjectArray mStrings; 2762123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **mCStrings; 2772123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *mSizeArray; 2782123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk jsize mStringsLength; 2792123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk}; 2802123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 281d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 282d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 283ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0; 284ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0; 285d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 286d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this) 287d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 288eff663f391fa4f119685d5c14489b94661ea126fTim Murray gContextId = _env->GetFieldID(_this, "mContext", "J"); 289ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams 290ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams jclass bitmapClass = _env->FindClass("android/graphics/Bitmap"); 29136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J"); 292d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 293d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 294d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 295d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 29687e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) { 29787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytesPad = mSize * 4; 29887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytes = mSize * 3; 29987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 30087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 30187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang for (int i = 0; i < count; i++) { 30287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang memcpy(dst, src, sizeBytes); 30387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang dst += sizeBytesPad; 30487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang src += sizeBytes; 30587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } 30687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang} 30787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 30887e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) { 30987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytesPad = mSize * 4; 31087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int sizeBytes = mSize * 3; 31187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *dst = static_cast<uint8_t *>(ptr); 31287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang uint8_t *src = static_cast<uint8_t *>(srcPtr); 31387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang for (int i = 0; i < count; i++) { 31487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang memcpy(dst, src, sizeBytes); 31587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang dst += sizeBytes; 31687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang src += sizeBytesPad; 31787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang } 31887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang} 31987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 32087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 32187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang// --------------------------------------------------------------------------- 3223eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void 323eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con) 32496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{ 32567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 32667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextFinish, con(%p)", (RsContext)con); 32767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 328eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextFinish((RsContext)con); 32996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams} 33096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams 331281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic jlong 332281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID, 333281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong returnValue, jlongArray fieldIDArray, 334281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray valueArray, jintArray sizeArray, 335281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlongArray depClosureArray, jlongArray depFieldIDArray) { 336281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 337281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 338281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsScriptFieldID* fieldIDs = 339281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length); 340281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i< fieldIDs_length; i++) { 341281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 342281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 343281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 344281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 345281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 346281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length); 347281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < values_length; i++) { 348281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni values[i] = (uintptr_t)jValues[i]; 349281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 350281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 351281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr); 352281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 353281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 354281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jDepClosures = 355281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni _env->GetLongArrayElements(depClosureArray, nullptr); 356281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize depClosures_length = _env->GetArrayLength(depClosureArray); 357281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsClosure* depClosures = 358281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length); 359281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < depClosures_length; i++) { 360281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depClosures[i] = (RsClosure)jDepClosures[i]; 361281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 362281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 363281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jDepFieldIDs = 364281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni _env->GetLongArrayElements(depFieldIDArray, nullptr); 365281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray); 366281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsScriptFieldID* depFieldIDs = 367281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length); 368281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < depClosures_length; i++) { 369281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depFieldIDs[i] = (RsClosure)jDepFieldIDs[i]; 370281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 371281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 372281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni return (jlong)(uintptr_t)rsClosureCreate( 373281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, 374281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length, 3754c93c8c93a66a8932d84a52bd922c3b7ad1565bbYang Ni (int*)sizes, (size_t)sizes_length, 376281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depClosures, (size_t)depClosures_length, 377281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni depFieldIDs, (size_t)depFieldIDs_length); 378281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 379281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 380be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 381be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID, 382be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray, 383be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jintArray sizeArray) { 384be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr); 385be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize jParamLength = _env->GetArrayLength(paramArray); 386be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 387be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr); 388be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray); 389be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni RsScriptFieldID* fieldIDs = 390be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length); 391be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni for (int i = 0; i< fieldIDs_length; i++) { 392be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; 393be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 394be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 395be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr); 396be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize values_length = _env->GetArrayLength(valueArray); 397be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length); 398be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni for (int i = 0; i < values_length; i++) { 399be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni values[i] = (uintptr_t)jValues[i]; 400be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 401be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 402be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr); 403be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni jsize sizes_length = _env->GetArrayLength(sizeArray); 404be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 405be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return (jlong)(uintptr_t)rsInvokeClosureCreate( 406be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, 407be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length, 4084c93c8c93a66a8932d84a52bd922c3b7ad1565bbYang Ni (int*)sizes, (size_t)sizes_length); 409be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 410be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 411281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 412281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 413281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jint index, jlong value, jint size) { 414281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, 415281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (uintptr_t)value, (size_t)size); 416281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 417281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 418281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 419281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, 420281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong fieldID, jlong value, jint size) { 421281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsClosureSetGlobal((RsContext)con, (RsClosure)closureID, 422281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni (RsScriptFieldID)fieldID, (uintptr_t)value, (size_t)size); 423281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 424281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 425281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic long 426281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, 427ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni jstring cacheDir, jlongArray closureArray) { 428ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 429ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni 430281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr); 431281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni jsize numClosures = _env->GetArrayLength(closureArray); 432281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures); 433281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni for (int i = 0; i < numClosures; i++) { 434281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni closures[i] = (RsClosure)jClosures[i]; 435281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni } 436281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 437ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni return (jlong)(uintptr_t)rsScriptGroup2Create( 438ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni (RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length(), 439ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni closures, numClosures); 440281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 441281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 442281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void 443281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) { 444281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni rsScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID); 445281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni} 446281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni 44796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void 44825207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 44925207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 45025207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY, 45125207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 45225207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 45325207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 45425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 45525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 45625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 45725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 45825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 45925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 46025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 46125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 46225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 46325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.f = alpha; 46425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.f = beta; 46525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 46625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 46725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 46825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 46925207df658d6a8a3e885c7017fcc25702363583cTim Murray 47025207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 47125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 47225207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 47325207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 47425207df658d6a8a3e885c7017fcc25702363583cTim Murray 47525207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 47625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 47725207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 47825207df658d6a8a3e885c7017fcc25702363583cTim Murray} 47925207df658d6a8a3e885c7017fcc25702363583cTim Murray 48025207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 48125207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 48225207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 48325207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY, 48425207df658d6a8a3e885c7017fcc25702363583cTim Murray jint KL, jint KU) { 48525207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 48625207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 48725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 48825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 48925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 49025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 49125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 49225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 49325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 49425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 49525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 49625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.d = alpha; 49725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.d = beta; 49825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 49925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 50025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 50125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 50225207df658d6a8a3e885c7017fcc25702363583cTim Murray 50325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 50425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 50525207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 50625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 50725207df658d6a8a3e885c7017fcc25702363583cTim Murray 50825207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 50925207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 51025207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 51125207df658d6a8a3e885c7017fcc25702363583cTim Murray} 51225207df658d6a8a3e885c7017fcc25702363583cTim Murray 51325207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 51425207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 51525207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 51625207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX, 51725207df658d6a8a3e885c7017fcc25702363583cTim Murray jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 51825207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 51925207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 52025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 52125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 52225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 52325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 52425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 52525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 52625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 52725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 52825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 52925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.r = alphaX; 53025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.c.i = alphaY; 53125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.c.r = betaX; 53225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.c.r = betaY; 53325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 53425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 53525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 53625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 53725207df658d6a8a3e885c7017fcc25702363583cTim Murray 53825207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 53925207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 54025207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 54125207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 54225207df658d6a8a3e885c7017fcc25702363583cTim Murray 54325207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 54425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 54525207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 54625207df658d6a8a3e885c7017fcc25702363583cTim Murray} 54725207df658d6a8a3e885c7017fcc25702363583cTim Murray 54825207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 54925207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA, 55025207df658d6a8a3e885c7017fcc25702363583cTim Murray jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K, 55125207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX, 55225207df658d6a8a3e885c7017fcc25702363583cTim Murray jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU) { 55325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsBlasCall call; 55425207df658d6a8a3e885c7017fcc25702363583cTim Murray memset(&call, 0, sizeof(call)); 55525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.func = (RsBlasFunction)func; 55625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transA = (RsBlasTranspose)TransA; 55725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.transB = (RsBlasTranspose)TransB; 55825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.side = (RsBlasSide)Side; 55925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.uplo = (RsBlasUplo)Uplo; 56025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.diag = (RsBlasDiag)Diag; 56125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.M = M; 56225207df658d6a8a3e885c7017fcc25702363583cTim Murray call.N = N; 56325207df658d6a8a3e885c7017fcc25702363583cTim Murray call.K = K; 56425207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.r = alphaX; 56525207df658d6a8a3e885c7017fcc25702363583cTim Murray call.alpha.z.i = alphaY; 56625207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.z.r = betaX; 56725207df658d6a8a3e885c7017fcc25702363583cTim Murray call.beta.z.r = betaY; 56825207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incX = incX; 56925207df658d6a8a3e885c7017fcc25702363583cTim Murray call.incY = incY; 57025207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KL = KL; 57125207df658d6a8a3e885c7017fcc25702363583cTim Murray call.KU = KU; 57225207df658d6a8a3e885c7017fcc25702363583cTim Murray 57325207df658d6a8a3e885c7017fcc25702363583cTim Murray RsAllocation in_allocs[3]; 57425207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[0] = (RsAllocation)A; 57525207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[1] = (RsAllocation)B; 57625207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs[2] = (RsAllocation)C; 57725207df658d6a8a3e885c7017fcc25702363583cTim Murray 57825207df658d6a8a3e885c7017fcc25702363583cTim Murray rsScriptForEachMulti((RsContext)con, (RsScript)id, 0, 57925207df658d6a8a3e885c7017fcc25702363583cTim Murray in_allocs, sizeof(in_allocs), nullptr, 58025207df658d6a8a3e885c7017fcc25702363583cTim Murray &call, sizeof(call), nullptr, 0); 58125207df658d6a8a3e885c7017fcc25702363583cTim Murray} 58225207df658d6a8a3e885c7017fcc25702363583cTim Murray 58325207df658d6a8a3e885c7017fcc25702363583cTim Murray 58425207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void 585460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str) 5863eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{ 58767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 58867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 58967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 5903eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jint len = _env->GetArrayLength(str); 5913eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0); 592eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len); 5933eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT); 5943eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams} 5953eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 596fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring 597460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj) 598fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{ 59967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 60067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj); 60167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 602488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes const char *name = nullptr; 603eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaGetName((RsContext)con, (void *)obj, &name); 604488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if(name == nullptr || strlen(name) == 0) { 605488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes return nullptr; 606581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk } 607fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk return _env->NewStringUTF(name); 608fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk} 609fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk 6107ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void 611460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) 6127ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{ 61367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 61467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); 61567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 616eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsObjDestroy((RsContext)con, (void *)obj); 6177ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams} 6187ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams 6193eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// --------------------------------------------------------------------------- 6203eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 621eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 622d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this) 623d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 62467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 62567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceCreate"); 62667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 6273aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsDeviceCreate(); 628d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 629d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 630d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 6315eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) 632d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 63367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 63467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceDestroy"); 63567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 636d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return rsDeviceDestroy((RsDevice)dev); 637d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 638d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 639ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void 6405eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) 641ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 64267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 64367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); 64467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 645ebfb436a49673693b98469683451bd9ede797557Jason Sams return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); 646ebfb436a49673693b98469683451bd9ede797557Jason Sams} 647ebfb436a49673693b98469683451bd9ede797557Jason Sams 648eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 64981cd2b18bd36285d1843f78418282e1dad156fbdJason SamsnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint flags, jint sdkVer, jint contextType) 650d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 65167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 65267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreate"); 65367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 65481cd2b18bd36285d1843f78418282e1dad156fbdJason Sams return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, 0, sdkVer, (RsContextType)contextType, flags); 655704ff64b099406bb328898a7443921f22dbffd6dJason Sams} 656704ff64b099406bb328898a7443921f22dbffd6dJason Sams 657eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong 6585eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, 6590e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint colorMin, jint colorPref, 6600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint alphaMin, jint alphaPref, 6610e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint depthMin, jint depthPref, 6620e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint stencilMin, jint stencilPref, 6630e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint samplesMin, jint samplesPref, jfloat samplesQ, 6640e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jint dpi) 66511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{ 66611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams RsSurfaceConfig sc; 66711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaMin = alphaMin; 66811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.alphaPref = alphaPref; 66911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorMin = colorMin; 67011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.colorPref = colorPref; 67111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthMin = depthMin; 67211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.depthPref = depthPref; 67311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesMin = samplesMin; 67411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesPref = samplesPref; 67511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams sc.samplesQ = samplesQ; 67611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams 67767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 67867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextCreateGL"); 67967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 6803aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi); 681d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 682d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 683d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 684eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) 6857d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{ 68667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 68767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); 68867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 689eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetPriority((RsContext)con, p); 6907d787b4722eaeb79cab42c36060336e092b77b5fJason Sams} 6917d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 69247f31582b67f492d9e1523abd0d8b86c38ec007dTim Murraystatic void 69347f31582b67f492d9e1523abd0d8b86c38ec007dTim MurraynContextSetCacheDir(JNIEnv *_env, jobject _this, jlong con, jstring cacheDir) 69447f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{ 69547f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 69647f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray 69747f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray if (kLogApi) { 69847f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray ALOGD("ContextSetCacheDir, con(%p), cacheDir(%s)", (RsContext)con, cacheDirUTF.c_str()); 69947f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray } 70047f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray rsContextSetCacheDir((RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length()); 70147f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray} 70247f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray 7037d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 7047d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 7057d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void 706eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd) 707efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{ 70867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 70967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, 71067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (Surface *)wnd); 71167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 712efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 713488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes ANativeWindow * window = nullptr; 714488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (wnd == nullptr) { 715efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 716efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } else { 71764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown window = android_view_Surface_getNativeWindow(_env, wnd).get(); 718efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } 719efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 720eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSetSurface((RsContext)con, width, height, window); 721efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams} 722efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 723efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void 724eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con) 725d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 72667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 72767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDestroy, con(%p)", (RsContext)con); 72867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 729eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDestroy((RsContext)con); 730d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 731d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 732715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void 733eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) 734715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{ 73567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 73667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); 73767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 738715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams rsContextDump((RsContext)con, bits); 739715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams} 740d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 741d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 742eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con) 74365e7aa56f56097418d617663683544c25b3988eaJason Sams{ 74467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 74567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPause, con(%p)", (RsContext)con); 74667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 747eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextPause((RsContext)con); 74865e7aa56f56097418d617663683544c25b3988eaJason Sams} 74965e7aa56f56097418d617663683544c25b3988eaJason Sams 75065e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void 751eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con) 75265e7aa56f56097418d617663683544c25b3988eaJason Sams{ 75367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 75467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextResume, con(%p)", (RsContext)con); 75567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 756eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextResume((RsContext)con); 75765e7aa56f56097418d617663683544c25b3988eaJason Sams} 75865e7aa56f56097418d617663683544c25b3988eaJason Sams 7591c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 7601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring 761eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) 7621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 76367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 76467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con); 76567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 7661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams char buf[1024]; 7671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 7681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 7691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 770eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 77165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams buf, sizeof(buf), 77265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 773edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 7741c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if (!id && receiveLen) { 77509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 7761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 7771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams return _env->NewStringUTF(buf); 7781c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 7791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 780edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint 781eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) 782516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 783516c31911578db8ce53529483c3ded918ac7dc6bJason Sams jint len = _env->GetArrayLength(data); 78467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 78567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); 78667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 787488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = _env->GetIntArrayElements(data, nullptr); 788516c31911578db8ce53529483c3ded918ac7dc6bJason Sams size_t receiveLen; 7891c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 790eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextGetMessage((RsContext)con, 79165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, len * 4, 79265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams &receiveLen, sizeof(receiveLen), 793edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 794516c31911578db8ce53529483c3ded918ac7dc6bJason Sams if (!id && receiveLen) { 79509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGV("message receive buffer too small. %zu", receiveLen); 796516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 797516c31911578db8ce53529483c3ded918ac7dc6bJason Sams _env->ReleaseIntArrayElements(data, ptr, 0); 7980e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 7991c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams} 8001c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 8011c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint 802eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) 8031c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{ 80467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 80567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextPeekMessage, con(%p)", (RsContext)con); 80667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 807488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr); 8081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams size_t receiveLen; 8091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams uint32_t subID; 810eff663f391fa4f119685d5c14489b94661ea126fTim Murray int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen), 811edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams &subID, sizeof(subID)); 8121c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[0] = (jint)subID; 8131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams auxDataPtr[1] = (jint)receiveLen; 8141c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0); 8150e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)id; 816516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 817516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 818eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) 819516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 82067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 82167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextInitToClient, con(%p)", (RsContext)con); 82267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 823eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextInitToClient((RsContext)con); 824516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 825516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 826eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) 827516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{ 82867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 82967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con); 83067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 831eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextDeinitToClient((RsContext)con); 832516c31911578db8ce53529483c3ded918ac7dc6bJason Sams} 833516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 834455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void 835eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data) 836455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{ 837488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *ptr = nullptr; 838455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams jint len = 0; 839455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 840455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams len = _env->GetArrayLength(data); 8414a043c1853c117c1b4c4342e76cd16a5abdc1045Stephen Hines ptr = _env->GetIntArrayElements(data, nullptr); 842455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 84367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 84467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); 84567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 846eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); 847455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams if (data) { 848455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); 849455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams } 850455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams} 851455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 852455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams 853516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 854460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 85567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, 85667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint size) 857d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 85867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 85909993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con, 86067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe type, kind, norm, size); 86167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 86267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, 86367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe norm, size); 864d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 865d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 866460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 867eff663f391fa4f119685d5c14489b94661ea126fTim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con, 8689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _ids, jobjectArray _names, jintArray _arraySizes) 869d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 870718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int fieldCount = _env->GetArrayLength(_ids); 87167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 87267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementCreate2, con(%p)", (RsContext)con); 87367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 874718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 875488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jIds = _env->GetLongArrayElements(_ids, nullptr); 876488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr); 8779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 8789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement)); 8799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t)); 8809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 8819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < fieldCount; i ++) { 8829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat ids[i] = (RsElement)jIds[i]; 8839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat arraySizes[i] = (uint32_t)jArraySizes[i]; 8849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 885718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 8862123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount); 8872123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 8882123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char **nameArray = names.c_str(); 8892123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t *sizeArray = names.c_str_len(); 8902123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 8913aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con, 8929807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (const RsElement *)ids, fieldCount, 8937a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams nameArray, fieldCount * sizeof(size_t), sizeArray, 894e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk (const uint32_t *)arraySizes, fieldCount); 8952123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 8969807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(ids); 8979807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(arraySizes); 8989807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT); 8999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT); 9009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 9013aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)id; 902d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 903d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 904dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 905460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData) 906dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 907dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int dataSize = _env->GetArrayLength(_elementData); 90867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 90967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetNativeData, con(%p)", (RsContext)con); 91067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 911dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 912dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements 913dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(dataSize == 5); 914dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 91578c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath uintptr_t elementData[5]; 916eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize); 917dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 918dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < dataSize; i ++) { 9199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint data = (jint)elementData[i]; 9209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_elementData, i, 1, &data); 921dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 922dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 923dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 924dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 925dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 926460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, 9279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _IDs, 9287d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jobjectArray _names, 9297d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk jintArray _arraySizes) 930dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 9319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uint32_t dataSize = _env->GetArrayLength(_IDs); 93267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 93367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nElementGetSubElements, con(%p)", (RsContext)con); 93467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 935dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 9369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t)); 9379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const char **names = (const char **)malloc(dataSize * sizeof(const char *)); 93878c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t)); 939dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 94067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, 94167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (uint32_t)dataSize); 942dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 9439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(uint32_t i = 0; i < dataSize; i++) { 9443aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong id = (jlong)(uintptr_t)ids[i]; 9459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint arraySize = (jint)arraySizes[i]; 946dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i])); 9479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_IDs, i, 1, &id); 9489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize); 949dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 950dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 951dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(ids); 952dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk free(names); 9537d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk free(arraySizes); 954dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 955dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 956d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 957d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 958460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 959460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, 960b109cc78616abee7291eb42094cd156b5db3355dJason Sams jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) 961d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 96267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 96367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", 96409993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv); 96567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 9663b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams 96767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, 96867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe faces, yuv); 969d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 970d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 971dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void 9729807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData) 973dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 974dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // We are packing 6 items: mDimX; mDimY; mDimZ; 975dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // mDimLOD; mDimFaces; mElement; into typeData 976dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int elementCount = _env->GetArrayLength(_typeData); 977dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 978dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk assert(elementCount == 6); 97967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 98067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con); 98167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 982dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 9839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t typeData[6]; 984eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6); 985dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 986dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(jint i = 0; i < elementCount; i ++) { 9873aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong data = (jlong)(uintptr_t)typeData[i]; 9889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_typeData, i, 1, &data); 989dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 990dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 991dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 992d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 993d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 994460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 99567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, 99667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong pointer) 997d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 99867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 99967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", 100067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); 100167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 100267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type, 100367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocationMipmapControl)mips, 100467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (uint32_t)usage, (uintptr_t)pointer); 1005d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1006d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1007d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1008460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) 10095476b450e50939940dcf3f15c92335cee2fc572dJason Sams{ 101067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 101167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, 101267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe bits); 101367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1014eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); 10155476b450e50939940dcf3f15c92335cee2fc572dJason Sams} 10165476b450e50939940dcf3f15c92335cee2fc572dJason Sams 101772226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject 1018460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a) 1019615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{ 102067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 102167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 102267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1023615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams 102467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, 102567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)a); 102672226e0543461133b9e177a3e78ae50b0c65e797Jason Sams sp<IGraphicBufferProducer> bp = v; 1027488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes v->decStrong(nullptr); 1028fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 102972226e0543461133b9e177a3e78ae50b0c65e797Jason Sams jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp); 103072226e0543461133b9e177a3e78ae50b0c65e797Jason Sams return o; 1031fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams} 1032fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams 1033fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void 1034460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) 1035163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 103667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 103767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con, 103867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, (Surface *)sur); 103967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1040163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1041fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams sp<Surface> s; 1042163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams if (sur != 0) { 104364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown s = android_view_Surface_getSurface(_env, sur); 1044163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams } 1045163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 104667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, 104767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe static_cast<ANativeWindow *>(s.get())); 1048163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1049163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1050163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1051460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1052163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 105367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 105409993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 105567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1056460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray rsAllocationIoSend((RsContext)con, (RsAllocation)alloc); 1057163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1058163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1059163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1060460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1061163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{ 106267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 106309993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 106467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1065460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc); 1066163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams} 1067163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1068163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams 1069163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void 1070460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) 1071f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{ 107267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 107367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); 107467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1075eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); 1076f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams} 1077f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams 1078460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 107967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 108067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 1081fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{ 1082ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams SkBitmap const * nativeBitmap = 108336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 1084ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams const SkBitmap& bitmap(*nativeBitmap); 1085fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 10865476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.lockPixels(); 10875476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 10883aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con, 108965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 109065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, bitmap.getSize(), usage); 10915476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.unlockPixels(); 10925476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 1093ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams} 1094fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams 1095460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 109667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, 109767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jint mip, jobject jbitmap, jint usage) 1098a314551d69098537337c970da615a8f8af58e1f1Tim Murray{ 1099a314551d69098537337c970da615a8f8af58e1f1Tim Murray SkBitmap const * nativeBitmap = 110036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 1101a314551d69098537337c970da615a8f8af58e1f1Tim Murray const SkBitmap& bitmap(*nativeBitmap); 1102a314551d69098537337c970da615a8f8af58e1f1Tim Murray 1103a314551d69098537337c970da615a8f8af58e1f1Tim Murray bitmap.lockPixels(); 1104a314551d69098537337c970da615a8f8af58e1f1Tim Murray const void* ptr = bitmap.getPixels(); 11053aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con, 1106a314551d69098537337c970da615a8f8af58e1f1Tim Murray (RsType)type, (RsAllocationMipmapControl)mip, 11079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (uint32_t)usage, (uintptr_t)ptr); 1108a314551d69098537337c970da615a8f8af58e1f1Tim Murray bitmap.unlockPixels(); 1109a314551d69098537337c970da615a8f8af58e1f1Tim Murray return id; 1110a314551d69098537337c970da615a8f8af58e1f1Tim Murray} 1111a314551d69098537337c970da615a8f8af58e1f1Tim Murray 1112460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 111367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, 111467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jobject jbitmap, jint usage) 111567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{ 111667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk SkBitmap const * nativeBitmap = 111736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 111867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk const SkBitmap& bitmap(*nativeBitmap); 111967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 11205476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.lockPixels(); 11215476b450e50939940dcf3f15c92335cee2fc572dJason Sams const void* ptr = bitmap.getPixels(); 11223aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con, 112365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams (RsType)type, (RsAllocationMipmapControl)mip, 112465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams ptr, bitmap.getSize(), usage); 11255476b450e50939940dcf3f15c92335cee2fc572dJason Sams bitmap.unlockPixels(); 11265476b450e50939940dcf3f15c92335cee2fc572dJason Sams return id; 112767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk} 112867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk 112926ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void 1130460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 113126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{ 113226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk SkBitmap const * nativeBitmap = 113336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 113426ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk const SkBitmap& bitmap(*nativeBitmap); 1135f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int w = bitmap.width(); 1136f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams int h = bitmap.height(); 113726ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk 11384ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.lockPixels(); 11394ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams const void* ptr = bitmap.getPixels(); 1140eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0, 1141304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, 114238faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray w, h, ptr, bitmap.getSize(), 0); 11434ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.unlockPixels(); 11448a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 11458a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 11464ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void 1147460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) 11488a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{ 11494ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams SkBitmap const * nativeBitmap = 115036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); 11514ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams const SkBitmap& bitmap(*nativeBitmap); 11528a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 11534ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.lockPixels(); 11544ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams void* ptr = bitmap.getPixels(); 1155eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize()); 11564ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams bitmap.unlockPixels(); 1157835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk bitmap.notifyPixelsChanged(); 11588a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams} 11598a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 1160414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1161d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1162460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 116387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint count, jobject data, jint sizeBytes, jint dataType, jint mSize, 116487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jboolean usePadding) 1165d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1166e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 116767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 116867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 116967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, 117067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe dataType); 117167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 117287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, 117387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1174d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1175d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1176d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1177c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1178c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint xoff, jint yoff, jint zoff, 1179c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 118049bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{ 118149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams jint len = _env->GetArrayLength(data); 118267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 1183c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang ALOGD("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 1184c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 118567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe sizeBytes); 118667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1187488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1188c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang rsAllocationElementData((RsContext)con, (RsAllocation)alloc, 1189c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang xoff, yoff, zoff, 1190c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang lod, ptr, sizeBytes, compIdx); 119149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 119249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams} 119349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams 1194c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang 1195414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 119649bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void 1197460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 119887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize, 119987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jboolean usePadding) 1200d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 1201e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 1202e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 120367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 120467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 120567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 120667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 120787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h; 120887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, 120987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 1210d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1211d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1212414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1213414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 121440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 1215eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, 1216460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, 1217304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint dstMip, jint dstFace, 1218304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint width, jint height, 1219460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, 1220304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk jint srcMip, jint srcFace) 1221304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{ 122267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 122367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 122467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), dstFace(%i), width(%i), height(%i)," 122567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", 122667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, 122767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 122867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1229304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1230eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy2DRange((RsContext)con, 1231304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)dstAlloc, 1232304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstXoff, dstYoff, 1233304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk dstMip, dstFace, 1234304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk width, height, 1235304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk (RsAllocation)srcAlloc, 1236304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcXoff, srcYoff, 1237304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk srcMip, srcFace); 1238304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk} 1239304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk 1240414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc. 1241304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void 1242460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 124387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType, 124487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1245b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 1246e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 124767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 124867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 124967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 125067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe lod, w, h, d, sizeBytes); 125167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 125287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h * d; 125387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, 125487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1255b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1256b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1257414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation 1258414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc. 1259b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void 1260eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, 1261460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, 1262b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint dstMip, 1263b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint width, jint height, jint depth, 1264460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, 1265b05d689653b1bc94836f716f29e9578677c29075Jason Sams jint srcMip) 1266b05d689653b1bc94836f716f29e9578677c29075Jason Sams{ 126767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 126867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," 126967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " dstMip(%i), width(%i), height(%i)," 127067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", 127167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, 127267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip); 127367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1274b05d689653b1bc94836f716f29e9578677c29075Jason Sams 1275eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationCopy3DRange((RsContext)con, 1276b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)dstAlloc, 1277b05d689653b1bc94836f716f29e9578677c29075Jason Sams dstXoff, dstYoff, dstZoff, dstMip, 1278b05d689653b1bc94836f716f29e9578677c29075Jason Sams width, height, depth, 1279b05d689653b1bc94836f716f29e9578677c29075Jason Sams (RsAllocation)srcAlloc, 1280b05d689653b1bc94836f716f29e9578677c29075Jason Sams srcXoff, srcYoff, srcZoff, srcMip); 1281b05d689653b1bc94836f716f29e9578677c29075Jason Sams} 1282b05d689653b1bc94836f716f29e9578677c29075Jason Sams 128340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 1284414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 128540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void 128687e908dfdece91b5f504386d4901fa3342dc8083Miao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType, 128787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1288fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 128921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 129067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 129167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); 129267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 129387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = 0; 129487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocationRead, false, 129587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, ptr, len * typeBytes); 1296fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1297fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1298414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1299fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1300460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, 130187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint count, jobject data, jint sizeBytes, jint dataType, 130287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1303fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{ 130421659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 130567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 130667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " 130767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); 130867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 130987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocation1DRead, false, 131087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); 1311fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams} 1312fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams 1313c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data. 1314c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void 131545cec0a9711f736df26fd097c6d74834e350f9bcMiao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 1316c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang jint xoff, jint yoff, jint zoff, 131745cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jint lod, jint compIdx, jbyteArray data, jint sizeBytes) 1318c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{ 131945cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jint len = _env->GetArrayLength(data); 1320c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang if (kLogApi) { 132145cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang ALOGD("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " 132245cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, 132345cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang sizeBytes); 1324c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang } 132545cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 132645cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang rsAllocationElementRead((RsContext)con, (RsAllocation)alloc, 132745cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang xoff, yoff, zoff, 1328a7e2509d8da69ab1c9e14b4ce6608786c572209aJason Sams lod, ptr, sizeBytes, compIdx); 132945cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1330c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang} 1331c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang 1332414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data. 1333fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void 1334460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face, 133587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jobject data, jint sizeBytes, jint dataType, 133687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 133740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{ 133821659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocation *alloc = (RsAllocation *)_alloc; 133921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; 134067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 134167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " 134267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); 134367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 134487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h; 134587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(0, rsAllocation2DRead, false, 134687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); 134740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams} 134887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang 1349c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data. 1350c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void 1351c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod, 135287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint w, jint h, jint d, jobject data, int sizeBytes, int dataType, 135387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang jint mSize, jboolean usePadding) 1354c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{ 1355c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang RsAllocation *alloc = (RsAllocation *)_alloc; 1356c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang if (kLogApi) { 1357c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang ALOGD("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," 1358c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, 1359c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang lod, w, h, d, sizeBytes); 1360c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang } 136187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang int count = w * h * d; 136287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang PER_ARRAY_TYPE(nullptr, rsAllocation3DRead, false, 136387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); 1364c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang} 1365d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1366460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1367460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) 1368dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{ 136967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 137067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); 137167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 13723aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a); 1373dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk} 1374dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 13755edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void 1376460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) 13775edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{ 137867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 137967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, 138067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsAllocation)alloc, dimX); 138167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1382eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); 13835edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams} 13845edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams 138546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 138646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic jlong 138746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterCreate(JNIEnv *_env, jobject _this, jlong con, jlong basealloc, jlong type) 138846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 138946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 139046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterCreate, con(%p), base(%p), type(%p)", 139146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)basealloc, (RsElement)type); 139246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 139346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams return (jlong)(uintptr_t) rsAllocationAdapterCreate((RsContext)con, (RsType)type, 139446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsAllocation)basealloc); 139546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 139646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 139746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 139846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic void 139946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterOffset(JNIEnv *_env, jobject _this, jlong con, jlong alloc, 140046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint x, jint y, jint z, jint face, jint lod, 140146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams jint a1, jint a2, jint a3, jint a4) 140246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{ 140346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams uint32_t params[] = { 140446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)x, (uint32_t)y, (uint32_t)z, (uint32_t)face, 140546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (uint32_t)lod, (uint32_t)a1, (uint32_t)a2, (uint32_t)a3, (uint32_t)a4 140646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams }; 140746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (kLogApi) { 140846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams ALOGD("nAllocationAdapterOffset, con(%p), alloc(%p), x(%i), y(%i), z(%i), face(%i), lod(%i), arrays(%i %i %i %i)", 140946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams (RsContext)con, (RsAllocation)alloc, x, y, z, face, lod, a1, a2, a3, a4); 141046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 141146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams rsAllocationAdapterOffset((RsContext)con, (RsAllocation)alloc, 141246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams params, sizeof(params)); 141346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams} 141446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 141546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 1416aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// ----------------------------------- 1417aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1418460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1419460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset) 1420aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1421aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 14220e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", asset); 1423aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 14243aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength()); 1425b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1426b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1427b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1428460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1429eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path) 1430b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1431b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr); 1432488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1433b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1434b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1435b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1436b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1437b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); 1438488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (asset == nullptr) { 1439b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1440b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1441b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 14423aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset); 1443b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1444b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1445b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1446460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1447eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName) 1448b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1449b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 14503aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str()); 1451b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1452aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1453aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1454aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1455460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jint 1456460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D) 1457aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 1458aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int32_t numEntries = 0; 1459eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D); 14600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat return (jint)numEntries; 1461aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1462aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1463aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void 1464460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries) 1465aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 14660e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 1467aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry)); 1468aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1469eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D); 1470aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1471aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk for(jint i = 0; i < numEntries; i ++) { 1472aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName)); 1473aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID); 1474aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 1475aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1476aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk free(fileEntries); 1477aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1478aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 14790e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1480460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index) 1481aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{ 14820e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGV("______nFileA3D %p", (RsFile) fileA3D); 14833aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D); 1484aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return id; 1485aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 1486d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1487d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ----------------------------------- 1488d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 14890e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1490eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con, 1491b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jstring fileName, jfloat fontSize, jint dpi) 14929b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{ 1493b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 fileNameUTF(_env, fileName); 14943aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con, 1495e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fileNameUTF.c_str(), fileNameUTF.length(), 1496e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi); 1497b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1498b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1499b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1500b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 15010e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1502eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, 15030e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jstring name, jfloat fontSize, jint dpi, jlong native_asset) 1504b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1505b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = reinterpret_cast<Asset*>(native_asset); 1506b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 nameUTF(_env, name); 1507b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 15083aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1509e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk nameUTF.c_str(), nameUTF.length(), 1510e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1511b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1512b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return id; 1513b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk} 1514b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 15150e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1516eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path, 1517b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk jfloat fontSize, jint dpi) 1518b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{ 1519b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr); 1520488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (mgr == nullptr) { 1521b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1522b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 1523b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 1524b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 str(_env, _path); 1525b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER); 1526488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (asset == nullptr) { 1527b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return 0; 1528b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 15299b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 15303aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con, 1531e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk str.c_str(), str.length(), 1532e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk fontSize, dpi, 1533b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk asset->getBuffer(false), asset->getLength()); 1534b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk delete asset; 15359b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk return id; 15369b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk} 15379b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 1538bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// ----------------------------------- 1539bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 1540bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void 1541460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot) 1542d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 154367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 154467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, 154567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsScript)script, (RsAllocation)alloc, slot); 154667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1547eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); 1548d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1549d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1550d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1551460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val) 15524d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 155367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 155467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, 155567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 155667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1557eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val); 15584d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 15594d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 15607c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint 1561460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 15627c4caadb939b1563328251c156262c179a685c70Tim Murray{ 156367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 156467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 156567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 15667c4caadb939b1563328251c156262c179a685c70Tim Murray int value = 0; 1567eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 15687c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 15697c4caadb939b1563328251c156262c179a685c70Tim Murray} 15707c4caadb939b1563328251c156262c179a685c70Tim Murray 15714d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1572460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 15736f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{ 157467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 157509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 157667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 157767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1578eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); 15796f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams} 15806f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams 15816f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void 1582460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) 1583031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{ 158467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 158509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, 158667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 158767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1588eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); 1589031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines} 1590031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines 15917c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong 1592460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 15937c4caadb939b1563328251c156262c179a685c70Tim Murray{ 159467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 159567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 159667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 15977c4caadb939b1563328251c156262c179a685c70Tim Murray jlong value = 0; 1598eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 15997c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 16007c4caadb939b1563328251c156262c179a685c70Tim Murray} 16017c4caadb939b1563328251c156262c179a685c70Tim Murray 1602031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void 1603460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val) 16044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 160567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 160667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, 160767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 160867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1609eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val); 16104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 16114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 16127c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat 1613460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 16147c4caadb939b1563328251c156262c179a685c70Tim Murray{ 161567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 161667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 161767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16187c4caadb939b1563328251c156262c179a685c70Tim Murray jfloat value = 0; 1619eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 16207c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 16217c4caadb939b1563328251c156262c179a685c70Tim Murray} 16227c4caadb939b1563328251c156262c179a685c70Tim Murray 16234d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void 1624460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val) 1625ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{ 162667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 162767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, 162867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot, val); 162967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1630eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val); 1631ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines} 1632ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines 16337c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble 1634460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) 16357c4caadb939b1563328251c156262c179a685c70Tim Murray{ 163667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 163767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 163867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16397c4caadb939b1563328251c156262c179a685c70Tim Murray jdouble value = 0; 1640eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); 16417c4caadb939b1563328251c156262c179a685c70Tim Murray return value; 16427c4caadb939b1563328251c156262c179a685c70Tim Murray} 16437c4caadb939b1563328251c156262c179a685c70Tim Murray 1644ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void 1645460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 16464d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{ 164767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 164867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 164967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1651488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1652eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 16534d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 16544d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams} 16554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1656adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void 1657460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 16587c4caadb939b1563328251c156262c179a685c70Tim Murray{ 165967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 166067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 166167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 16627c4caadb939b1563328251c156262c179a685c70Tim Murray jint len = _env->GetArrayLength(data); 1663488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1664eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len); 1665414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines _env->ReleaseByteArrayElements(data, ptr, 0); 16667c4caadb939b1563328251c156262c179a685c70Tim Murray} 16677c4caadb939b1563328251c156262c179a685c70Tim Murray 16687c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void 166967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, 167067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe jlong elem, jintArray dims) 1671adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{ 167267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 167367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 167467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1675adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint len = _env->GetArrayLength(data); 1676488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1677adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); 1678488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr); 1679eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem, 1680bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines (const uint32_t*) dimsPtr, dimsLen); 1681adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1682adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT); 1683adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines} 1684adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines 1685d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1686d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 1687460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone) 1688584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{ 168967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 169067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script); 169167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1692584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1693584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jint length = _env->GetArrayLength(timeZone); 1694584a375df68ed7d62b38389078c6804edf228f9cRomain Guy jbyte* timeZone_ptr; 1695584a375df68ed7d62b38389078c6804edf228f9cRomain Guy timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0); 1696584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1697eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length); 1698584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 1699584a375df68ed7d62b38389078c6804edf228f9cRomain Guy if (timeZone_ptr) { 1700584a375df68ed7d62b38389078c6804edf228f9cRomain Guy _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0); 1701584a375df68ed7d62b38389078c6804edf228f9cRomain Guy } 1702584a375df68ed7d62b38389078c6804edf228f9cRomain Guy} 1703584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 170422534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void 1705460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot) 170622534176fb5c1257130ef4ee589739ca42766a32Jason Sams{ 170767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 170867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); 170967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1710eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvoke((RsContext)con, (RsScript)obj, slot); 171122534176fb5c1257130ef4ee589739ca42766a32Jason Sams} 171222534176fb5c1257130ef4ee589739ca42766a32Jason Sams 1713584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void 1714460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) 1715be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{ 171667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 171767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 171867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 17194d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams jint len = _env->GetArrayLength(data); 1720488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *ptr = _env->GetByteArrayElements(data, nullptr); 1721eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); 17224d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); 1723be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams} 1724be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 17256e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void 1726be7b1defb6b11920703b241ba5815fb09487bb02Chris WailesnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, 1727be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jlongArray ains, jlong aout, jbyteArray params, 1728be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jintArray limits) 17296e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{ 173067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 173167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); 173267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1733949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1734be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint in_len = 0; 1735488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *in_ptr = nullptr; 1736949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1737488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsAllocation *in_allocs = nullptr; 1738949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1739488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 1740be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_len = _env->GetArrayLength(ains); 1741488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes in_ptr = _env->GetLongArrayElements(ains, nullptr); 1742eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 1743be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (sizeof(RsAllocation) == sizeof(jlong)) { 1744be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)in_ptr; 1745949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1746be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } else { 1747be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes // Convert from 64-bit jlong types to the native pointer type. 1748eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes 1749be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation)); 1750be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 1751be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes for (int index = in_len; --index >= 0;) { 1752be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs[index] = (RsAllocation)in_ptr[index]; 1753be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1754be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1755949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 1756949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1757be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint param_len = 0; 1758488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte *param_ptr = nullptr; 1759be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 1760488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 1761be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_len = _env->GetArrayLength(params); 1762488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes param_ptr = _env->GetByteArrayElements(params, nullptr); 1763c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines } 1764949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1765488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes RsScriptCall sc, *sca = nullptr; 1766be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes uint32_t sc_size = 0; 1767949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1768be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes jint limit_len = 0; 1769488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *limit_ptr = nullptr; 1770949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1771488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 1772be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limit_len = _env->GetArrayLength(limits); 1773488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes limit_ptr = _env->GetIntArrayElements(limits, nullptr); 1774949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1775be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes assert(limit_len == 6); 177667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe UNUSED(limit_len); // As the assert might not be compiled. 1777949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1778be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xStart = limit_ptr[0]; 1779be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.xEnd = limit_ptr[1]; 1780be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yStart = limit_ptr[2]; 1781be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.yEnd = limit_ptr[3]; 1782be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zStart = limit_ptr[4]; 1783be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.zEnd = limit_ptr[5]; 1784be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE; 178514331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayStart = 0; 178614331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.arrayEnd = 0; 178714331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2Start = 0; 178814331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array2End = 0; 178914331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3Start = 0; 179014331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array3End = 0; 179114331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4Start = 0; 179214331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams sc.array4End = 0; 1793949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1794be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes sca = ≻ 1795be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1796949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1797be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes rsScriptForEachMulti((RsContext)con, (RsScript)script, slot, 1798be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_allocs, in_len, (RsAllocation)aout, 1799be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes param_ptr, param_len, sca, sc_size); 1800949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1801488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (ains != nullptr) { 1802be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT); 1803949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 1804949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1805488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (params != nullptr) { 1806be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT); 1807eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes } 1808c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines 1809488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes if (limits != nullptr) { 1810be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT); 1811be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 1812949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes} 1813949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 1814fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// ----------------------------------- 1815fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 18160e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 1817eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con, 1818e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jstring resName, jstring cacheDir, 1819e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams jbyteArray scriptRef, jint length) 1820d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 182167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 182267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptCCreate, con(%p)", (RsContext)con); 182367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1824e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 1825e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 resNameUTF(_env, resName); 1826e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); 18270e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat jlong ret = 0; 1828488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jbyte* script_ptr = nullptr; 182943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint _exception = 0; 183043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich jint remaining; 183143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (!scriptRef) { 183243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 18338451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null"); 183443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 183543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 183643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (length < 0) { 183743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 18388451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0"); 183943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 184043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 1841e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams remaining = _env->GetArrayLength(scriptRef); 184243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich if (remaining < length) { 184343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception = 1; 18448451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes //jniThrowException(_env, "java/lang/IllegalArgumentException", 18458451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes // "length > script.length - offset"); 184643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich goto exit; 184743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 1848e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams script_ptr = (jbyte *) 184943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); 185043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich 1851eff663f391fa4f119685d5c14489b94661ea126fTim Murray //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length); 1852e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 18533aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con, 1854e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk resNameUTF.c_str(), resNameUTF.length(), 1855e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk cacheDirUTF.c_str(), cacheDirUTF.length(), 1856e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams (const char *)script_ptr, length); 185739ddc950c9064129ead5de04b200106c0659f937Jason Sams 185843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit: 1859e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams if (script_ptr) { 1860e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr, 186143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich _exception ? JNI_ABORT: 0); 186243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich } 1863d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 18643aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)ret; 1865d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 1866d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1867460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1868460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid) 18696ab97682fd444586ee135912a4210417a1c8781bJason Sams{ 187067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 187167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, 187267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)eid); 187367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18743aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); 18756ab97682fd444586ee135912a4210417a1c8781bJason Sams} 18766ab97682fd444586ee135912a4210417a1c8781bJason Sams 1877460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1878460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig) 187908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 188067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 188167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, 188267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)sid, slot, sig); 188367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 18843aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig); 188508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 188608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1887460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 1888be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 1889be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{ 1890be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni if (kLogApi) { 18917ff53fa0d42795da55b65468e07df82029deda79Elliott Hughes ALOGD("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, 1892be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni (void *)sid, slot); 1893be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 1894be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return (jlong)(uintptr_t)rsScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot); 1895be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni} 1896be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 1897be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong 1898460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) 189908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 190067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 190167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, 190267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe slot); 190367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 19043aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); 190508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 190608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1907460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 19089807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, 19099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jlongArray _dstk, jlongArray _dstf, jlongArray _types) 191008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 191167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 191267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con); 191367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 191408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 19159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint kernelsLen = _env->GetArrayLength(_kernels); 1916488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); 19179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen); 19189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < kernelsLen; ++i) { 19199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i]; 19209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint srcLen = _env->GetArrayLength(_src); 1923488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr); 19249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen); 19259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < srcLen; ++i) { 19269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat srcPtr[i] = (RsScriptKernelID)jSrcPtr[i]; 19279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint dstkLen = _env->GetArrayLength(_dstk); 1930488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr); 19319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen); 19329807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstkLen; ++i) { 19339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i]; 19349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint dstfLen = _env->GetArrayLength(_dstf); 1937488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr); 19389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen); 19399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < dstfLen; ++i) { 19409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i]; 19419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jint typesLen = _env->GetArrayLength(_types); 1944488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr); 19459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen); 19469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < typesLen; ++i) { 19479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat typesPtr[i] = (RsType)jTypesPtr[i]; 19489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 19499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19503aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con, 19519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID), 19529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID), 19539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID), 19549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID), 19559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat (RsType *)typesPtr, typesLen * sizeof(RsType)); 19569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 19579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(kernelsPtr); 19589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(srcPtr); 19599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstkPtr); 19609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(dstfPtr); 19619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(typesPtr); 19629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0); 19639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_src, jSrcPtr, 0); 19649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0); 19659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0); 19669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_types, jTypesPtr, 0); 196708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return id; 196808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 196908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 197008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 1971460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 197208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 197367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 197467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 197567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 197667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1977eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 197808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 197908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 198008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 1981460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) 198208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 198367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 198467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, 198567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (void *)gid, (void *)kid, (void *)alloc); 198667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1987eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); 198808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 198908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 199008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void 1991460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) 199208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{ 199367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 199467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); 199567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 1996eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); 199708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams} 199808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1999d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2000d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 20010e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2002eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con, 2003331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA, 2004331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jboolean depthMask, jboolean ditherEnable, 2005331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint srcFunc, jint destFunc, 2006331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams jint depthFunc) 2007d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 200867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 200967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con); 201067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 20113aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA, 2012331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc, 2013331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc); 2014d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2015d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 20160011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// --------------------------------------------------------------------------- 20170011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 20180011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void 2019460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a) 20200011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{ 202167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 202267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, 202367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramVertex)vpv, slot, (RsAllocation)a); 202467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2025eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a); 20260011bcf57ff711a221a3a4c73f2a79125111647dJason Sams} 202754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 2028d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 2029460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 203054c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{ 203167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 203267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 203367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsAllocation)a); 203467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2035eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a); 203654c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams} 203754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams 203854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void 2039460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) 2040d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 204167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 204267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, 204367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)vpf, slot, (RsSampler)a); 204467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2045eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a); 2046d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2047d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 204868afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// --------------------------------------------------------------------------- 2049d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2050460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2051eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 20529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 20537e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{ 2054b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 2055488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 20567e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams jint paramLen = _env->GetArrayLength(params); 20577e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 20582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 20592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 20602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 20612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 20622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 206367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 206467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 206567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 20667e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 20679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 20689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 20699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 20709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 20713aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 20722123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 20739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 20742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 20759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 20769807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 20777e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams return ret; 20787e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams} 20797e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 20807e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams 20811fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// --------------------------------------------------------------------------- 20821fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 2083460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2084eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, 20859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat jobjectArray texNames, jlongArray params) 20861fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{ 2087b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AutoJavaStringToUTF8 shaderUTF(_env, shader); 2088488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); 20890011bcf57ff711a221a3a4c73f2a79125111647dJason Sams jint paramLen = _env->GetArrayLength(params); 20901fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 209167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 209267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); 209367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2094ee41112e1539de95596600fd2c6dada5d275217fJason Sams 20952123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int texCount = _env->GetArrayLength(texNames); 20962123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); 20972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk const char ** nameArray = names.c_str(); 20982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk size_t* sizeArray = names.c_str_len(); 20992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 21009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); 21019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < paramLen; ++i) { 21029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr[i] = (uintptr_t)jParamPtr[i]; 21039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 21049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 21053aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(), 21062123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk nameArray, texCount, sizeArray, 21079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat paramPtr, paramLen); 21082123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk 21099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(paramPtr); 21109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT); 21110011bcf57ff711a221a3a4c73f2a79125111647dJason Sams return ret; 21121fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams} 21131fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams 2114ebfb436a49673693b98469683451bd9ede797557Jason Sams// --------------------------------------------------------------------------- 2115ebfb436a49673693b98469683451bd9ede797557Jason Sams 2116460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 2117eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull) 2118ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 211967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 212067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, 212167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe pointSprite, cull); 212267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 21233aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull); 2124ebfb436a49673693b98469683451bd9ede797557Jason Sams} 2125ebfb436a49673693b98469683451bd9ede797557Jason Sams 2126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2127d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2128d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2129d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 213078c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script) 2131d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 213267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 213367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script); 213467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2135eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindRootScript((RsContext)con, (RsScript)script); 2136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2137d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2138d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 213978c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs) 2140d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 214167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 214267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs); 214367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2144eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs); 2145d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2146d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2147d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void 214878c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf) 2149d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 215067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 215167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, 215267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe (RsProgramFragment)pf); 215367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2154eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf); 2155d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2156d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 21570826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void 215878c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf) 21590826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{ 216067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 216167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf); 216267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2163eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf); 21640826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams} 21650826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams 2166d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void 216778c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf) 2168ebfb436a49673693b98469683451bd9ede797557Jason Sams{ 216967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 217067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf); 217167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2172eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf); 2173ebfb436a49673693b98469683451bd9ede797557Jason Sams} 2174ebfb436a49673693b98469683451bd9ede797557Jason Sams 2175d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato 217602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// --------------------------------------------------------------------------- 217702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 21780e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong 2179eff663f391fa4f119685d5c14489b94661ea126fTim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, 2180a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk jint wrapS, jint wrapT, jint wrapR, jfloat aniso) 218102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{ 218267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 218367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nSamplerCreate, con(%p)", (RsContext)con); 218467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 21853aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con, 2186a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)magFilter, 2187a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)minFilter, 2188a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapS, 2189a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapT, 2190a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk (RsSamplerValue)wrapR, 2191a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk aniso); 219202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams} 219302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 2194bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// --------------------------------------------------------------------------- 2195bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams 2196460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong 21979807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim) 2198164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{ 219967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 220067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshCreate, con(%p)", (RsContext)con); 220167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 2202164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 220325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint vtxLen = _env->GetArrayLength(_vtx); 2204488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr); 22059807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen); 22069807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < vtxLen; ++i) { 22079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i]; 22089807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 22099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 221025999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint idxLen = _env->GetArrayLength(_idx); 2211488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr); 22129807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen); 22139807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat for(int i = 0; i < idxLen; ++i) { 22149807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i]; 22159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat } 22169807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat 221725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk jint primLen = _env->GetArrayLength(_prim); 2218488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes jint *primPtr = _env->GetIntArrayElements(_prim, nullptr); 2219164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 22203aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray jlong id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con, 222125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk (RsAllocation *)vtxPtr, vtxLen, 222225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk (RsAllocation *)idxPtr, idxLen, 222325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk (uint32_t *)primPtr, primLen); 222480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 22259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(vtxPtr); 22269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat free(idxPtr); 22279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0); 22289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0); 222925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk _env->ReleaseIntArrayElements(_prim, primPtr, 0); 223025999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk return id; 22319d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk} 22329d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk 223380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2234460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 223580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 223667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 223767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 223867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 223980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint vtxCount = 0; 2240eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount); 224180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return vtxCount; 224280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 224380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 224480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint 2245460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) 224680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 224767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 224867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 224967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 225080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk jint idxCount = 0; 2251eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount); 225280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk return idxCount; 225380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 225480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 225580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 22569807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs) 225780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 225867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 225967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 226067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 226180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 226280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation)); 2263eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs); 226480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 226580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numVtxIDs; i ++) { 22663aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 22679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_ids, i, 1, &alloc); 226880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 226980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 227080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 227180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk} 227280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 227380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void 22749807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices) 227580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{ 227667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe if (kLogApi) { 227767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); 227867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe } 227980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 228080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation)); 228180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t)); 228280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 2283eff663f391fa4f119685d5c14489b94661ea126fTim Murray rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices); 228480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 228580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk for(jint i = 0; i < numIndices; i ++) { 22863aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray const jlong alloc = (jlong)(uintptr_t)allocs[i]; 22879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat const jint prim = (jint)prims[i]; 22889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetLongArrayRegion(_idxIds, i, 1, &alloc); 22899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat _env->SetIntArrayRegion(_primitives, i, 1, &prim); 229080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 229180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 229280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(allocs); 229380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk free(prims); 2294164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk} 2295164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 229656f9e6f8d5436d50530807950661e66ca5efe2bbTim Murraystatic jint 229756f9e6f8d5436d50530807950661e66ca5efe2bbTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) { 229856f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray return (jint)sizeof(void*); 229956f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray} 230056f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 230156f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray 2302164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// --------------------------------------------------------------------------- 2303164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 2304d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 230594d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript"; 2306d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2307d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = { 23081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit", "()V", (void*)_nInit }, 23091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2310eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceCreate", "()J", (void*)nDeviceCreate }, 2311eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceDestroy", "(J)V", (void*)nDeviceDestroy }, 2312eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceSetConfig", "(JII)V", (void*)nDeviceSetConfig }, 2313eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetUserMessage", "(J[I)I", (void*)nContextGetUserMessage }, 2314eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetErrorMessage", "(J)Ljava/lang/String;", (void*)nContextGetErrorMessage }, 2315eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextPeekMessage", "(J[I)I", (void*)nContextPeekMessage }, 23161c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 2317eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextInitToClient", "(J)V", (void*)nContextInitToClient }, 2318eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextDeinitToClient", "(J)V", (void*)nContextDeinitToClient }, 23192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 23202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 23212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java. 2322eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreate", "(JIII)J", (void*)nContextCreate }, 2323eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreateGL", "(JIIIIIIIIIIIIFI)J", (void*)nContextCreateGL }, 2324eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextFinish", "(J)V", (void*)nContextFinish }, 2325eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetPriority", "(JI)V", (void*)nContextSetPriority }, 232647f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{"rsnContextSetCacheDir", "(JLjava/lang/String;)V", (void*)nContextSetCacheDir }, 2327eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetSurface", "(JIILandroid/view/Surface;)V", (void*)nContextSetSurface }, 2328eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDestroy", "(J)V", (void*)nContextDestroy }, 2329eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDump", "(JI)V", (void*)nContextDump }, 2330eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextPause", "(J)V", (void*)nContextPause }, 2331eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextResume", "(J)V", (void*)nContextResume }, 2332eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSendMessage", "(JI[I)V", (void*)nContextSendMessage }, 2333281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate }, 2334be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnInvokeClosureCreate", "(JJ[B[J[J[I)J", (void*)nInvokeClosureCreate }, 2335281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg }, 2336281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal }, 2337460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAssignName", "(JJ[B)V", (void*)nAssignName }, 2338460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnGetName", "(JJ)Ljava/lang/String;", (void*)nGetName }, 2339460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnObjDestroy", "(JJ)V", (void*)nObjDestroy }, 2340eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2341460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromFile", "(JLjava/lang/String;)J", (void*)nFileA3DCreateFromFile }, 23420e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream", "(JJ)J", (void*)nFileA3DCreateFromAssetStream }, 2343460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J", (void*)nFileA3DCreateFromAsset }, 2344460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetNumIndexEntries", "(JJ)I", (void*)nFileA3DGetNumIndexEntries }, 2345460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetIndexEntries", "(JJI[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries }, 23460e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex", "(JJI)J", (void*)nFileA3DGetEntryByIndex }, 2347eff663f391fa4f119685d5c14489b94661ea126fTim Murray 23480e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile", "(JLjava/lang/String;FI)J", (void*)nFontCreateFromFile }, 23490e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream", "(JLjava/lang/String;FIJ)J", (void*)nFontCreateFromAssetStream }, 23500e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset", "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J", (void*)nFontCreateFromAsset }, 2351eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2352460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementCreate", "(JJIZI)J", (void*)nElementCreate }, 23539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2", "(J[J[Ljava/lang/String;[I)J", (void*)nElementCreate2 }, 2354460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementGetNativeData", "(JJ[I)V", (void*)nElementGetNativeData }, 23559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements", "(JJ[J[Ljava/lang/String;[I)V", (void*)nElementGetSubElements }, 2356460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2357460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnTypeCreate", "(JJIIIZZI)J", (void*)nTypeCreate }, 23589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData", "(JJ[J)V", (void*)nTypeGetNativeData }, 2359460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 23609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped", "(JJIIJ)J", (void*)nAllocationCreateTyped }, 2361460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateFromBitmap", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateFromBitmap }, 2362460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateBitmapBackedAllocation", "(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCreateBitmapBackedAllocation }, 2363460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J", (void*)nAllocationCubeCreateFromBitmap }, 2364460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2365460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyFromBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap }, 2366460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyToBitmap", "(JJLandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, 2367460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 2368460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSyncAll", "(JJI)V", (void*)nAllocationSyncAll }, 2369460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetSurface", "(JJ)Landroid/view/Surface;", (void*)nAllocationGetSurface }, 2370460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSetSurface", "(JJLandroid/view/Surface;)V", (void*)nAllocationSetSurface }, 2371460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoSend", "(JJ)V", (void*)nAllocationIoSend }, 2372460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoReceive", "(JJ)V", (void*)nAllocationIoReceive }, 237387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData1D }, 2374c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{"rsnAllocationElementData", "(JJIIIII[BI)V", (void*)nAllocationElementData }, 237587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData2D }, 2376460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D", "(JJIIIIIIJIIII)V", (void*)nAllocationData2D_alloc }, 237787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationData3D }, 2378460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, 237987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, 238087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, 238145cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, 238287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, 238387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, 2384460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, 2385460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationResize1D", "(JJI)V", (void*)nAllocationResize1D }, 2386460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGenerateMipmaps", "(JJ)V", (void*)nAllocationGenerateMipmaps }, 2387460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray 238846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterCreate", "(JJJ)J", (void*)nAllocationAdapterCreate }, 238946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterOffset", "(JJIIIIIIIII)V", (void*)nAllocationAdapterOffset }, 239046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 2391460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptBindAllocation", "(JJJI)V", (void*)nScriptBindAllocation }, 2392460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetTimeZone", "(JJ[B)V", (void*)nScriptSetTimeZone }, 2393460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvoke", "(JJI)V", (void*)nScriptInvoke }, 2394460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV }, 2395be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2396be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEach }, 2397be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 2398460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI }, 2399460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI }, 2400460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarJ", "(JJIJ)V", (void*)nScriptSetVarJ }, 2401460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarJ", "(JJI)J", (void*)nScriptGetVarJ }, 2402460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarF", "(JJIF)V", (void*)nScriptSetVarF }, 2403460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarF", "(JJI)F", (void*)nScriptGetVarF }, 2404460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarD", "(JJID)V", (void*)nScriptSetVarD }, 2405460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarD", "(JJI)D", (void*)nScriptGetVarD }, 2406460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarV", "(JJI[B)V", (void*)nScriptSetVarV }, 2407460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarV", "(JJI[B)V", (void*)nScriptGetVarV }, 2408460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarVE", "(JJI[BJ[I)V", (void*)nScriptSetVarVE }, 2409460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarObj", "(JJIJ)V", (void*)nScriptSetVarObj }, 2410eff663f391fa4f119685d5c14489b94661ea126fTim Murray 24110e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate", "(JLjava/lang/String;Ljava/lang/String;[BI)J", (void*)nScriptCCreate }, 2412460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptIntrinsicCreate", "(JIJ)J", (void*)nScriptIntrinsicCreate }, 2413460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptKernelIDCreate", "(JJII)J", (void*)nScriptKernelIDCreate }, 2414be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate }, 2415460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate }, 24169807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate }, 2417ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni{"rsnScriptGroup2Create", "(JLjava/lang/String;[J)J", (void*)nScriptGroup2Create }, 2418460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput }, 2419460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput }, 2420460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute }, 2421281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnScriptGroup2Execute", "(JJ)V", (void*)nScriptGroup2Execute }, 2422eff663f391fa4f119685d5c14489b94661ea126fTim Murray 242325207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Single", "(JJIIIIIIIIIFJJFJIIII)V", (void*)nScriptIntrinsicBLAS_Single }, 242425207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Double", "(JJIIIIIIIIIDJJDJIIII)V", (void*)nScriptIntrinsicBLAS_Double }, 242525207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Complex", "(JJIIIIIIIIIFFJJFFJIIII)V", (void*)nScriptIntrinsicBLAS_Complex }, 242625207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Z", "(JJIIIIIIIIIDDJJDDJIIII)V", (void*)nScriptIntrinsicBLAS_Z }, 242725207df658d6a8a3e885c7017fcc25702363583cTim Murray 24280e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate", "(JZZZZZZIII)J", (void*)nProgramStoreCreate }, 2429eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2430460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants }, 2431460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindTexture", "(JJIJ)V", (void*)nProgramBindTexture }, 2432460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindSampler", "(JJIJ)V", (void*)nProgramBindSampler }, 2433eff663f391fa4f119685d5c14489b94661ea126fTim Murray 24349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramFragmentCreate }, 2435460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramRasterCreate", "(JZI)J", (void*)nProgramRasterCreate }, 24369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate", "(JLjava/lang/String;[Ljava/lang/String;[J)J", (void*)nProgramVertexCreate }, 2437eff663f391fa4f119685d5c14489b94661ea126fTim Murray 243878c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript", "(JJ)V", (void*)nContextBindRootScript }, 243978c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore", "(JJ)V", (void*)nContextBindProgramStore }, 244078c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment", "(JJ)V", (void*)nContextBindProgramFragment }, 244178c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex", "(JJ)V", (void*)nContextBindProgramVertex }, 244278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster", "(JJ)V", (void*)nContextBindProgramRaster }, 2443eff663f391fa4f119685d5c14489b94661ea126fTim Murray 24440e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate", "(JIIIIIF)J", (void*)nSamplerCreate }, 2445eff663f391fa4f119685d5c14489b94661ea126fTim Murray 24469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate", "(J[J[J[I)J", (void*)nMeshCreate }, 2447eff663f391fa4f119685d5c14489b94661ea126fTim Murray 2448460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetVertexBufferCount", "(JJ)I", (void*)nMeshGetVertexBufferCount }, 2449460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetIndexCount", "(JJ)I", (void*)nMeshGetIndexCount }, 24509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices", "(JJ[JI)V", (void*)nMeshGetVertices }, 24519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices", "(JJ[J[II)V", (void*)nMeshGetIndices }, 245280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 245356f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray{"rsnSystemGetPointerSize", "()I", (void*)nSystemGetPointerSize }, 2454d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 2455d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2456d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env) 2457d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2458d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return android::AndroidRuntime::registerNativeMethods( 2459d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams _env, classPathName, methods, NELEM(methods)); 2460d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2461d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2462d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 2463d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2464d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved) 2465d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2466488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes JNIEnv* env = nullptr; 2467d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams jint result = -1; 2468d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2469d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 24703762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("ERROR: GetEnv failed\n"); 2471d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 2472d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 2473488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes assert(env != nullptr); 2474d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2475d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams if (registerFuncs(env) < 0) { 24760e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat ALOGE("ERROR: Renderscript native registration failed\n"); 2477d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams goto bail; 2478d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 2479d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2480d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams /* success -- return valid version number */ 2481d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams result = JNI_VERSION_1_4; 2482d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2483d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail: 2484d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return result; 2485d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 2486