android_renderscript_RenderScript.cpp revision 09993f768bcb6dd9ed76b5c655da2ad9d0ad8396
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
19696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
197460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str)
1983eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
19967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
20067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
20167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2023eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
2033eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
204eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len);
2053eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
2063eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
2073eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
208fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
209460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj)
210fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
21167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
21267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
21367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
214488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    const char *name = nullptr;
215eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaGetName((RsContext)con, (void *)obj, &name);
216488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if(name == nullptr || strlen(name) == 0) {
217488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        return nullptr;
218581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
219fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
220fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
221fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
2227ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
223460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
2247ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
22567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
22667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
22767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
228eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsObjDestroy((RsContext)con, (void *)obj);
2297ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
2307ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
2313eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
2323eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
233eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
234d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
235d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
23667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
23767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nDeviceCreate");
23867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2393aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsDeviceCreate();
240d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
241d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
242d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2435eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
244d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
24567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
24667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nDeviceDestroy");
24767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
248d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
249d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
250d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
251ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
2525eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
253ebfb436a49673693b98469683451bd9ede797557Jason Sams{
25467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
25567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
25667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
257ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
258ebfb436a49673693b98469683451bd9ede797557Jason Sams}
259ebfb436a49673693b98469683451bd9ede797557Jason Sams
260eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
2615eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct)
262d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
26367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
26467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextCreate");
26567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2663aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, ver, sdkVer, (RsContextType)ct, 0);
267704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
268704ff64b099406bb328898a7443921f22dbffd6dJason Sams
269eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
2705eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
2710e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint colorMin, jint colorPref,
2720e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint alphaMin, jint alphaPref,
2730e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint depthMin, jint depthPref,
2740e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint stencilMin, jint stencilPref,
2750e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint samplesMin, jint samplesPref, jfloat samplesQ,
2760e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint dpi)
27711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
27811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
27911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
28011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
28111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
28211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
28311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
28411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
28511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
28611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
28711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
28811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
28967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
29067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextCreateGL");
29167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2923aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
293d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
294d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
295d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
296eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
2977d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
29867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
29967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
30067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
301eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSetPriority((RsContext)con, p);
3027d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
3037d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
3047d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
3057d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
3067d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
307eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd)
308efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
30967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
31067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con,
31167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              width, height, (Surface *)wnd);
31267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
313efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
314488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    ANativeWindow * window = nullptr;
315488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (wnd == nullptr) {
316efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
317efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
31864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        window = android_view_Surface_getNativeWindow(_env, wnd).get();
319efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
320efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
321eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSetSurface((RsContext)con, width, height, window);
322efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
323efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
324efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
325eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con)
326d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
32767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
32867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextDestroy, con(%p)", (RsContext)con);
32967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
330eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextDestroy((RsContext)con);
331d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
332d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
333715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
334eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
335715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
33667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
33767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
33867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
339715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
340715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
341d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
342d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
343eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con)
34465e7aa56f56097418d617663683544c25b3988eaJason Sams{
34567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
34667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextPause, con(%p)", (RsContext)con);
34767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
348eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextPause((RsContext)con);
34965e7aa56f56097418d617663683544c25b3988eaJason Sams}
35065e7aa56f56097418d617663683544c25b3988eaJason Sams
35165e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
352eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con)
35365e7aa56f56097418d617663683544c25b3988eaJason Sams{
35467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
35567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextResume, con(%p)", (RsContext)con);
35667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
357eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextResume((RsContext)con);
35865e7aa56f56097418d617663683544c25b3988eaJason Sams}
35965e7aa56f56097418d617663683544c25b3988eaJason Sams
3601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
362eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
3631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
36467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
36567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con);
36667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
3671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
3681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
3701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
371eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextGetMessage((RsContext)con,
37265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 buf, sizeof(buf),
37365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
374edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
3751c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
37609993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGV("message receive buffer too small.  %zu", receiveLen);
3771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
3781c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
3791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3801c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
381edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint
382eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
383516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
384516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
38567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
38667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
38767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
388488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *ptr = _env->GetIntArrayElements(data, nullptr);
389516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
3901c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
391eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextGetMessage((RsContext)con,
39265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 ptr, len * 4,
39365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
394edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
395516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
39609993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGV("message receive buffer too small.  %zu", receiveLen);
397516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
398516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
3990e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
4001c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
4011c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
4021c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
403eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
4041c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
40567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
40667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextPeekMessage, con(%p)", (RsContext)con);
40767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
408488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr);
4091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
4101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
411eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
412edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                  &subID, sizeof(subID));
4131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
4141c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
4151c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
4160e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
417516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
418516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
419eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
420516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
42167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
42267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextInitToClient, con(%p)", (RsContext)con);
42367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
424eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextInitToClient((RsContext)con);
425516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
426516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
427eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
428516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
42967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
43067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con);
43167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
432eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextDeinitToClient((RsContext)con);
433516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
434516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
435455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void
436eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
437455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{
438488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *ptr = nullptr;
439455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    jint len = 0;
440455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
441455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        len = _env->GetArrayLength(data);
4424a043c1853c117c1b4c4342e76cd16a5abdc1045Stephen Hines        ptr = _env->GetIntArrayElements(data, nullptr);
443455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
44467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
44567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
44667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
447eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
448455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
449455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
450455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
451455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams}
452455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
453455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
454516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
455460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
45667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm,
45767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe               jint size)
458d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
45967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
46009993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con,
46167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              type, kind, norm, size);
46267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
46367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind,
46467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                             norm, size);
465d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
466d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
467460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
468eff663f391fa4f119685d5c14489b94661ea126fTim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con,
4699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
470d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
471718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
47267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
47367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nElementCreate2, con(%p)", (RsContext)con);
47467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
475718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
476488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jIds = _env->GetLongArrayElements(_ids, nullptr);
477488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr);
4789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
4809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
4819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < fieldCount; i ++) {
4839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        ids[i] = (RsElement)jIds[i];
4849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        arraySizes[i] = (uint32_t)jArraySizes[i];
4859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
486718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
4872123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
4882123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4892123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **nameArray = names.c_str();
4902123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *sizeArray = names.c_str_len();
4912123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4923aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con,
4939807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                     (const RsElement *)ids, fieldCount,
4947a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
495e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
4962123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4979807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(ids);
4989807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(arraySizes);
4999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
5009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
5019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
5023aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)id;
503d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
504d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
505dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
506460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData)
507dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
508dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
50967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
51067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nElementGetNativeData, con(%p)", (RsContext)con);
51167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
512dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
513dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
514dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
515dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
51678c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uintptr_t elementData[5];
517eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize);
518dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
519dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
5209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint data = (jint)elementData[i];
5219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_elementData, i, 1, &data);
522dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
523dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
524dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
525dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
526dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
527460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
5289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jlongArray _IDs,
5297d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jobjectArray _names,
5307d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _arraySizes)
531dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
5329807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t dataSize = _env->GetArrayLength(_IDs);
53367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
53467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nElementGetSubElements, con(%p)", (RsContext)con);
53567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
536dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
5379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t));
5389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    const char **names = (const char **)malloc(dataSize * sizeof(const char *));
53978c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t));
540dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
54167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes,
54267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                             (uint32_t)dataSize);
543dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
5449807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(uint32_t i = 0; i < dataSize; i++) {
5453aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong id = (jlong)(uintptr_t)ids[i];
5469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint arraySize = (jint)arraySizes[i];
547dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
5489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_IDs, i, 1, &id);
5499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
550dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
551dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
552dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
553dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
5547d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    free(arraySizes);
555dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
556dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
557d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
558d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
559460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
560460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
561b109cc78616abee7291eb42094cd156b5db3355dJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
562d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
56367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
56467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
56509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer              (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv);
56667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
5673b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
56867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips,
56967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                          faces, yuv);
570d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
571d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
572dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
5739807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData)
574dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
575dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
576dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
577dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
578dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
579dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
58067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
58167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con);
58267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
583dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
5849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t typeData[6];
585eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6);
586dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
587dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
5883aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong data = (jlong)(uintptr_t)typeData[i];
5899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_typeData, i, 1, &data);
590dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
591dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
592dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
593d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
594d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
595460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
59667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage,
59767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                       jlong pointer)
598d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
59967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
60067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)",
60167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
60267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
60367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type,
60467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                                      (RsAllocationMipmapControl)mips,
60567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                                      (uint32_t)usage, (uintptr_t)pointer);
606d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
607d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
608d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
609460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
6105476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
61167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
61267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a,
61367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              bits);
61467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
615eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
6165476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
6175476b450e50939940dcf3f15c92335cee2fc572dJason Sams
61872226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject
619460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a)
620615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{
62167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
62267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
62367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
624615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
62567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con,
62667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                                                                 (RsAllocation)a);
62772226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    sp<IGraphicBufferProducer> bp = v;
628488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    v->decStrong(nullptr);
629fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
63072226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp);
63172226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    return o;
632fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams}
633fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
634fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void
635460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
636163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
63767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
63867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con,
63967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsAllocation)alloc, (Surface *)sur);
64067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
641163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
642fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    sp<Surface> s;
643163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    if (sur != 0) {
64464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        s = android_view_Surface_getSurface(_env, sur);
645163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
646163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
64767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc,
64867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                           static_cast<ANativeWindow *>(s.get()));
649163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
650163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
651163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
652460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
653163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
65467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
65509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
65667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
657460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray    rsAllocationIoSend((RsContext)con, (RsAllocation)alloc);
658163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
659163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
660163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
661460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
662163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
66367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
66409993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
66567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
666460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray    rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc);
667163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
668163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
669163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
670163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
671460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
672f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
67367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
67467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
67567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
676eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
677f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
678f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
679460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
68067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
68167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                            jobject jbitmap, jint usage)
682fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
683ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
68436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
685ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
686fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
6875476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
6885476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
6893aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con,
69065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  (RsType)type, (RsAllocationMipmapControl)mip,
69165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  ptr, bitmap.getSize(), usage);
6925476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
6935476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
694ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
695fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
696460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
69767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type,
69867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                        jint mip, jobject jbitmap, jint usage)
699a314551d69098537337c970da615a8f8af58e1f1Tim Murray{
700a314551d69098537337c970da615a8f8af58e1f1Tim Murray    SkBitmap const * nativeBitmap =
70136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
702a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const SkBitmap& bitmap(*nativeBitmap);
703a314551d69098537337c970da615a8f8af58e1f1Tim Murray
704a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.lockPixels();
705a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const void* ptr = bitmap.getPixels();
7063aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con,
707a314551d69098537337c970da615a8f8af58e1f1Tim Murray                                            (RsType)type, (RsAllocationMipmapControl)mip,
7089807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                            (uint32_t)usage, (uintptr_t)ptr);
709a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.unlockPixels();
710a314551d69098537337c970da615a8f8af58e1f1Tim Murray    return id;
711a314551d69098537337c970da615a8f8af58e1f1Tim Murray}
712a314551d69098537337c970da615a8f8af58e1f1Tim Murray
713460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
71467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
71567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                jobject jbitmap, jint usage)
71667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
71767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
71836bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
71967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
72067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
7215476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
7225476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
7233aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con,
72465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      (RsType)type, (RsAllocationMipmapControl)mip,
72565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      ptr, bitmap.getSize(), usage);
7265476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
7275476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
72867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
72967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
73026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
731460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
73226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
73326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
73436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
73526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
736f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
737f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
73826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
7394ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
7404ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
741eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0,
742304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                       0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
74338faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray                       w, h, ptr, bitmap.getSize(), 0);
7444ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
7458a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
7468a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
7474ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
748460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
7498a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
7504ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
75136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
7524ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
7538a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
7544ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
7554ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
756eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize());
7574ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
758835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk    bitmap.notifyPixelsChanged();
7598a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
7608a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
761414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
762d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
763460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
7640e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                  jint count, jobject data, jint sizeBytes, jint dataType)
765d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
766e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
76767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
76867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
76967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes,
77067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              dataType);
77167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
77267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, (RsContext)con, alloc, offset, lod, count,
77367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                   ptr, sizeBytes);
774d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
775d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
776414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java array data into the Allocation pointed to by alloc.
777d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7780e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat//    native void rsnAllocationElementData1D(long con, long id, int xoff, int compIdx, byte[] d, int sizeBytes);
77967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod,
78067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                         jint compIdx, jbyteArray data, jint sizeBytes)
78149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
78249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
78367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
78467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), "
78567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len,
78667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              sizeBytes);
78767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
788488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
789eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
79049bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
79149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
79249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
793414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
79449bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
795460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
7960e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                  jint w, jint h, jobject data, jint sizeBytes, jint dataType)
797d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
798e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
799e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
80067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
80167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
80267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
80367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
804488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
805d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
806d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
807414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation
808414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc.
80940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
810eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
811460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff,
812304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstMip, jint dstFace,
813304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint width, jint height,
814460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff,
815304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcMip, jint srcFace)
816304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{
81767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
81867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
81967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " dstMip(%i), dstFace(%i), width(%i), height(%i),"
82067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
82167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
82267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
82367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
824304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
825eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopy2DRange((RsContext)con,
826304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)dstAlloc,
827304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstXoff, dstYoff,
828304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
829304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
830304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)srcAlloc,
831304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcXoff, srcYoff,
832304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
833304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk}
834304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
835414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
836304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void
837460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
838e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams                    jint w, jint h, jint d, jobject data, int sizeBytes, int dataType)
839b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
840e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
84167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
84267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i),"
84367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
84467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              lod, w, h, d, sizeBytes);
84567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
846488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
847b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
848b05d689653b1bc94836f716f29e9578677c29075Jason Sams
849414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation
850414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc.
851b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void
852eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
853460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
854b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint dstMip,
855b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint width, jint height, jint depth,
856460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
857b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint srcMip)
858b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
85967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
86067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
86167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " dstMip(%i), width(%i), height(%i),"
86267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
86367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip,
86467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip);
86567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
866b05d689653b1bc94836f716f29e9578677c29075Jason Sams
867eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopy3DRange((RsContext)con,
868b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)dstAlloc,
869b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstXoff, dstYoff, dstZoff, dstMip,
870b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            width, height, depth,
871b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)srcAlloc,
872b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            srcXoff, srcYoff, srcZoff, srcMip);
873b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
874b05d689653b1bc94836f716f29e9578677c29075Jason Sams
87540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
876414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
87740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
878460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType)
879fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
88021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
88167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
88267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
88367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
884414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(0, rsAllocationRead, false, (RsContext)con, alloc, ptr, len * typeBytes);
885fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
886fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
887414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
888fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
889460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
89021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams                  jint count, jobject data, int sizeBytes, int dataType)
891fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
89221659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
89367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
89467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
89567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType);
89667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
897414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(0, rsAllocation1DRead, false, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
898fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
899fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
900414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
901fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
902460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
90321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams                  jint w, jint h, jobject data, int sizeBytes, int dataType)
90440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
90521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
90621659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
90767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
90867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
90967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
91067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
91167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    PER_ARRAY_TYPE(0, rsAllocation2DRead, false, (RsContext)con, alloc, xoff, yoff, lod, face, w, h,
91267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                   ptr, sizeBytes, 0);
91340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
914d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
915460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
916460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
917dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
91867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
91967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
92067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
9213aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a);
922dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
923dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
9245edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
925460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
9265edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
92767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
92867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con,
92967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsAllocation)alloc, dimX);
93067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
931eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
9325edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
9335edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
934aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
935aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
936460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
937460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset)
938aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
939aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
9400e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", asset);
941aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
9423aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
943b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
944b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
945b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
946460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
947eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
948b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
949b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
950488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (mgr == nullptr) {
951b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
952b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
953b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
954b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
955b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
956488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (asset == nullptr) {
957b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
958b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
959b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
9603aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset);
961b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
962b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
963b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
964460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
965eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
966b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
967b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
9683aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
969b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
970aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
971aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
972aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
973460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jint
974460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
975aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
976aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
977eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
9780e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)numEntries;
979aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
980aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
981aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
982460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
983aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
9840e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
985aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
986aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
987eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
988aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
989aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
990aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
991aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
992aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
993aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
994aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
995aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
996aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
9970e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
998460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
999aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
10000e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
10013aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
1002aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
1003aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
1004d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1005d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
1006d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
10070e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1008eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
1009b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
10109b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
1011b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
10123aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con,
1013e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
1014e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
1015b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1016b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
1017b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
1018b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
10190e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1020eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
10210e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                           jstring name, jfloat fontSize, jint dpi, jlong native_asset)
1022b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
1023b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
1024b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
1025b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
10263aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con,
1027e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
1028e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
1029b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
1030b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
1031b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
1032b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
10330e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1034eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
1035b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
1036b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
1037b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
1038488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (mgr == nullptr) {
1039b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
1040b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1041b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1042b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
1043b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
1044488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (asset == nullptr) {
1045b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
1046b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
10479b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
10483aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con,
1049e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
1050e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
1051b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
1052b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
10539b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
10549b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
10559b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
1056bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
1057bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
1058bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
1059460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
1060d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
106167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
106267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con,
106367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsScript)script, (RsAllocation)alloc, slot);
106467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1065eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
1066d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1067d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1068d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1069460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
10704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
107167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
107267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script,
107367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
107467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1075eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
10764d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
10774d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
10787c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint
1079460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
10807c4caadb939b1563328251c156262c179a685c70Tim Murray{
108167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
108267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
108367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
10847c4caadb939b1563328251c156262c179a685c70Tim Murray    int value = 0;
1085eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
10867c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
10877c4caadb939b1563328251c156262c179a685c70Tim Murray}
10887c4caadb939b1563328251c156262c179a685c70Tim Murray
10894d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
1090460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
10916f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
109267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
109309993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script,
109467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
109567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1096eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
10976f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
10986f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
10996f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
1100460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
1101031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
110267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
110309993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script,
110467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
110567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1106eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
1107031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
1108031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
11097c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong
1110460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
11117c4caadb939b1563328251c156262c179a685c70Tim Murray{
111267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
111367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
111467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
11157c4caadb939b1563328251c156262c179a685c70Tim Murray    jlong value = 0;
1116eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
11177c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
11187c4caadb939b1563328251c156262c179a685c70Tim Murray}
11197c4caadb939b1563328251c156262c179a685c70Tim Murray
1120031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
1121460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
11224d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
112367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
112467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script,
112567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
112667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1127eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
11284d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
11294d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
11307c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat
1131460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
11327c4caadb939b1563328251c156262c179a685c70Tim Murray{
113367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
113467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
113567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
11367c4caadb939b1563328251c156262c179a685c70Tim Murray    jfloat value = 0;
1137eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
11387c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
11397c4caadb939b1563328251c156262c179a685c70Tim Murray}
11407c4caadb939b1563328251c156262c179a685c70Tim Murray
11414d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
1142460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
1143ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
114467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
114567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script,
114667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
114767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1148eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
1149ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
1150ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
11517c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble
1152460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
11537c4caadb939b1563328251c156262c179a685c70Tim Murray{
115467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
115567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
115667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
11577c4caadb939b1563328251c156262c179a685c70Tim Murray    jdouble value = 0;
1158eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
11597c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
11607c4caadb939b1563328251c156262c179a685c70Tim Murray}
11617c4caadb939b1563328251c156262c179a685c70Tim Murray
1162ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
1163460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
11644d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
116567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
116667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
116767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
11684d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
1169488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1170eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
11714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
11724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
11734d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1174adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void
1175460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
11767c4caadb939b1563328251c156262c179a685c70Tim Murray{
117767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
117867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
117967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
11807c4caadb939b1563328251c156262c179a685c70Tim Murray    jint len = _env->GetArrayLength(data);
1181488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1182eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
1183414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    _env->ReleaseByteArrayElements(data, ptr, 0);
11847c4caadb939b1563328251c156262c179a685c70Tim Murray}
11857c4caadb939b1563328251c156262c179a685c70Tim Murray
11867c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void
118767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data,
118867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                jlong elem, jintArray dims)
1189adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{
119067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
119167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
119267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1193adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint len = _env->GetArrayLength(data);
1194488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1195adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1196488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr);
1197eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
1198bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines                     (const uint32_t*) dimsPtr, dimsLen);
1199adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1200adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1201adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines}
1202adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines
1203d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1204d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1205460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
1206584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
120767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
120867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
120967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1210584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1211584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
1212584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
1213584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1214584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1215eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
1216584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1217584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
1218584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1219584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
1220584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
1221584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
122222534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
1223460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
122422534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
122567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
122667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
122767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1228eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
122922534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
123022534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1231584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
1232460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
1233be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
123467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
123567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
123667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
12374d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
1238488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1239eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
12404d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1241be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
1242be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
12436e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
1244be7b1defb6b11920703b241ba5815fb09487bb02Chris WailesnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot,
1245be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes               jlongArray ains, jlong aout, jbyteArray params,
1246be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes               jintArray limits)
12476e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
124867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
124967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
125067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1251949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1252be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint   in_len = 0;
1253488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *in_ptr = nullptr;
1254949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1255488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    RsAllocation *in_allocs = nullptr;
1256949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1257488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (ains != nullptr) {
1258be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        in_len = _env->GetArrayLength(ains);
1259488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        in_ptr = _env->GetLongArrayElements(ains, nullptr);
1260eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes
1261be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        if (sizeof(RsAllocation) == sizeof(jlong)) {
1262be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            in_allocs = (RsAllocation*)in_ptr;
1263949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1264be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        } else {
1265be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            // Convert from 64-bit jlong types to the native pointer type.
1266eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes
1267be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation));
1268be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1269be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            for (int index = in_len; --index >= 0;) {
1270be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                in_allocs[index] = (RsAllocation)in_ptr[index];
1271be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            }
1272be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        }
1273949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1274949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1275be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint   param_len = 0;
1276488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *param_ptr = nullptr;
1277be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1278488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (params != nullptr) {
1279be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        param_len = _env->GetArrayLength(params);
1280488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        param_ptr = _env->GetByteArrayElements(params, nullptr);
1281c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines    }
1282949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1283488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    RsScriptCall sc, *sca = nullptr;
1284be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    uint32_t sc_size = 0;
1285949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1286be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint  limit_len = 0;
1287488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *limit_ptr = nullptr;
1288949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1289488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (limits != nullptr) {
1290be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        limit_len = _env->GetArrayLength(limits);
1291488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        limit_ptr = _env->GetIntArrayElements(limits, nullptr);
1292949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1293be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        assert(limit_len == 6);
129467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        UNUSED(limit_len);  // As the assert might not be compiled.
1295949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1296be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.xStart     = limit_ptr[0];
1297be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.xEnd       = limit_ptr[1];
1298be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.yStart     = limit_ptr[2];
1299be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.yEnd       = limit_ptr[3];
1300be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.zStart     = limit_ptr[4];
1301be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.zEnd       = limit_ptr[5];
1302be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.strategy   = RS_FOR_EACH_STRATEGY_DONT_CARE;
1303949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1304be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sca = &sc;
1305be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    }
1306949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1307be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    rsScriptForEachMulti((RsContext)con, (RsScript)script, slot,
1308be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                         in_allocs, in_len, (RsAllocation)aout,
1309be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                         param_ptr, param_len, sca, sc_size);
1310949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1311488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (ains != nullptr) {
1312be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
1313949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1314949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1315488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (params != nullptr) {
1316be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT);
1317eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes    }
1318c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines
1319488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (limits != nullptr) {
1320be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT);
1321be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    }
1322949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes}
1323949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1324fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
1325fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
13260e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1327eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
1328e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
1329e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
1330d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
133167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
133267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptCCreate, con(%p)", (RsContext)con);
133367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1334e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
1335e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
1336e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
13370e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong ret = 0;
1338488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte* script_ptr = nullptr;
133943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
134043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
134143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
134243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
13438451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
134443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
134543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
134643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
134743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
13488451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
134943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
135043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1351e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
135243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
135343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
13548451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
13558451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
135643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
135743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1358e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
135943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
136043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
1361eff663f391fa4f119685d5c14489b94661ea126fTim Murray    //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
1362e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
13633aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con,
1364e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
1365e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
1366e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
136739ddc950c9064129ead5de04b200106c0659f937Jason Sams
136843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
1369e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
1370e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
137143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
137243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1373d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
13743aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)ret;
1375d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1376d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1377460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1378460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
13796ab97682fd444586ee135912a4210417a1c8781bJason Sams{
138067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
138167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id,
138267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)eid);
138367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
13843aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
13856ab97682fd444586ee135912a4210417a1c8781bJason Sams}
13866ab97682fd444586ee135912a4210417a1c8781bJason Sams
1387460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1388460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
138908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
139067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
139167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con,
139267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)sid, slot, sig);
139367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
13943aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
139508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
139608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1397460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1398460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
139908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
140067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
140167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid,
140267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot);
140367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
14043aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
140508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
140608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1407460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
14089807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
14099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlongArray _dstk, jlongArray _dstf, jlongArray _types)
141008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
141167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
141267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con);
141367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
141408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
14159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint kernelsLen = _env->GetArrayLength(_kernels);
1416488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr);
14179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
14189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < kernelsLen; ++i) {
14199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
14209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
14219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
14229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint srcLen = _env->GetArrayLength(_src);
1423488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr);
14249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
14259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < srcLen; ++i) {
14269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
14279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
14289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
14299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstkLen = _env->GetArrayLength(_dstk);
1430488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr);
14319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
14329807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstkLen; ++i) {
14339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
14349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
14359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
14369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstfLen = _env->GetArrayLength(_dstf);
1437488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr);
14389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
14399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstfLen; ++i) {
14409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
14419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
14429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
14439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint typesLen = _env->GetArrayLength(_types);
1444488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr);
14459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
14469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < typesLen; ++i) {
14479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        typesPtr[i] = (RsType)jTypesPtr[i];
14489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
14499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
14503aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con,
14519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
14529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
14539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
14549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
14559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsType *)typesPtr, typesLen * sizeof(RsType));
14569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
14579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(kernelsPtr);
14589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(srcPtr);
14599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstkPtr);
14609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstfPtr);
14619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(typesPtr);
14629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
14639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
14649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
14659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
14669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
146708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    return id;
146808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
146908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
147008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1471460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
147208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
147367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
147467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
147567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)gid, (void *)kid, (void *)alloc);
147667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1477eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
147808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
147908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
148008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1481460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
148208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
148367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
148467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
148567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)gid, (void *)kid, (void *)alloc);
148667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1487eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
148808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
148908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
149008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1491460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
149208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
149367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
149467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
149567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1496eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
149708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
149808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1499d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1500d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
15010e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1502eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
1503331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1504331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
1505331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
1506331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
1507d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
150867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
150967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con);
151067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
15113aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
1512331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1513331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
1514d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1515d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
15160011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
15170011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
15180011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
1519460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
15200011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
152167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
152267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con,
152367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramVertex)vpv, slot, (RsAllocation)a);
152467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1525eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
15260011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
152754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
1528d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1529460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
153054c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
153167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
153267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con,
153367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramFragment)vpf, slot, (RsAllocation)a);
153467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1535eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
153654c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
153754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
153854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
1539460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
1540d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
154167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
154267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con,
154367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramFragment)vpf, slot, (RsSampler)a);
154467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1545eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1546d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1547d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
154868afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
1549d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1550460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1551eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
15529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jobjectArray texNames, jlongArray params)
15537e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
1554b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
1555488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr);
15567e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
15577e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
15582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
15592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
15602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
15612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
15622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
156367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
156467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
156567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
15667e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
15679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
15689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
15699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
15709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
15713aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
15722123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                             nameArray, texCount, sizeArray,
15739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                             paramPtr, paramLen);
15742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
15759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
15769807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
15777e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
15787e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
15797e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
15807e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
15811fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
15821fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1583460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1584eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
15859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                     jobjectArray texNames, jlongArray params)
15861fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
1587b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
1588488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr);
15890011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
15901fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
159167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
159267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
159367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1594ee41112e1539de95596600fd2c6dada5d275217fJason Sams
15952123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
15962123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
15972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
15982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
15992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
16009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
16019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
16029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
16039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
16049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
16053aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
16062123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                           nameArray, texCount, sizeArray,
16079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                           paramPtr, paramLen);
16082123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
16099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
16109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
16110011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
16121fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
16131fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1614ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1615ebfb436a49673693b98469683451bd9ede797557Jason Sams
1616460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1617eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
1618ebfb436a49673693b98469683451bd9ede797557Jason Sams{
161967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
162067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con,
162167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              pointSprite, cull);
162267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
16233aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
1624ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1625ebfb436a49673693b98469683451bd9ede797557Jason Sams
1626d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1627d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1628d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1629d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
163078c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script)
1631d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
163267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
163367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
163467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1635eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindRootScript((RsContext)con, (RsScript)script);
1636d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1637d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1638d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
163978c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs)
1640d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
164167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
164267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
164367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1644eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
1645d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1646d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1647d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
164878c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf)
1649d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
165067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
165167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con,
165267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramFragment)pf);
165367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1654eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
1655d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1656d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
16570826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
165878c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf)
16590826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
166067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
166167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
166267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1663eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
16640826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
16650826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1666d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
166778c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf)
1668ebfb436a49673693b98469683451bd9ede797557Jason Sams{
166967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
167067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
167167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1672eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
1673ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1674ebfb436a49673693b98469683451bd9ede797557Jason Sams
1675d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
167602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
167702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
16780e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1679eff663f391fa4f119685d5c14489b94661ea126fTim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
1680a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
168102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
168267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
168367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nSamplerCreate, con(%p)", (RsContext)con);
168467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
16853aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con,
1686a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)magFilter,
1687a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)minFilter,
1688a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapS,
1689a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapT,
1690a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapR,
1691a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 aniso);
169202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
169302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1694bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1695bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
1696460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
16970e0c0885aed99a119052a792becb5a0c5a93632dAshok BhatnPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jlong _loop, jfloat q) {
169867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
169967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nPathCreate, con(%p)", (RsContext)con);
170067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1701f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
17023aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic,
1703460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                                   (RsAllocation)_vtx,
1704460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                                   (RsAllocation)_loop, q);
1705f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    return id;
1706f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams}
1707f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
1708460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
17099807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim)
1710164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
171167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
171267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshCreate, con(%p)", (RsContext)con);
171367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1714164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
171525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint vtxLen = _env->GetArrayLength(_vtx);
1716488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr);
17179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen);
17189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < vtxLen; ++i) {
17199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i];
17209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
17219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
172225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint idxLen = _env->GetArrayLength(_idx);
1723488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr);
17249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen);
17259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < idxLen; ++i) {
17269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i];
17279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
17289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
172925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint primLen = _env->GetArrayLength(_prim);
1730488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *primPtr = _env->GetIntArrayElements(_prim, nullptr);
1731164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
17323aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con,
173325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)vtxPtr, vtxLen,
173425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)idxPtr, idxLen,
173525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (uint32_t *)primPtr, primLen);
173680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
17379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(vtxPtr);
17389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(idxPtr);
17399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0);
17409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0);
174125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_prim, primPtr, 0);
174225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    return id;
17439d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
17449d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
174580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
1746460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
174780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
174867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
174967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
175067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
175180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1752eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
175380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
175480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
175580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
175680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
1757460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
175880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
175967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
176067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
176167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
176280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1763eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
176480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
176580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
176680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
176780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
17689807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs)
176980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
177067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
177167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
177267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
177380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
177480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1775eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
177680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
177780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
17783aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong alloc = (jlong)(uintptr_t)allocs[i];
17799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_ids, i, 1, &alloc);
178080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
178180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
178280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
178380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
178480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
178580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
17869807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices)
178780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
178867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
178967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
179067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
179180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
179280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
179380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
179480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1795eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
179680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
179780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
17983aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong alloc = (jlong)(uintptr_t)allocs[i];
17999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint prim = (jint)prims[i];
18009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_idxIds, i, 1, &alloc);
18019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_primitives, i, 1, &prim);
180280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
180380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
180480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
180580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1806164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1807164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
180856f9e6f8d5436d50530807950661e66ca5efe2bbTim Murraystatic jint
180956f9e6f8d5436d50530807950661e66ca5efe2bbTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) {
181056f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray    return (jint)sizeof(void*);
181156f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray}
181256f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray
181356f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray
1814164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1815164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1816d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
181794d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1818d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1819d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
18201c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
18211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1822eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceCreate",                  "()J",                                     (void*)nDeviceCreate },
1823eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceDestroy",                 "(J)V",                                    (void*)nDeviceDestroy },
1824eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceSetConfig",               "(JII)V",                                  (void*)nDeviceSetConfig },
1825eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetUserMessage",         "(J[I)I",                                  (void*)nContextGetUserMessage },
1826eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetErrorMessage",        "(J)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1827eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextPeekMessage",            "(J[I)I",                                  (void*)nContextPeekMessage },
18281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1829eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextInitToClient",           "(J)V",                                    (void*)nContextInitToClient },
1830eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextDeinitToClient",         "(J)V",                                    (void*)nContextDeinitToClient },
18312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
18322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
18332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
1834eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreate",                 "(JIII)J",                               (void*)nContextCreate },
1835eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreateGL",               "(JIIIIIIIIIIIIFI)J",                    (void*)nContextCreateGL },
1836eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextFinish",                 "(J)V",                                  (void*)nContextFinish },
1837eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetPriority",            "(JI)V",                                 (void*)nContextSetPriority },
1838eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetSurface",             "(JIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1839eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDestroy",                "(J)V",                                  (void*)nContextDestroy },
1840eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDump",                   "(JI)V",                                 (void*)nContextDump },
1841eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextPause",                  "(J)V",                                  (void*)nContextPause },
1842eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextResume",                 "(J)V",                                  (void*)nContextResume },
1843eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSendMessage",            "(JI[I)V",                               (void*)nContextSendMessage },
1844460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAssignName",                    "(JJ[B)V",                               (void*)nAssignName },
1845460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnGetName",                       "(JJ)Ljava/lang/String;",                (void*)nGetName },
1846460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnObjDestroy",                    "(JJ)V",                                 (void*)nObjDestroy },
1847eff663f391fa4f119685d5c14489b94661ea126fTim Murray
1848460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromFile",         "(JLjava/lang/String;)J",                (void*)nFileA3DCreateFromFile },
18490e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream",  "(JJ)J",                                 (void*)nFileA3DCreateFromAssetStream },
1850460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J",            (void*)nFileA3DCreateFromAsset },
1851460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetNumIndexEntries",     "(JJ)I",                                 (void*)nFileA3DGetNumIndexEntries },
1852460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetIndexEntries",        "(JJI[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
18530e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex",        "(JJI)J",                                (void*)nFileA3DGetEntryByIndex },
1854eff663f391fa4f119685d5c14489b94661ea126fTim Murray
18550e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile",            "(JLjava/lang/String;FI)J",              (void*)nFontCreateFromFile },
18560e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream",     "(JLjava/lang/String;FIJ)J",             (void*)nFontCreateFromAssetStream },
18570e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J",            (void*)nFontCreateFromAsset },
1858eff663f391fa4f119685d5c14489b94661ea126fTim Murray
1859460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementCreate",                 "(JJIZI)J",                              (void*)nElementCreate },
18609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2",                "(J[J[Ljava/lang/String;[I)J",           (void*)nElementCreate2 },
1861460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementGetNativeData",          "(JJ[I)V",                               (void*)nElementGetNativeData },
18629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements",         "(JJ[J[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
1863460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
1864460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnTypeCreate",                    "(JJIIIZZI)J",                           (void*)nTypeCreate },
18659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData",             "(JJ[J)V",                               (void*)nTypeGetNativeData },
1866460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
18679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped",         "(JJIIJ)J",                               (void*)nAllocationCreateTyped },
1868460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateFromBitmap",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateFromBitmap },
1869460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateBitmapBackedAllocation",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateBitmapBackedAllocation },
1870460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCubeCreateFromBitmap },
1871460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
1872460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyFromBitmap",      "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
1873460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyToBitmap",        "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
1874460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
1875460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSyncAll",             "(JJI)V",                                (void*)nAllocationSyncAll },
1876460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetSurface",          "(JJ)Landroid/view/Surface;",            (void*)nAllocationGetSurface },
1877460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSetSurface",          "(JJLandroid/view/Surface;)V",           (void*)nAllocationSetSurface },
1878460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoSend",              "(JJ)V",                                 (void*)nAllocationIoSend },
1879460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoReceive",           "(JJ)V",                                 (void*)nAllocationIoReceive },
1880460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationData1D },
1881460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationElementData1D",       "(JJIII[BI)V",                           (void*)nAllocationElementData1D },
1882460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationData2D },
1883460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D",              "(JJIIIIIIJIIII)V",                      (void*)nAllocationData2D_alloc },
1884460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIILjava/lang/Object;II)V",      (void*)nAllocationData3D },
1885460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIIJIIII)V",                     (void*)nAllocationData3D_alloc },
1886460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead",                "(JJLjava/lang/Object;I)V",              (void*)nAllocationRead },
1887460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationRead1D },
1888460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationRead2D },
1889460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetType",             "(JJ)J",                                 (void*)nAllocationGetType},
1890460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationResize1D",            "(JJI)V",                                (void*)nAllocationResize1D },
1891460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGenerateMipmaps",     "(JJ)V",                                 (void*)nAllocationGenerateMipmaps },
1892460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
1893460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptBindAllocation",          "(JJJI)V",                               (void*)nScriptBindAllocation },
1894460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetTimeZone",             "(JJ[B)V",                               (void*)nScriptSetTimeZone },
1895460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvoke",                  "(JJI)V",                                (void*)nScriptInvoke },
1896460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvokeV",                 "(JJI[B)V",                              (void*)nScriptInvokeV },
1897be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1898be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes{"rsnScriptForEach",                 "(JJI[JJ[B[I)V",                         (void*)nScriptForEach },
1899be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1900460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarI",                 "(JJII)V",                               (void*)nScriptSetVarI },
1901460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarI",                 "(JJI)I",                                (void*)nScriptGetVarI },
1902460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarJ",                 "(JJIJ)V",                               (void*)nScriptSetVarJ },
1903460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarJ",                 "(JJI)J",                                (void*)nScriptGetVarJ },
1904460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarF",                 "(JJIF)V",                               (void*)nScriptSetVarF },
1905460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarF",                 "(JJI)F",                                (void*)nScriptGetVarF },
1906460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarD",                 "(JJID)V",                               (void*)nScriptSetVarD },
1907460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarD",                 "(JJI)D",                                (void*)nScriptGetVarD },
1908460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarV",                 "(JJI[B)V",                              (void*)nScriptSetVarV },
1909460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarV",                 "(JJI[B)V",                              (void*)nScriptGetVarV },
1910460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarVE",                "(JJI[BJ[I)V",                           (void*)nScriptSetVarVE },
1911460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarObj",               "(JJIJ)V",                               (void*)nScriptSetVarObj },
1912eff663f391fa4f119685d5c14489b94661ea126fTim Murray
19130e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate",                 "(JLjava/lang/String;Ljava/lang/String;[BI)J",  (void*)nScriptCCreate },
1914460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptIntrinsicCreate",         "(JIJ)J",                                (void*)nScriptIntrinsicCreate },
1915460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptKernelIDCreate",          "(JJII)J",                               (void*)nScriptKernelIDCreate },
1916460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptFieldIDCreate",           "(JJI)J",                                (void*)nScriptFieldIDCreate },
19179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate",             "(J[J[J[J[J[J)J",                        (void*)nScriptGroupCreate },
1918460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetInput",           "(JJJJ)V",                               (void*)nScriptGroupSetInput },
1919460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetOutput",          "(JJJJ)V",                               (void*)nScriptGroupSetOutput },
1920460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupExecute",            "(JJ)V",                                 (void*)nScriptGroupExecute },
1921eff663f391fa4f119685d5c14489b94661ea126fTim Murray
19220e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate",            "(JZZZZZZIII)J",                         (void*)nProgramStoreCreate },
1923eff663f391fa4f119685d5c14489b94661ea126fTim Murray
1924460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindConstants",          "(JJIJ)V",                               (void*)nProgramBindConstants },
1925460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindTexture",            "(JJIJ)V",                               (void*)nProgramBindTexture },
1926460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindSampler",            "(JJIJ)V",                               (void*)nProgramBindSampler },
1927eff663f391fa4f119685d5c14489b94661ea126fTim Murray
19289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate",         "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramFragmentCreate },
1929460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramRasterCreate",           "(JZI)J",                                (void*)nProgramRasterCreate },
19309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate",           "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramVertexCreate },
1931eff663f391fa4f119685d5c14489b94661ea126fTim Murray
193278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript",         "(JJ)V",                                 (void*)nContextBindRootScript },
193378c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore",       "(JJ)V",                                 (void*)nContextBindProgramStore },
193478c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment",    "(JJ)V",                                 (void*)nContextBindProgramFragment },
193578c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex",      "(JJ)V",                                 (void*)nContextBindProgramVertex },
193678c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster",      "(JJ)V",                                 (void*)nContextBindProgramRaster },
1937eff663f391fa4f119685d5c14489b94661ea126fTim Murray
19380e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate",                 "(JIIIIIF)J",                            (void*)nSamplerCreate },
1939eff663f391fa4f119685d5c14489b94661ea126fTim Murray
19400e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnPathCreate",                    "(JIZJJF)J",                             (void*)nPathCreate },
19419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate",                    "(J[J[J[I)J",                            (void*)nMeshCreate },
1942eff663f391fa4f119685d5c14489b94661ea126fTim Murray
1943460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetVertexBufferCount",      "(JJ)I",                                 (void*)nMeshGetVertexBufferCount },
1944460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetIndexCount",             "(JJ)I",                                 (void*)nMeshGetIndexCount },
19459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices",               "(JJ[JI)V",                              (void*)nMeshGetVertices },
19469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices",                "(JJ[J[II)V",                            (void*)nMeshGetIndices },
194780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
194856f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray{"rsnSystemGetPointerSize",          "()I",                                   (void*)nSystemGetPointerSize },
1949d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1950d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1951d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1952d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1953d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1954d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1955d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1956d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1957d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1958d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1959d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1960d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1961488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    JNIEnv* env = nullptr;
1962d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1963d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1964d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
19653762c311729fe9f3af085c14c5c1fb471d994c03Steve Block        ALOGE("ERROR: GetEnv failed\n");
1966d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1967d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1968488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    assert(env != nullptr);
1969d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1970d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
19710e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat        ALOGE("ERROR: Renderscript native registration failed\n");
1972d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1973d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1974d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1975d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1976d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1977d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1978d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1979d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1980d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1981