android_renderscript_RenderScript.cpp revision 25207df658d6a8a3e885c7017fcc25702363583c
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>
4352800617946c456e78ed010c82d0ec4358368164Mathias Agopian#include <gui/Surface.h>
44faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h>
45d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
463762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE
4767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampestatic constexpr bool kLogApi = false;
48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
5167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampetemplate <typename... T>
5267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampevoid UNUSED(T... t) {}
5367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe
54414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) {                                      \
55e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    jint len = 0;                                                                       \
56488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    void *ptr = 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. */      \
61414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        relFlag = JNI_ABORT;                                                            \
62414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    }                                                                                   \
63e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    switch(dataType) {                                                                  \
64e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_FLOAT_32:                                                              \
65e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jfloatArray)data);                                  \
66e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetFloatArrayElements((jfloatArray)data, flag);                     \
6721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 4;                                                                  \
68e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
69414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag);     \
70e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
71e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_FLOAT_64:                                                              \
72e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jdoubleArray)data);                                 \
73e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag);                   \
7421659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 8;                                                                  \
75e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
76414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag);  \
77e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
78e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_8:                                                              \
79e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_8:                                                            \
80e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jbyteArray)data);                                   \
81e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetByteArrayElements((jbyteArray)data, flag);                       \
8221659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 1;                                                                  \
83e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
84414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag);         \
85e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
86e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_16:                                                             \
87e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_16:                                                           \
88e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jshortArray)data);                                  \
89e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetShortArrayElements((jshortArray)data, flag);                     \
9021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 2;                                                                  \
91e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
92414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag);     \
93e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
94e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_32:                                                             \
95e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_32:                                                           \
96e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jintArray)data);                                    \
97e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetIntArrayElements((jintArray)data, flag);                         \
9821659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 4;                                                                  \
99e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
100414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag);           \
101e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
102e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_64:                                                             \
103e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_64:                                                           \
104e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jlongArray)data);                                   \
105e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetLongArrayElements((jlongArray)data, flag);                       \
10621659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 8;                                                                  \
107e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
108414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag);        \
109e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
110e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    default:                                                                            \
111e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        break;                                                                          \
112e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    }                                                                                   \
11367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    UNUSED(len, ptr, typeBytes, relFlag);                                               \
114e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams}
115e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams
116e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams
117b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 {
118b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic:
1192123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
120488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        fCStr = env->GetStringUTFChars(str, nullptr);
121b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fLength = env->GetStringUTFLength(str);
122b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1232123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringToUTF8() {
124b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
125b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
126b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* c_str() const { return fCStr; }
127b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize length() const { return fLength; }
128b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
129b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate:
130b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    JNIEnv*     fEnv;
131b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jstring     fJStr;
132b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* fCStr;
133b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize       fLength;
134b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk};
135b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1362123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 {
1372123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic:
1382123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
1392123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
140488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        mCStrings = nullptr;
141488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        mSizeArray = nullptr;
1422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        if (stringsLength > 0) {
1432123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
1442123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
1452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            for (jsize ct = 0; ct < stringsLength; ct ++) {
1462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
147488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes                mCStrings[ct] = mEnv->GetStringUTFChars(s, nullptr);
1482123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
1492123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            }
1502123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
1512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
1522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringArrayToUTF8() {
1532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        for (jsize ct=0; ct < mStringsLength; ct++) {
1542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
1552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
1562123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
1572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mCStrings);
1582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mSizeArray);
1592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
1602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **c_str() const { return mCStrings; }
1612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *c_str_len() const { return mSizeArray; }
1622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize length() const { return mStringsLength; }
1632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
1642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate:
1652123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    JNIEnv      *mEnv;
1662123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jobjectArray mStrings;
1672123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **mCStrings;
1682123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t      *mSizeArray;
1692123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize        mStringsLength;
1702123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk};
1712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
172d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
173d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
174ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
175ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
176d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
177d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
178d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
179eff663f391fa4f119685d5c14489b94661ea126fTim Murray    gContextId             = _env->GetFieldID(_this, "mContext", "J");
180ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
181ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
18236bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J");
183d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
184d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
185d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
186d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1873eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
188eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con)
18996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
19067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
19167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextFinish, con(%p)", (RsContext)con);
19267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
193eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextFinish((RsContext)con);
19496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
19596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
196281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic jlong
197281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID,
198281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni               jlong returnValue, jlongArray fieldIDArray,
199281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni               jlongArray valueArray, jintArray sizeArray,
200281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni               jlongArray depClosureArray, jlongArray depFieldIDArray) {
201281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
202281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
203281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  RsScriptFieldID* fieldIDs =
204281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
205281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  for (int i = 0; i< fieldIDs_length; i++) {
206281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni    fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
207281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  }
208281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
209281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
210281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize values_length = _env->GetArrayLength(valueArray);
211281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
212281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  for (int i = 0; i < values_length; i++) {
213281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni    values[i] = (uintptr_t)jValues[i];
214281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  }
215281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
216281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
217281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize sizes_length = _env->GetArrayLength(sizeArray);
218281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
219281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jlong* jDepClosures =
220281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      _env->GetLongArrayElements(depClosureArray, nullptr);
221281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize depClosures_length = _env->GetArrayLength(depClosureArray);
222281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  RsClosure* depClosures =
223281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length);
224281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  for (int i = 0; i < depClosures_length; i++) {
225281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni    depClosures[i] = (RsClosure)jDepClosures[i];
226281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  }
227281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
228281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jlong* jDepFieldIDs =
229281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      _env->GetLongArrayElements(depFieldIDArray, nullptr);
230281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray);
231281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  RsScriptFieldID* depFieldIDs =
232281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length);
233281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  for (int i = 0; i < depClosures_length; i++) {
234281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni    depFieldIDs[i] = (RsClosure)jDepFieldIDs[i];
235281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  }
236281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
237281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  return (jlong)(uintptr_t)rsClosureCreate(
238281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue,
239281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
240281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      (size_t*)sizes, (size_t)sizes_length,
241281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      depClosures, (size_t)depClosures_length,
242281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      depFieldIDs, (size_t)depFieldIDs_length);
243281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni}
244281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
245be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong
246be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID,
247be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni                     jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray,
248be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni                     jintArray sizeArray) {
249be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr);
250be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jsize jParamLength = _env->GetArrayLength(paramArray);
251be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
252be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
253be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
254be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  RsScriptFieldID* fieldIDs =
255be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
256be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  for (int i = 0; i< fieldIDs_length; i++) {
257be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni    fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
258be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  }
259be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
260be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
261be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jsize values_length = _env->GetArrayLength(valueArray);
262be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
263be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  for (int i = 0; i < values_length; i++) {
264be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni    values[i] = (uintptr_t)jValues[i];
265be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  }
266be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
267be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
268be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jsize sizes_length = _env->GetArrayLength(sizeArray);
269be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
270be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  return (jlong)(uintptr_t)rsInvokeClosureCreate(
271be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni      (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength,
272be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni      fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
273be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni      (size_t*)sizes, (size_t)sizes_length);
274be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni}
275be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
276281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void
277281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
278281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni               jint index, jlong value, jint size) {
279281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index,
280281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni                  (uintptr_t)value, (size_t)size);
281281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni}
282281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
283281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void
284281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
285281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni                  jlong fieldID, jlong value, jint size) {
286281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  rsClosureSetGlobal((RsContext)con, (RsClosure)closureID,
287281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni                     (RsScriptFieldID)fieldID, (uintptr_t)value, (size_t)size);
288281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni}
289281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
290281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic long
291281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con,
292ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni                    jstring cacheDir, jlongArray closureArray) {
293ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni  AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
294ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni
295281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr);
296281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize numClosures = _env->GetArrayLength(closureArray);
297281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
298281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  for (int i = 0; i < numClosures; i++) {
299281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni    closures[i] = (RsClosure)jClosures[i];
300281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  }
301281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
302ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni  return (jlong)(uintptr_t)rsScriptGroup2Create(
303ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni      (RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length(),
304ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni      closures, numClosures);
305281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni}
306281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
307281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void
308281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) {
309281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  rsScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID);
310281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni}
311281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
31296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
31325207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA,
31425207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
31525207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY,
31625207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jint KL, jint KU) {
31725207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsBlasCall call;
31825207df658d6a8a3e885c7017fcc25702363583cTim Murray    memset(&call, 0, sizeof(call));
31925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.func = (RsBlasFunction)func;
32025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transA = (RsBlasTranspose)TransA;
32125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transB = (RsBlasTranspose)TransB;
32225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.side = (RsBlasSide)Side;
32325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.uplo = (RsBlasUplo)Uplo;
32425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.diag = (RsBlasDiag)Diag;
32525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.M = M;
32625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.N = N;
32725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.K = K;
32825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.f = alpha;
32925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.f = beta;
33025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incX = incX;
33125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incY = incY;
33225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KL = KL;
33325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KU = KU;
33425207df658d6a8a3e885c7017fcc25702363583cTim Murray
33525207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsAllocation in_allocs[3];
33625207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[0] = (RsAllocation)A;
33725207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[1] = (RsAllocation)B;
33825207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[2] = (RsAllocation)C;
33925207df658d6a8a3e885c7017fcc25702363583cTim Murray
34025207df658d6a8a3e885c7017fcc25702363583cTim Murray    rsScriptForEachMulti((RsContext)con, (RsScript)id, 0,
34125207df658d6a8a3e885c7017fcc25702363583cTim Murray                         in_allocs, sizeof(in_allocs), nullptr,
34225207df658d6a8a3e885c7017fcc25702363583cTim Murray                         &call, sizeof(call), nullptr, 0);
34325207df658d6a8a3e885c7017fcc25702363583cTim Murray}
34425207df658d6a8a3e885c7017fcc25702363583cTim Murray
34525207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void
34625207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA,
34725207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
34825207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY,
34925207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jint KL, jint KU) {
35025207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsBlasCall call;
35125207df658d6a8a3e885c7017fcc25702363583cTim Murray    memset(&call, 0, sizeof(call));
35225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.func = (RsBlasFunction)func;
35325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transA = (RsBlasTranspose)TransA;
35425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transB = (RsBlasTranspose)TransB;
35525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.side = (RsBlasSide)Side;
35625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.uplo = (RsBlasUplo)Uplo;
35725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.diag = (RsBlasDiag)Diag;
35825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.M = M;
35925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.N = N;
36025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.K = K;
36125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.d = alpha;
36225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.d = beta;
36325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incX = incX;
36425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incY = incY;
36525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KL = KL;
36625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KU = KU;
36725207df658d6a8a3e885c7017fcc25702363583cTim Murray
36825207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsAllocation in_allocs[3];
36925207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[0] = (RsAllocation)A;
37025207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[1] = (RsAllocation)B;
37125207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[2] = (RsAllocation)C;
37225207df658d6a8a3e885c7017fcc25702363583cTim Murray
37325207df658d6a8a3e885c7017fcc25702363583cTim Murray    rsScriptForEachMulti((RsContext)con, (RsScript)id, 0,
37425207df658d6a8a3e885c7017fcc25702363583cTim Murray                         in_allocs, sizeof(in_allocs), nullptr,
37525207df658d6a8a3e885c7017fcc25702363583cTim Murray                         &call, sizeof(call), nullptr, 0);
37625207df658d6a8a3e885c7017fcc25702363583cTim Murray}
37725207df658d6a8a3e885c7017fcc25702363583cTim Murray
37825207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void
37925207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA,
38025207df658d6a8a3e885c7017fcc25702363583cTim Murray                             jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
38125207df658d6a8a3e885c7017fcc25702363583cTim Murray                             jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX,
38225207df658d6a8a3e885c7017fcc25702363583cTim Murray                             jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU) {
38325207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsBlasCall call;
38425207df658d6a8a3e885c7017fcc25702363583cTim Murray    memset(&call, 0, sizeof(call));
38525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.func = (RsBlasFunction)func;
38625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transA = (RsBlasTranspose)TransA;
38725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transB = (RsBlasTranspose)TransB;
38825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.side = (RsBlasSide)Side;
38925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.uplo = (RsBlasUplo)Uplo;
39025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.diag = (RsBlasDiag)Diag;
39125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.M = M;
39225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.N = N;
39325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.K = K;
39425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.c.r = alphaX;
39525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.c.i = alphaY;
39625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.c.r = betaX;
39725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.c.r = betaY;
39825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incX = incX;
39925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incY = incY;
40025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KL = KL;
40125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KU = KU;
40225207df658d6a8a3e885c7017fcc25702363583cTim Murray
40325207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsAllocation in_allocs[3];
40425207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[0] = (RsAllocation)A;
40525207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[1] = (RsAllocation)B;
40625207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[2] = (RsAllocation)C;
40725207df658d6a8a3e885c7017fcc25702363583cTim Murray
40825207df658d6a8a3e885c7017fcc25702363583cTim Murray    rsScriptForEachMulti((RsContext)con, (RsScript)id, 0,
40925207df658d6a8a3e885c7017fcc25702363583cTim Murray                         in_allocs, sizeof(in_allocs), nullptr,
41025207df658d6a8a3e885c7017fcc25702363583cTim Murray                         &call, sizeof(call), nullptr, 0);
41125207df658d6a8a3e885c7017fcc25702363583cTim Murray}
41225207df658d6a8a3e885c7017fcc25702363583cTim Murray
41325207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void
41425207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA,
41525207df658d6a8a3e885c7017fcc25702363583cTim Murray                       jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
41625207df658d6a8a3e885c7017fcc25702363583cTim Murray                       jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX,
41725207df658d6a8a3e885c7017fcc25702363583cTim Murray                       jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU) {
41825207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsBlasCall call;
41925207df658d6a8a3e885c7017fcc25702363583cTim Murray    memset(&call, 0, sizeof(call));
42025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.func = (RsBlasFunction)func;
42125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transA = (RsBlasTranspose)TransA;
42225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transB = (RsBlasTranspose)TransB;
42325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.side = (RsBlasSide)Side;
42425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.uplo = (RsBlasUplo)Uplo;
42525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.diag = (RsBlasDiag)Diag;
42625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.M = M;
42725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.N = N;
42825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.K = K;
42925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.z.r = alphaX;
43025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.z.i = alphaY;
43125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.z.r = betaX;
43225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.z.r = betaY;
43325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incX = incX;
43425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incY = incY;
43525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KL = KL;
43625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KU = KU;
43725207df658d6a8a3e885c7017fcc25702363583cTim Murray
43825207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsAllocation in_allocs[3];
43925207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[0] = (RsAllocation)A;
44025207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[1] = (RsAllocation)B;
44125207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[2] = (RsAllocation)C;
44225207df658d6a8a3e885c7017fcc25702363583cTim Murray
44325207df658d6a8a3e885c7017fcc25702363583cTim Murray    rsScriptForEachMulti((RsContext)con, (RsScript)id, 0,
44425207df658d6a8a3e885c7017fcc25702363583cTim Murray                         in_allocs, sizeof(in_allocs), nullptr,
44525207df658d6a8a3e885c7017fcc25702363583cTim Murray                         &call, sizeof(call), nullptr, 0);
44625207df658d6a8a3e885c7017fcc25702363583cTim Murray}
44725207df658d6a8a3e885c7017fcc25702363583cTim Murray
44825207df658d6a8a3e885c7017fcc25702363583cTim Murray
44925207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void
450460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str)
4513eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
45267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
45367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
45467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
4553eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
4563eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
457eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len);
4583eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
4593eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
4603eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
461fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
462460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj)
463fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
46467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
46567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
46667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
467488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    const char *name = nullptr;
468eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaGetName((RsContext)con, (void *)obj, &name);
469488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if(name == nullptr || strlen(name) == 0) {
470488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        return nullptr;
471581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
472fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
473fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
474fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
4757ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
476460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
4777ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
47867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
47967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
48067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
481eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsObjDestroy((RsContext)con, (void *)obj);
4827ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
4837ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
4843eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
4853eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
486eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
487d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
488d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
48967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
49067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nDeviceCreate");
49167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
4923aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsDeviceCreate();
493d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
494d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
495d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
4965eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
497d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
49867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
49967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nDeviceDestroy");
50067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
501d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
502d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
503d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
504ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
5055eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
506ebfb436a49673693b98469683451bd9ede797557Jason Sams{
50767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
50867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
50967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
510ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
511ebfb436a49673693b98469683451bd9ede797557Jason Sams}
512ebfb436a49673693b98469683451bd9ede797557Jason Sams
513eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
51481cd2b18bd36285d1843f78418282e1dad156fbdJason SamsnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint flags, jint sdkVer, jint contextType)
515d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
51667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
51767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextCreate");
51867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
51981cd2b18bd36285d1843f78418282e1dad156fbdJason Sams    return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, 0, sdkVer, (RsContextType)contextType, flags);
520704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
521704ff64b099406bb328898a7443921f22dbffd6dJason Sams
522eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
5235eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
5240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint colorMin, jint colorPref,
5250e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint alphaMin, jint alphaPref,
5260e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint depthMin, jint depthPref,
5270e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint stencilMin, jint stencilPref,
5280e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint samplesMin, jint samplesPref, jfloat samplesQ,
5290e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint dpi)
53011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
53111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
53211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
53311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
53411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
53511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
53611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
53711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
53811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
53911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
54011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
54111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
54267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
54367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextCreateGL");
54467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
5453aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
546d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
547d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
548d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
549eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
5507d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
55167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
55267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
55367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
554eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSetPriority((RsContext)con, p);
5557d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
5567d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
5577d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
5587d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
5597d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
560eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd)
561efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
56267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
56367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con,
56467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              width, height, (Surface *)wnd);
56567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
566efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
567488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    ANativeWindow * window = nullptr;
568488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (wnd == nullptr) {
569efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
570efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
57164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        window = android_view_Surface_getNativeWindow(_env, wnd).get();
572efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
573efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
574eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSetSurface((RsContext)con, width, height, window);
575efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
576efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
577efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
578eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con)
579d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
58067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
58167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextDestroy, con(%p)", (RsContext)con);
58267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
583eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextDestroy((RsContext)con);
584d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
585d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
586715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
587eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
588715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
58967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
59067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
59167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
592715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
593715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
594d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
595d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
596eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con)
59765e7aa56f56097418d617663683544c25b3988eaJason Sams{
59867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
59967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextPause, con(%p)", (RsContext)con);
60067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
601eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextPause((RsContext)con);
60265e7aa56f56097418d617663683544c25b3988eaJason Sams}
60365e7aa56f56097418d617663683544c25b3988eaJason Sams
60465e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
605eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con)
60665e7aa56f56097418d617663683544c25b3988eaJason Sams{
60767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
60867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextResume, con(%p)", (RsContext)con);
60967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
610eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextResume((RsContext)con);
61165e7aa56f56097418d617663683544c25b3988eaJason Sams}
61265e7aa56f56097418d617663683544c25b3988eaJason Sams
6131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
6141c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
615eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
6161c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
61767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
61867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con);
61967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
6201c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
6211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
6221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
6231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
624eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextGetMessage((RsContext)con,
62565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 buf, sizeof(buf),
62665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
627edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
6281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
62909993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGV("message receive buffer too small.  %zu", receiveLen);
6301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
6311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
6321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
6331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
634edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint
635eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
636516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
637516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
63867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
63967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
64067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
641488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *ptr = _env->GetIntArrayElements(data, nullptr);
642516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
6431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
644eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextGetMessage((RsContext)con,
64565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 ptr, len * 4,
64665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
647edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
648516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
64909993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGV("message receive buffer too small.  %zu", receiveLen);
650516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
651516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
6520e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
6531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
6541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
6551c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
656eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
6571c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
65867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
65967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextPeekMessage, con(%p)", (RsContext)con);
66067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
661488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr);
6621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
6631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
664eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
665edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                  &subID, sizeof(subID));
6661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
6671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
6681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
6690e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
670516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
671516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
672eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
673516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
67467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
67567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextInitToClient, con(%p)", (RsContext)con);
67667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
677eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextInitToClient((RsContext)con);
678516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
679516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
680eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
681516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
68267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
68367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con);
68467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
685eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextDeinitToClient((RsContext)con);
686516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
687516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
688455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void
689eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
690455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{
691488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *ptr = nullptr;
692455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    jint len = 0;
693455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
694455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        len = _env->GetArrayLength(data);
6954a043c1853c117c1b4c4342e76cd16a5abdc1045Stephen Hines        ptr = _env->GetIntArrayElements(data, nullptr);
696455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
69767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
69867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
69967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
700eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
701455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
702455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
703455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
704455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams}
705455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
706455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
707516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
708460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
70967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm,
71067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe               jint size)
711d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
71267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
71309993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con,
71467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              type, kind, norm, size);
71567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
71667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind,
71767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                             norm, size);
718d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
719d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
720460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
721eff663f391fa4f119685d5c14489b94661ea126fTim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con,
7229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
723d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
724718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
72567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
72667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nElementCreate2, con(%p)", (RsContext)con);
72767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
728718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
729488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jIds = _env->GetLongArrayElements(_ids, nullptr);
730488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr);
7319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
7329807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
7339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
7349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
7359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < fieldCount; i ++) {
7369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        ids[i] = (RsElement)jIds[i];
7379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        arraySizes[i] = (uint32_t)jArraySizes[i];
7389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
739718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
7402123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
7412123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
7422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **nameArray = names.c_str();
7432123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *sizeArray = names.c_str_len();
7442123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
7453aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con,
7469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                     (const RsElement *)ids, fieldCount,
7477a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
748e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
7492123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
7509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(ids);
7519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(arraySizes);
7529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
7539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
7549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
7553aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)id;
756d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
757d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
758dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
759460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData)
760dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
761dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
76267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
76367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nElementGetNativeData, con(%p)", (RsContext)con);
76467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
765dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
766dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
767dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
768dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
76978c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uintptr_t elementData[5];
770eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize);
771dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
772dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
7739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint data = (jint)elementData[i];
7749807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_elementData, i, 1, &data);
775dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
776dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
777dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
778dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
779dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
780460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
7819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jlongArray _IDs,
7827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jobjectArray _names,
7837d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _arraySizes)
784dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
7859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t dataSize = _env->GetArrayLength(_IDs);
78667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
78767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nElementGetSubElements, con(%p)", (RsContext)con);
78867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
789dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
7909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t));
7919807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    const char **names = (const char **)malloc(dataSize * sizeof(const char *));
79278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t));
793dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
79467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes,
79567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                             (uint32_t)dataSize);
796dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
7979807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(uint32_t i = 0; i < dataSize; i++) {
7983aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong id = (jlong)(uintptr_t)ids[i];
7999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint arraySize = (jint)arraySizes[i];
800dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
8019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_IDs, i, 1, &id);
8029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
803dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
804dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
805dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
806dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
8077d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    free(arraySizes);
808dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
809dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
810d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
811d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
812460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
813460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
814b109cc78616abee7291eb42094cd156b5db3355dJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
815d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
81667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
81767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
81809993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer              (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv);
81967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
8203b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
82167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips,
82267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                          faces, yuv);
823d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
824d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
825dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
8269807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData)
827dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
828dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
829dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
830dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
831dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
832dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
83367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
83467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con);
83567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
836dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
8379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t typeData[6];
838eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6);
839dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
840dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
8413aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong data = (jlong)(uintptr_t)typeData[i];
8429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_typeData, i, 1, &data);
843dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
844dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
845dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
846d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
847d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
848460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
84967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage,
85067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                       jlong pointer)
851d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
85267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
85367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)",
85467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
85567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
85667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type,
85767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                                      (RsAllocationMipmapControl)mips,
85867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                                      (uint32_t)usage, (uintptr_t)pointer);
859d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
860d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
861d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
862460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
8635476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
86467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
86567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a,
86667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              bits);
86767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
868eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
8695476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
8705476b450e50939940dcf3f15c92335cee2fc572dJason Sams
87172226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject
872460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a)
873615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{
87467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
87567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
87667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
877615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
87867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con,
87967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                                                                 (RsAllocation)a);
88072226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    sp<IGraphicBufferProducer> bp = v;
881488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    v->decStrong(nullptr);
882fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
88372226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp);
88472226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    return o;
885fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams}
886fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
887fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void
888460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
889163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
89067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
89167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con,
89267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsAllocation)alloc, (Surface *)sur);
89367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
894163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
895fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    sp<Surface> s;
896163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    if (sur != 0) {
89764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        s = android_view_Surface_getSurface(_env, sur);
898163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
899163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
90067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc,
90167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                           static_cast<ANativeWindow *>(s.get()));
902163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
903163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
904163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
905460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
906163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
90767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
90809993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
90967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
910460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray    rsAllocationIoSend((RsContext)con, (RsAllocation)alloc);
911163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
912163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
913163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
914460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
915163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
91667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
91709993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
91867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
919460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray    rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc);
920163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
921163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
922163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
923163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
924460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
925f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
92667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
92767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
92867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
929eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
930f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
931f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
932460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
93367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
93467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                            jobject jbitmap, jint usage)
935fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
936ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
93736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
938ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
939fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
9405476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
9415476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
9423aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con,
94365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  (RsType)type, (RsAllocationMipmapControl)mip,
94465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  ptr, bitmap.getSize(), usage);
9455476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
9465476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
947ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
948fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
949460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
95067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type,
95167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                        jint mip, jobject jbitmap, jint usage)
952a314551d69098537337c970da615a8f8af58e1f1Tim Murray{
953a314551d69098537337c970da615a8f8af58e1f1Tim Murray    SkBitmap const * nativeBitmap =
95436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
955a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const SkBitmap& bitmap(*nativeBitmap);
956a314551d69098537337c970da615a8f8af58e1f1Tim Murray
957a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.lockPixels();
958a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const void* ptr = bitmap.getPixels();
9593aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con,
960a314551d69098537337c970da615a8f8af58e1f1Tim Murray                                            (RsType)type, (RsAllocationMipmapControl)mip,
9619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                            (uint32_t)usage, (uintptr_t)ptr);
962a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.unlockPixels();
963a314551d69098537337c970da615a8f8af58e1f1Tim Murray    return id;
964a314551d69098537337c970da615a8f8af58e1f1Tim Murray}
965a314551d69098537337c970da615a8f8af58e1f1Tim Murray
966460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
96767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
96867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                jobject jbitmap, jint usage)
96967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
97067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
97136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
97267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
97367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
9745476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
9755476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
9763aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con,
97765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      (RsType)type, (RsAllocationMipmapControl)mip,
97865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      ptr, bitmap.getSize(), usage);
9795476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
9805476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
98167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
98267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
98326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
984460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
98526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
98626ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
98736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
98826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
989f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
990f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
99126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
9924ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
9934ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
994eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0,
995304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                       0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
99638faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray                       w, h, ptr, bitmap.getSize(), 0);
9974ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
9988a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
9998a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
10004ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
1001460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
10028a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
10034ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
100436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
10054ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
10068a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
10074ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
10084ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
1009eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize());
10104ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
1011835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk    bitmap.notifyPixelsChanged();
10128a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
10138a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
1014414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
1015d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1016460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
10170e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                  jint count, jobject data, jint sizeBytes, jint dataType)
1018d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1019e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
102067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
102167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
102267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes,
102367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              dataType);
102467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
102567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, (RsContext)con, alloc, offset, lod, count,
102667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                   ptr, sizeBytes);
1027d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1028d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1029414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java array data into the Allocation pointed to by alloc.
1030d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10310e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat//    native void rsnAllocationElementData1D(long con, long id, int xoff, int compIdx, byte[] d, int sizeBytes);
103267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod,
103367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                         jint compIdx, jbyteArray data, jint sizeBytes)
103449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
103549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
103667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
103767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), "
103867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len,
103967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              sizeBytes);
104067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1041488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1042eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
104349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
104449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
104549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
1046414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
104749bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
1048460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
10490e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                  jint w, jint h, jobject data, jint sizeBytes, jint dataType)
1050d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1051e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
1052e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
105367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
105467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
105567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
105667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1057488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
1058d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1059d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1060414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation
1061414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc.
106240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
1063eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
1064460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff,
1065304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstMip, jint dstFace,
1066304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint width, jint height,
1067460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff,
1068304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcMip, jint srcFace)
1069304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{
107067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
107167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
107267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " dstMip(%i), dstFace(%i), width(%i), height(%i),"
107367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
107467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
107567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
107667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1077304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
1078eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopy2DRange((RsContext)con,
1079304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)dstAlloc,
1080304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstXoff, dstYoff,
1081304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
1082304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
1083304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)srcAlloc,
1084304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcXoff, srcYoff,
1085304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
1086304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk}
1087304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
1088414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
1089304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void
1090460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
1091e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams                    jint w, jint h, jint d, jobject data, int sizeBytes, int dataType)
1092b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
1093e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
109467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
109567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i),"
109667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
109767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              lod, w, h, d, sizeBytes);
109867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1099488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
1100b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
1101b05d689653b1bc94836f716f29e9578677c29075Jason Sams
1102414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation
1103414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc.
1104b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void
1105eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
1106460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
1107b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint dstMip,
1108b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint width, jint height, jint depth,
1109460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
1110b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint srcMip)
1111b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
111267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
111367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
111467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " dstMip(%i), width(%i), height(%i),"
111567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
111667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip,
111767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip);
111867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1119b05d689653b1bc94836f716f29e9578677c29075Jason Sams
1120eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopy3DRange((RsContext)con,
1121b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)dstAlloc,
1122b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstXoff, dstYoff, dstZoff, dstMip,
1123b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            width, height, depth,
1124b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)srcAlloc,
1125b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            srcXoff, srcYoff, srcZoff, srcMip);
1126b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
1127b05d689653b1bc94836f716f29e9578677c29075Jason Sams
112840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
1129414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
113040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
1131460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType)
1132fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
113321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
113467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
113567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
113667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1137414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(0, rsAllocationRead, false, (RsContext)con, alloc, ptr, len * typeBytes);
1138fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
1139fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
1140414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
1141fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
1142460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
114321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams                  jint count, jobject data, int sizeBytes, int dataType)
1144fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
114521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
114667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
114767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
114867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType);
114967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1150414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(0, rsAllocation1DRead, false, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
1151fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
1152fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
1153414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
1154fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
1155460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
115621659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams                  jint w, jint h, jobject data, int sizeBytes, int dataType)
115740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
115821659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
115921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
116067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
116167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
116267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
116367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
116467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    PER_ARRAY_TYPE(0, rsAllocation2DRead, false, (RsContext)con, alloc, xoff, yoff, lod, face, w, h,
116567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                   ptr, sizeBytes, 0);
116640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
1167d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1168460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1169460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
1170dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
117167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
117267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
117367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
11743aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a);
1175dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
1176dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
11775edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
1178460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
11795edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
118067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
118167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con,
118267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsAllocation)alloc, dimX);
118367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1184eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
11855edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
11865edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
118746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
118846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic jlong
118946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterCreate(JNIEnv *_env, jobject _this, jlong con, jlong basealloc, jlong type)
119046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{
119146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    if (kLogApi) {
119246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams        ALOGD("nAllocationAdapterCreate, con(%p), base(%p), type(%p)",
119346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams              (RsContext)con, (RsAllocation)basealloc, (RsElement)type);
119446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    }
119546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    return (jlong)(uintptr_t) rsAllocationAdapterCreate((RsContext)con, (RsType)type,
119646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams                                                        (RsAllocation)basealloc);
119746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
119846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams}
119946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
120046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic void
120146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterOffset(JNIEnv *_env, jobject _this, jlong con, jlong alloc,
120246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams                        jint x, jint y, jint z, jint face, jint lod,
120346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams                        jint a1, jint a2, jint a3, jint a4)
120446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{
120546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    uint32_t params[] = {
120646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams        (uint32_t)x, (uint32_t)y, (uint32_t)z, (uint32_t)face,
120746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams        (uint32_t)lod, (uint32_t)a1, (uint32_t)a2, (uint32_t)a3, (uint32_t)a4
120846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    };
120946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    if (kLogApi) {
121046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams        ALOGD("nAllocationAdapterOffset, con(%p), alloc(%p), x(%i), y(%i), z(%i), face(%i), lod(%i), arrays(%i %i %i %i)",
121146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams              (RsContext)con, (RsAllocation)alloc, x, y, z, face, lod, a1, a2, a3, a4);
121246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    }
121346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    rsAllocationAdapterOffset((RsContext)con, (RsAllocation)alloc,
121446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams                              params, sizeof(params));
121546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams}
121646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
121746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
1218aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
1219aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1220460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1221460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset)
1222aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
1223aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
12240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", asset);
1225aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
12263aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
1227b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
1228b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
1229b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1230460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1231eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
1232b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
1233b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
1234488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (mgr == nullptr) {
1235b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
1236b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1237b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1238b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
1239b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
1240488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (asset == nullptr) {
1241b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
1242b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1243b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
12443aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset);
1245b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
1246b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
1247b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1248460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1249eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
1250b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
1251b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
12523aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
1253b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1254aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
1255aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
1256aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1257460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jint
1258460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
1259aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
1260aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
1261eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
12620e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)numEntries;
1263aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
1264aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1265aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
1266460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
1267aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
12680e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
1269aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
1270aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1271eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
1272aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1273aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
1274aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
1275aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
1276aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
1277aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1278aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
1279aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
1280aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
12810e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1282460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
1283aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
12840e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
12853aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
1286aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
1287aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
1288d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1289d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
1290d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
12910e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1292eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
1293b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
12949b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
1295b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
12963aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con,
1297e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
1298e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
1299b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1300b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
1301b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
1302b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
13030e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1304eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
13050e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                           jstring name, jfloat fontSize, jint dpi, jlong native_asset)
1306b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
1307b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
1308b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
1309b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
13103aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con,
1311e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
1312e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
1313b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
1314b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
1315b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
1316b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
13170e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1318eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
1319b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
1320b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
1321b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
1322488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (mgr == nullptr) {
1323b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
1324b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1325b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1326b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
1327b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
1328488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (asset == nullptr) {
1329b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
1330b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
13319b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
13323aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con,
1333e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
1334e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
1335b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
1336b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
13379b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
13389b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
13399b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
1340bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
1341bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
1342bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
1343460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
1344d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
134567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
134667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con,
134767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsScript)script, (RsAllocation)alloc, slot);
134867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1349eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
1350d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1351d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1352d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1353460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
13544d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
135567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
135667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script,
135767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
135867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1359eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
13604d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
13614d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
13627c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint
1363460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
13647c4caadb939b1563328251c156262c179a685c70Tim Murray{
136567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
136667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
136767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
13687c4caadb939b1563328251c156262c179a685c70Tim Murray    int value = 0;
1369eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
13707c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
13717c4caadb939b1563328251c156262c179a685c70Tim Murray}
13727c4caadb939b1563328251c156262c179a685c70Tim Murray
13734d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
1374460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
13756f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
137667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
137709993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script,
137867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
137967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1380eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
13816f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
13826f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
13836f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
1384460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
1385031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
138667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
138709993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script,
138867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
138967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1390eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
1391031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
1392031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
13937c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong
1394460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
13957c4caadb939b1563328251c156262c179a685c70Tim Murray{
139667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
139767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
139867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
13997c4caadb939b1563328251c156262c179a685c70Tim Murray    jlong value = 0;
1400eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
14017c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
14027c4caadb939b1563328251c156262c179a685c70Tim Murray}
14037c4caadb939b1563328251c156262c179a685c70Tim Murray
1404031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
1405460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
14064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
140767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
140867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script,
140967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
141067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1411eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
14124d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
14134d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
14147c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat
1415460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
14167c4caadb939b1563328251c156262c179a685c70Tim Murray{
141767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
141867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
141967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
14207c4caadb939b1563328251c156262c179a685c70Tim Murray    jfloat value = 0;
1421eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
14227c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
14237c4caadb939b1563328251c156262c179a685c70Tim Murray}
14247c4caadb939b1563328251c156262c179a685c70Tim Murray
14254d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
1426460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
1427ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
142867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
142967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script,
143067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
143167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1432eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
1433ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
1434ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
14357c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble
1436460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
14377c4caadb939b1563328251c156262c179a685c70Tim Murray{
143867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
143967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
144067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
14417c4caadb939b1563328251c156262c179a685c70Tim Murray    jdouble value = 0;
1442eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
14437c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
14447c4caadb939b1563328251c156262c179a685c70Tim Murray}
14457c4caadb939b1563328251c156262c179a685c70Tim Murray
1446ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
1447460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
14484d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
144967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
145067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
145167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
14524d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
1453488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1454eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
14554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
14564d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
14574d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1458adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void
1459460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
14607c4caadb939b1563328251c156262c179a685c70Tim Murray{
146167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
146267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
146367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
14647c4caadb939b1563328251c156262c179a685c70Tim Murray    jint len = _env->GetArrayLength(data);
1465488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1466eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
1467414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    _env->ReleaseByteArrayElements(data, ptr, 0);
14687c4caadb939b1563328251c156262c179a685c70Tim Murray}
14697c4caadb939b1563328251c156262c179a685c70Tim Murray
14707c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void
147167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data,
147267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                jlong elem, jintArray dims)
1473adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{
147467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
147567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
147667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1477adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint len = _env->GetArrayLength(data);
1478488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1479adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1480488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr);
1481eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
1482bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines                     (const uint32_t*) dimsPtr, dimsLen);
1483adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1484adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1485adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines}
1486adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines
1487d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1488d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1489460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
1490584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
149167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
149267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
149367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1494584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1495584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
1496584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
1497584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1498584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1499eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
1500584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1501584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
1502584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1503584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
1504584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
1505584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
150622534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
1507460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
150822534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
150967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
151067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
151167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1512eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
151322534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
151422534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1515584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
1516460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
1517be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
151867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
151967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
152067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
15214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
1522488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1523eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
15244d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1525be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
1526be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
15276e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
1528be7b1defb6b11920703b241ba5815fb09487bb02Chris WailesnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot,
1529be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes               jlongArray ains, jlong aout, jbyteArray params,
1530be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes               jintArray limits)
15316e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
153267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
153367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
153467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1535949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1536be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint   in_len = 0;
1537488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *in_ptr = nullptr;
1538949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1539488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    RsAllocation *in_allocs = nullptr;
1540949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1541488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (ains != nullptr) {
1542be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        in_len = _env->GetArrayLength(ains);
1543488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        in_ptr = _env->GetLongArrayElements(ains, nullptr);
1544eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes
1545be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        if (sizeof(RsAllocation) == sizeof(jlong)) {
1546be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            in_allocs = (RsAllocation*)in_ptr;
1547949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1548be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        } else {
1549be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            // Convert from 64-bit jlong types to the native pointer type.
1550eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes
1551be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation));
1552be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1553be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            for (int index = in_len; --index >= 0;) {
1554be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                in_allocs[index] = (RsAllocation)in_ptr[index];
1555be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            }
1556be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        }
1557949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1558949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1559be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint   param_len = 0;
1560488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *param_ptr = nullptr;
1561be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1562488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (params != nullptr) {
1563be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        param_len = _env->GetArrayLength(params);
1564488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        param_ptr = _env->GetByteArrayElements(params, nullptr);
1565c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines    }
1566949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1567488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    RsScriptCall sc, *sca = nullptr;
1568be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    uint32_t sc_size = 0;
1569949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1570be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint  limit_len = 0;
1571488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *limit_ptr = nullptr;
1572949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1573488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (limits != nullptr) {
1574be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        limit_len = _env->GetArrayLength(limits);
1575488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        limit_ptr = _env->GetIntArrayElements(limits, nullptr);
1576949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1577be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        assert(limit_len == 6);
157867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        UNUSED(limit_len);  // As the assert might not be compiled.
1579949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1580be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.xStart     = limit_ptr[0];
1581be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.xEnd       = limit_ptr[1];
1582be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.yStart     = limit_ptr[2];
1583be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.yEnd       = limit_ptr[3];
1584be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.zStart     = limit_ptr[4];
1585be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.zEnd       = limit_ptr[5];
1586be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.strategy   = RS_FOR_EACH_STRATEGY_DONT_CARE;
158714331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.arrayStart = 0;
158814331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.arrayEnd = 0;
158914331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array2Start = 0;
159014331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array2End = 0;
159114331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array3Start = 0;
159214331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array3End = 0;
159314331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array4Start = 0;
159414331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array4End = 0;
1595949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1596be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sca = &sc;
1597be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    }
1598949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1599be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    rsScriptForEachMulti((RsContext)con, (RsScript)script, slot,
1600be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                         in_allocs, in_len, (RsAllocation)aout,
1601be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                         param_ptr, param_len, sca, sc_size);
1602949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1603488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (ains != nullptr) {
1604be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
1605949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1606949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1607488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (params != nullptr) {
1608be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT);
1609eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes    }
1610c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines
1611488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (limits != nullptr) {
1612be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT);
1613be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    }
1614949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes}
1615949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1616fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
1617fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
16180e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1619eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
1620e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
1621e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
1622d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
162367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
162467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptCCreate, con(%p)", (RsContext)con);
162567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1626e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
1627e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
1628e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
16290e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong ret = 0;
1630488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte* script_ptr = nullptr;
163143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
163243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
163343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
163443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
16358451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
163643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
163743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
163843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
163943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
16408451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
164143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
164243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1643e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
164443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
164543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
16468451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
16478451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
164843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
164943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1650e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
165143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
165243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
1653eff663f391fa4f119685d5c14489b94661ea126fTim Murray    //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
1654e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
16553aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con,
1656e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
1657e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
1658e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
165939ddc950c9064129ead5de04b200106c0659f937Jason Sams
166043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
1661e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
1662e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
166343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
166443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1665d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
16663aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)ret;
1667d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1668d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1669460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1670460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
16716ab97682fd444586ee135912a4210417a1c8781bJason Sams{
167267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
167367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id,
167467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)eid);
167567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
16763aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
16776ab97682fd444586ee135912a4210417a1c8781bJason Sams}
16786ab97682fd444586ee135912a4210417a1c8781bJason Sams
1679460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1680460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
168108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
168267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
168367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con,
168467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)sid, slot, sig);
168567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
16863aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
168708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
168808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1689460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1690be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
1691be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{
1692be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni    if (kLogApi) {
16937ff53fa0d42795da55b65468e07df82029deda79Elliott Hughes        ALOGD("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con,
1694be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni              (void *)sid, slot);
1695be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni    }
1696be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni    return (jlong)(uintptr_t)rsScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot);
1697be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni}
1698be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
1699be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong
1700460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
170108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
170267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
170367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid,
170467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot);
170567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
17063aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
170708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
170808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1709460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
17109807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
17119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlongArray _dstk, jlongArray _dstf, jlongArray _types)
171208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
171367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
171467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con);
171567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
171608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
17179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint kernelsLen = _env->GetArrayLength(_kernels);
1718488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr);
17199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
17209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < kernelsLen; ++i) {
17219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
17229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
17239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
17249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint srcLen = _env->GetArrayLength(_src);
1725488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr);
17269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
17279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < srcLen; ++i) {
17289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
17299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
17309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
17319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstkLen = _env->GetArrayLength(_dstk);
1732488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr);
17339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
17349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstkLen; ++i) {
17359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
17369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
17379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
17389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstfLen = _env->GetArrayLength(_dstf);
1739488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr);
17409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
17419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstfLen; ++i) {
17429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
17439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
17449807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
17459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint typesLen = _env->GetArrayLength(_types);
1746488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr);
17479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
17489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < typesLen; ++i) {
17499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        typesPtr[i] = (RsType)jTypesPtr[i];
17509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
17519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
17523aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con,
17539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
17549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
17559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
17569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
17579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsType *)typesPtr, typesLen * sizeof(RsType));
17589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
17599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(kernelsPtr);
17609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(srcPtr);
17619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstkPtr);
17629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstfPtr);
17639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(typesPtr);
17649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
17659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
17669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
17679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
17689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
176908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    return id;
177008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
177108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
177208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1773460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
177408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
177567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
177667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
177767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)gid, (void *)kid, (void *)alloc);
177867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1779eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
178008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
178108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
178208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1783460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
178408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
178567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
178667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
178767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)gid, (void *)kid, (void *)alloc);
178867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1789eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
179008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
179108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
179208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1793460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
179408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
179567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
179667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
179767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1798eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
179908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
180008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1801d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1802d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
18030e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1804eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
1805331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1806331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
1807331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
1808331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
1809d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
181067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
181167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con);
181267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
18133aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
1814331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1815331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
1816d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1817d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
18180011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
18190011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
18200011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
1821460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
18220011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
182367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
182467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con,
182567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramVertex)vpv, slot, (RsAllocation)a);
182667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1827eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
18280011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
182954c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
1830d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1831460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
183254c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
183367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
183467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con,
183567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramFragment)vpf, slot, (RsAllocation)a);
183667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1837eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
183854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
183954c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
184054c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
1841460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
1842d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
184367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
184467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con,
184567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramFragment)vpf, slot, (RsSampler)a);
184667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1847eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1848d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1849d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
185068afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
1851d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1852460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1853eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
18549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jobjectArray texNames, jlongArray params)
18557e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
1856b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
1857488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr);
18587e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
18597e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
18602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
18612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
18622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
18632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
18642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
186567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
186667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
186767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
18687e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
18699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
18709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
18719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
18729807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
18733aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
18742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                             nameArray, texCount, sizeArray,
18759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                             paramPtr, paramLen);
18762123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
18779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
18789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
18797e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
18807e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
18817e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
18827e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
18831fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
18841fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1885460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1886eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
18879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                     jobjectArray texNames, jlongArray params)
18881fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
1889b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
1890488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr);
18910011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
18921fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
189367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
189467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
189567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1896ee41112e1539de95596600fd2c6dada5d275217fJason Sams
18972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
18982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
18992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
19002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
19012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
19029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
19039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
19049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
19059807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
19069807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
19073aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
19082123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                           nameArray, texCount, sizeArray,
19099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                           paramPtr, paramLen);
19102123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
19119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
19129807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
19130011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
19141fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
19151fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1916ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1917ebfb436a49673693b98469683451bd9ede797557Jason Sams
1918460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1919eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
1920ebfb436a49673693b98469683451bd9ede797557Jason Sams{
192167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
192267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con,
192367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              pointSprite, cull);
192467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
19253aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
1926ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1927ebfb436a49673693b98469683451bd9ede797557Jason Sams
1928d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1929d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1930d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1931d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
193278c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script)
1933d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
193467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
193567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
193667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1937eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindRootScript((RsContext)con, (RsScript)script);
1938d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1939d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1940d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
194178c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs)
1942d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
194367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
194467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
194567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1946eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
1947d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1948d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1949d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
195078c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf)
1951d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
195267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
195367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con,
195467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramFragment)pf);
195567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1956eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
1957d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1958d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
19590826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
196078c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf)
19610826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
196267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
196367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
196467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1965eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
19660826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
19670826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1968d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
196978c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf)
1970ebfb436a49673693b98469683451bd9ede797557Jason Sams{
197167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
197267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
197367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1974eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
1975ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1976ebfb436a49673693b98469683451bd9ede797557Jason Sams
1977d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
197802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
197902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
19800e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1981eff663f391fa4f119685d5c14489b94661ea126fTim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
1982a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
198302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
198467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
198567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nSamplerCreate, con(%p)", (RsContext)con);
198667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
19873aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con,
1988a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)magFilter,
1989a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)minFilter,
1990a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapS,
1991a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapT,
1992a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapR,
1993a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 aniso);
199402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
199502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1996bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1997bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
1998460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
19990e0c0885aed99a119052a792becb5a0c5a93632dAshok BhatnPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jlong _loop, jfloat q) {
200067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
200167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nPathCreate, con(%p)", (RsContext)con);
200267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2003f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
20043aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic,
2005460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                                   (RsAllocation)_vtx,
2006460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                                   (RsAllocation)_loop, q);
2007f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    return id;
2008f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams}
2009f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
2010460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
20119807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim)
2012164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
201367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
201467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshCreate, con(%p)", (RsContext)con);
201567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2016164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
201725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint vtxLen = _env->GetArrayLength(_vtx);
2018488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr);
20199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen);
20209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < vtxLen; ++i) {
20219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i];
20229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
20239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
202425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint idxLen = _env->GetArrayLength(_idx);
2025488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr);
20269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen);
20279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < idxLen; ++i) {
20289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i];
20299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
20309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
203125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint primLen = _env->GetArrayLength(_prim);
2032488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *primPtr = _env->GetIntArrayElements(_prim, nullptr);
2033164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
20343aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con,
203525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)vtxPtr, vtxLen,
203625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)idxPtr, idxLen,
203725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (uint32_t *)primPtr, primLen);
203880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
20399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(vtxPtr);
20409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(idxPtr);
20419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0);
20429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0);
204325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_prim, primPtr, 0);
204425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    return id;
20459d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
20469d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
204780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
2048460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
204980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
205067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
205167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
205267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
205380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
2054eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
205580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
205680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
205780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
205880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
2059460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
206080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
206167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
206267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
206367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
206480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
2065eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
206680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
206780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
206880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
206980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
20709807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs)
207180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
207267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
207367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
207467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
207580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
207680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
2077eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
207880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
207980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
20803aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong alloc = (jlong)(uintptr_t)allocs[i];
20819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_ids, i, 1, &alloc);
208280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
208380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
208480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
208580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
208680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
208780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
20889807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices)
208980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
209067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
209167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
209267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
209380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
209480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
209580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
209680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
2097eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
209880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
209980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
21003aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong alloc = (jlong)(uintptr_t)allocs[i];
21019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint prim = (jint)prims[i];
21029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_idxIds, i, 1, &alloc);
21039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_primitives, i, 1, &prim);
210480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
210580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
210680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
210780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
2108164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
2109164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
211056f9e6f8d5436d50530807950661e66ca5efe2bbTim Murraystatic jint
211156f9e6f8d5436d50530807950661e66ca5efe2bbTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) {
211256f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray    return (jint)sizeof(void*);
211356f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray}
211456f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray
211556f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray
2116164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
2117164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
2118d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
211994d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
2120d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2121d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
21221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
21231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2124eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceCreate",                  "()J",                                     (void*)nDeviceCreate },
2125eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceDestroy",                 "(J)V",                                    (void*)nDeviceDestroy },
2126eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceSetConfig",               "(JII)V",                                  (void*)nDeviceSetConfig },
2127eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetUserMessage",         "(J[I)I",                                  (void*)nContextGetUserMessage },
2128eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetErrorMessage",        "(J)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
2129eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextPeekMessage",            "(J[I)I",                                  (void*)nContextPeekMessage },
21301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2131eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextInitToClient",           "(J)V",                                    (void*)nContextInitToClient },
2132eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextDeinitToClient",         "(J)V",                                    (void*)nContextDeinitToClient },
21332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
21342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
21352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
2136eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreate",                 "(JIII)J",                               (void*)nContextCreate },
2137eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreateGL",               "(JIIIIIIIIIIIIFI)J",                    (void*)nContextCreateGL },
2138eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextFinish",                 "(J)V",                                  (void*)nContextFinish },
2139eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetPriority",            "(JI)V",                                 (void*)nContextSetPriority },
2140eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetSurface",             "(JIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
2141eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDestroy",                "(J)V",                                  (void*)nContextDestroy },
2142eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDump",                   "(JI)V",                                 (void*)nContextDump },
2143eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextPause",                  "(J)V",                                  (void*)nContextPause },
2144eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextResume",                 "(J)V",                                  (void*)nContextResume },
2145eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSendMessage",            "(JI[I)V",                               (void*)nContextSendMessage },
2146281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureCreate",                 "(JJJ[J[J[I[J[J)J",                      (void*)nClosureCreate },
2147be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnInvokeClosureCreate",           "(JJ[B[J[J[I)J",                         (void*)nInvokeClosureCreate },
2148281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetArg",                 "(JJIJI)V",                              (void*)nClosureSetArg },
2149281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetGlobal",              "(JJJJI)V",                              (void*)nClosureSetGlobal },
2150460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAssignName",                    "(JJ[B)V",                               (void*)nAssignName },
2151460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnGetName",                       "(JJ)Ljava/lang/String;",                (void*)nGetName },
2152460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnObjDestroy",                    "(JJ)V",                                 (void*)nObjDestroy },
2153eff663f391fa4f119685d5c14489b94661ea126fTim Murray
2154460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromFile",         "(JLjava/lang/String;)J",                (void*)nFileA3DCreateFromFile },
21550e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream",  "(JJ)J",                                 (void*)nFileA3DCreateFromAssetStream },
2156460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J",            (void*)nFileA3DCreateFromAsset },
2157460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetNumIndexEntries",     "(JJ)I",                                 (void*)nFileA3DGetNumIndexEntries },
2158460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetIndexEntries",        "(JJI[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
21590e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex",        "(JJI)J",                                (void*)nFileA3DGetEntryByIndex },
2160eff663f391fa4f119685d5c14489b94661ea126fTim Murray
21610e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile",            "(JLjava/lang/String;FI)J",              (void*)nFontCreateFromFile },
21620e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream",     "(JLjava/lang/String;FIJ)J",             (void*)nFontCreateFromAssetStream },
21630e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J",            (void*)nFontCreateFromAsset },
2164eff663f391fa4f119685d5c14489b94661ea126fTim Murray
2165460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementCreate",                 "(JJIZI)J",                              (void*)nElementCreate },
21669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2",                "(J[J[Ljava/lang/String;[I)J",           (void*)nElementCreate2 },
2167460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementGetNativeData",          "(JJ[I)V",                               (void*)nElementGetNativeData },
21689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements",         "(JJ[J[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
2169460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
2170460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnTypeCreate",                    "(JJIIIZZI)J",                           (void*)nTypeCreate },
21719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData",             "(JJ[J)V",                               (void*)nTypeGetNativeData },
2172460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
21739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped",         "(JJIIJ)J",                               (void*)nAllocationCreateTyped },
2174460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateFromBitmap",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateFromBitmap },
2175460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateBitmapBackedAllocation",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateBitmapBackedAllocation },
2176460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCubeCreateFromBitmap },
2177460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
2178460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyFromBitmap",      "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
2179460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyToBitmap",        "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
2180460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
2181460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSyncAll",             "(JJI)V",                                (void*)nAllocationSyncAll },
2182460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetSurface",          "(JJ)Landroid/view/Surface;",            (void*)nAllocationGetSurface },
2183460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSetSurface",          "(JJLandroid/view/Surface;)V",           (void*)nAllocationSetSurface },
2184460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoSend",              "(JJ)V",                                 (void*)nAllocationIoSend },
2185460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoReceive",           "(JJ)V",                                 (void*)nAllocationIoReceive },
2186460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationData1D },
2187460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationElementData1D",       "(JJIII[BI)V",                           (void*)nAllocationElementData1D },
2188460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationData2D },
2189460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D",              "(JJIIIIIIJIIII)V",                      (void*)nAllocationData2D_alloc },
2190460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIILjava/lang/Object;II)V",      (void*)nAllocationData3D },
2191460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIIJIIII)V",                     (void*)nAllocationData3D_alloc },
2192460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead",                "(JJLjava/lang/Object;I)V",              (void*)nAllocationRead },
2193460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationRead1D },
2194460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationRead2D },
2195460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetType",             "(JJ)J",                                 (void*)nAllocationGetType},
2196460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationResize1D",            "(JJI)V",                                (void*)nAllocationResize1D },
2197460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGenerateMipmaps",     "(JJ)V",                                 (void*)nAllocationGenerateMipmaps },
2198460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
219946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterCreate",       "(JJJ)J",                                (void*)nAllocationAdapterCreate },
220046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterOffset",       "(JJIIIIIIIII)V",                        (void*)nAllocationAdapterOffset },
220146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
2202460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptBindAllocation",          "(JJJI)V",                               (void*)nScriptBindAllocation },
2203460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetTimeZone",             "(JJ[B)V",                               (void*)nScriptSetTimeZone },
2204460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvoke",                  "(JJI)V",                                (void*)nScriptInvoke },
2205460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvokeV",                 "(JJI[B)V",                              (void*)nScriptInvokeV },
2206be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
2207be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes{"rsnScriptForEach",                 "(JJI[JJ[B[I)V",                         (void*)nScriptForEach },
2208be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
2209460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarI",                 "(JJII)V",                               (void*)nScriptSetVarI },
2210460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarI",                 "(JJI)I",                                (void*)nScriptGetVarI },
2211460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarJ",                 "(JJIJ)V",                               (void*)nScriptSetVarJ },
2212460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarJ",                 "(JJI)J",                                (void*)nScriptGetVarJ },
2213460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarF",                 "(JJIF)V",                               (void*)nScriptSetVarF },
2214460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarF",                 "(JJI)F",                                (void*)nScriptGetVarF },
2215460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarD",                 "(JJID)V",                               (void*)nScriptSetVarD },
2216460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarD",                 "(JJI)D",                                (void*)nScriptGetVarD },
2217460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarV",                 "(JJI[B)V",                              (void*)nScriptSetVarV },
2218460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarV",                 "(JJI[B)V",                              (void*)nScriptGetVarV },
2219460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarVE",                "(JJI[BJ[I)V",                           (void*)nScriptSetVarVE },
2220460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarObj",               "(JJIJ)V",                               (void*)nScriptSetVarObj },
2221eff663f391fa4f119685d5c14489b94661ea126fTim Murray
22220e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate",                 "(JLjava/lang/String;Ljava/lang/String;[BI)J",  (void*)nScriptCCreate },
2223460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptIntrinsicCreate",         "(JIJ)J",                                (void*)nScriptIntrinsicCreate },
2224460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptKernelIDCreate",          "(JJII)J",                               (void*)nScriptKernelIDCreate },
2225be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnScriptInvokeIDCreate",          "(JJI)J",                                (void*)nScriptInvokeIDCreate },
2226460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptFieldIDCreate",           "(JJI)J",                                (void*)nScriptFieldIDCreate },
22279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate",             "(J[J[J[J[J[J)J",                        (void*)nScriptGroupCreate },
2228ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni{"rsnScriptGroup2Create",            "(JLjava/lang/String;[J)J",               (void*)nScriptGroup2Create },
2229460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetInput",           "(JJJJ)V",                               (void*)nScriptGroupSetInput },
2230460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetOutput",          "(JJJJ)V",                               (void*)nScriptGroupSetOutput },
2231460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupExecute",            "(JJ)V",                                 (void*)nScriptGroupExecute },
2232281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnScriptGroup2Execute",           "(JJ)V",                                 (void*)nScriptGroup2Execute },
2233eff663f391fa4f119685d5c14489b94661ea126fTim Murray
223425207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Single",    "(JJIIIIIIIIIFJJFJIIII)V",               (void*)nScriptIntrinsicBLAS_Single },
223525207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Double",    "(JJIIIIIIIIIDJJDJIIII)V",               (void*)nScriptIntrinsicBLAS_Double },
223625207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Complex",   "(JJIIIIIIIIIFFJJFFJIIII)V",             (void*)nScriptIntrinsicBLAS_Complex },
223725207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Z",         "(JJIIIIIIIIIDDJJDDJIIII)V",             (void*)nScriptIntrinsicBLAS_Z },
223825207df658d6a8a3e885c7017fcc25702363583cTim Murray
22390e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate",            "(JZZZZZZIII)J",                         (void*)nProgramStoreCreate },
2240eff663f391fa4f119685d5c14489b94661ea126fTim Murray
2241460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindConstants",          "(JJIJ)V",                               (void*)nProgramBindConstants },
2242460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindTexture",            "(JJIJ)V",                               (void*)nProgramBindTexture },
2243460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindSampler",            "(JJIJ)V",                               (void*)nProgramBindSampler },
2244eff663f391fa4f119685d5c14489b94661ea126fTim Murray
22459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate",         "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramFragmentCreate },
2246460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramRasterCreate",           "(JZI)J",                                (void*)nProgramRasterCreate },
22479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate",           "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramVertexCreate },
2248eff663f391fa4f119685d5c14489b94661ea126fTim Murray
224978c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript",         "(JJ)V",                                 (void*)nContextBindRootScript },
225078c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore",       "(JJ)V",                                 (void*)nContextBindProgramStore },
225178c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment",    "(JJ)V",                                 (void*)nContextBindProgramFragment },
225278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex",      "(JJ)V",                                 (void*)nContextBindProgramVertex },
225378c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster",      "(JJ)V",                                 (void*)nContextBindProgramRaster },
2254eff663f391fa4f119685d5c14489b94661ea126fTim Murray
22550e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate",                 "(JIIIIIF)J",                            (void*)nSamplerCreate },
2256eff663f391fa4f119685d5c14489b94661ea126fTim Murray
22570e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnPathCreate",                    "(JIZJJF)J",                             (void*)nPathCreate },
22589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate",                    "(J[J[J[I)J",                            (void*)nMeshCreate },
2259eff663f391fa4f119685d5c14489b94661ea126fTim Murray
2260460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetVertexBufferCount",      "(JJ)I",                                 (void*)nMeshGetVertexBufferCount },
2261460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetIndexCount",             "(JJ)I",                                 (void*)nMeshGetIndexCount },
22629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices",               "(JJ[JI)V",                              (void*)nMeshGetVertices },
22639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices",                "(JJ[J[II)V",                            (void*)nMeshGetIndices },
226480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
226556f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray{"rsnSystemGetPointerSize",          "()I",                                   (void*)nSystemGetPointerSize },
2266d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
2267d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2268d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
2269d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
2270d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
2271d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
2272d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
2273d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2274d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
2275d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2276d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
2277d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
2278488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    JNIEnv* env = nullptr;
2279d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
2280d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2281d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
22823762c311729fe9f3af085c14c5c1fb471d994c03Steve Block        ALOGE("ERROR: GetEnv failed\n");
2283d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
2284d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
2285488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    assert(env != nullptr);
2286d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2287d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
22880e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat        ALOGE("ERROR: Renderscript native registration failed\n");
2289d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
2290d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
2291d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2292d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
2293d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
2294d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2295d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
2296d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
2297d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
2298