android_renderscript_RenderScript.cpp revision 488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5
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>
25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
26ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams#include <core/SkBitmap.h>
27650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkPixelRef.h>
28650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkStream.h>
29650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkTemplates.h>
30ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
31b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/Asset.h>
32b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h>
33b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h>
34f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h"
36d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h"
37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h"
38ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h"
39b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h"
40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
411d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rs.h>
421d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rsEnv.h>
43fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams#include <gui/Surface.h>
44d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden#include <gui/GLConsumer.h>
4552800617946c456e78ed010c82d0ec4358368164Mathias Agopian#include <gui/Surface.h>
46faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h>
47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
483762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define LOG_API(...)
50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
51d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
53414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) {                                      \
546fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    jint len = 0;                                                                       \
55488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    void *ptr = nullptr;                                                                \
5629868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    size_t typeBytes = 0;                                                               \
57414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    jint relFlag = 0;                                                                   \
58414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    if (readonly) {                                                                     \
59414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        /* The on-release mode should only be JNI_ABORT for read-only accesses. */      \
60414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        relFlag = JNI_ABORT;                                                            \
61414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    }                                                                                   \
626fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    switch(dataType) {                                                                  \
636fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_FLOAT_32:                                                              \
646fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jfloatArray)data);                                  \
656fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetFloatArrayElements((jfloatArray)data, flag);                     \
6629868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 4;                                                                  \
676fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
68414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag);     \
696fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
706fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_FLOAT_64:                                                              \
716fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jdoubleArray)data);                                 \
726fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag);                   \
7329868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 8;                                                                  \
746fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
75414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag);  \
766fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
776fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_8:                                                              \
786fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_8:                                                            \
796fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jbyteArray)data);                                   \
806fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetByteArrayElements((jbyteArray)data, flag);                       \
8129868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 1;                                                                  \
826fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
83414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag);         \
846fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
856fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_16:                                                             \
866fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_16:                                                           \
876fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jshortArray)data);                                  \
886fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetShortArrayElements((jshortArray)data, flag);                     \
8929868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 2;                                                                  \
906fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
91414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag);     \
926fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
936fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_32:                                                             \
946fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_32:                                                           \
956fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jintArray)data);                                    \
966fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetIntArrayElements((jintArray)data, flag);                         \
9729868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 4;                                                                  \
986fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
99414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag);           \
1006fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
1016fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_64:                                                             \
1026fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_64:                                                           \
1036fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jlongArray)data);                                   \
1046fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetLongArrayElements((jlongArray)data, flag);                       \
10529868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 8;                                                                  \
1066fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
107414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag);        \
1086fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
1096fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    default:                                                                            \
1106fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        break;                                                                          \
1116fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    }                                                                                   \
1126fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams}
1136fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams
1146fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams
115b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 {
116b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic:
1172123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
118488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        fCStr = env->GetStringUTFChars(str, nullptr);
119b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fLength = env->GetStringUTFLength(str);
120b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1212123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringToUTF8() {
122b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
123b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
124b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* c_str() const { return fCStr; }
125b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize length() const { return fLength; }
126b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
127b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate:
128b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    JNIEnv*     fEnv;
129b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jstring     fJStr;
130b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* fCStr;
131b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize       fLength;
132b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk};
133b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1342123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 {
1352123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic:
1362123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
1372123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
138488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        mCStrings = nullptr;
139488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        mSizeArray = nullptr;
1402123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        if (stringsLength > 0) {
1412123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
1422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
1432123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            for (jsize ct = 0; ct < stringsLength; ct ++) {
1442123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
145488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes                mCStrings[ct] = mEnv->GetStringUTFChars(s, nullptr);
1462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
1472123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            }
1482123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
1492123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
1502123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringArrayToUTF8() {
1512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        for (jsize ct=0; ct < mStringsLength; ct++) {
1522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
1532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
1542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
1552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mCStrings);
1562123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mSizeArray);
1572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
1582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **c_str() const { return mCStrings; }
1592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *c_str_len() const { return mSizeArray; }
1602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize length() const { return mStringsLength; }
1612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
1622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate:
1632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    JNIEnv      *mEnv;
1642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jobjectArray mStrings;
1652123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **mCStrings;
1662123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t      *mSizeArray;
1672123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize        mStringsLength;
1682123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk};
1692123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
170d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
171d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
172ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
173ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
17443ee06857bb7f99446d1d84f8789016c5d105558Jason Samsstatic jfieldID gTypeNativeCache = 0;
175d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
176d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
177d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
178a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    gContextId             = _env->GetFieldID(_this, "mContext", "J");
179ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
180ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
181a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J");
182d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
183d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
184d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
185d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1863eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
187a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con)
18896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
189e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextFinish, con(%p)", (RsContext)con);
190a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextFinish((RsContext)con);
19196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
19296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
19396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
1947a629fac82f88126642081b4474879f6a883e313Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str)
1953eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
196e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
1973eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
1983eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
199a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len);
2003eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
2013eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
2023eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
203fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
2047a629fac82f88126642081b4474879f6a883e313Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj)
205fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
206e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
207488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    const char *name = nullptr;
208a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaGetName((RsContext)con, (void *)obj, &name);
209488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if(name == nullptr || strlen(name) == 0) {
210488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        return nullptr;
211581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
212fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
213fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
214fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
2157ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
2167a629fac82f88126642081b4474879f6a883e313Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
2177ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
218e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
219a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsObjDestroy((RsContext)con, (void *)obj);
2207ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
2217ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
2223eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
2233eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
224a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic jlong
225d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
226d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
227d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
2280e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsDeviceCreate();
229d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
230d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
231d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
232b75c27e8704f3933601afba5a9f719de2b927355Tim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
233d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
234d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
235d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
236d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
237d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
238ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
239b75c27e8704f3933601afba5a9f719de2b927355Tim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
240ebfb436a49673693b98469683451bd9ede797557Jason Sams{
241ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
242ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
243ebfb436a49673693b98469683451bd9ede797557Jason Sams}
244ebfb436a49673693b98469683451bd9ede797557Jason Sams
245a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic jlong
246b75c27e8704f3933601afba5a9f719de2b927355Tim MurraynContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct)
247d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
248d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
2490e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsContextCreate((RsDevice)dev, ver, sdkVer, (RsContextType)ct, 0);
250704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
251704ff64b099406bb328898a7443921f22dbffd6dJason Sams
252a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic jlong
253b75c27e8704f3933601afba5a9f719de2b927355Tim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
2540e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint colorMin, jint colorPref,
2550e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint alphaMin, jint alphaPref,
2560e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint depthMin, jint depthPref,
2570e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint stencilMin, jint stencilPref,
2580e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint samplesMin, jint samplesPref, jfloat samplesQ,
2590e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint dpi)
26011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
26111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
26211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
26311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
26411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
26511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
26611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
26711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
26811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
26911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
27011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
27111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
272704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
2730e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
274d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
275d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
276d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
277a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
2787d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
279e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
280a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextSetPriority((RsContext)con, p);
2817d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
2827d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2837d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2847d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2857d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
286a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd)
287efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
288e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, width, height, (Surface *)wnd);
289efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
290488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    ANativeWindow * window = nullptr;
291488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (wnd == nullptr) {
292efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
293efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
29464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        window = android_view_Surface_getNativeWindow(_env, wnd).get();
295efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
296efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
297a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextSetSurface((RsContext)con, width, height, window);
298efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
299efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
300efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
301a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con)
302d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
303e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextDestroy, con(%p)", (RsContext)con);
304a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextDestroy((RsContext)con);
305d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
306d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
307715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
308a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
309715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
310715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
311715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
312715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
313d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
314d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
315a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con)
31665e7aa56f56097418d617663683544c25b3988eaJason Sams{
317e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextPause, con(%p)", (RsContext)con);
318a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextPause((RsContext)con);
31965e7aa56f56097418d617663683544c25b3988eaJason Sams}
32065e7aa56f56097418d617663683544c25b3988eaJason Sams
32165e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
322a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con)
32365e7aa56f56097418d617663683544c25b3988eaJason Sams{
324e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextResume, con(%p)", (RsContext)con);
325a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextResume((RsContext)con);
32665e7aa56f56097418d617663683544c25b3988eaJason Sams}
32765e7aa56f56097418d617663683544c25b3988eaJason Sams
3281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
330a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
3311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
332e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con);
3331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
3341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3351c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
3361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
337a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = rsContextGetMessage((RsContext)con,
33865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 buf, sizeof(buf),
33965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
340edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
3411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
34271f2cf116aab893e224056c38ab146bd1538dd3eSteve Block        ALOGV("message receive buffer too small.  %i", receiveLen);
3431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
3441c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
3451c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
347edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint
348a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
349516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
350516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
351e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
352488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *ptr = _env->GetIntArrayElements(data, nullptr);
353516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
3541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
355a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = rsContextGetMessage((RsContext)con,
35665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 ptr, len * 4,
35765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
358edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
359516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
36071f2cf116aab893e224056c38ab146bd1538dd3eSteve Block        ALOGV("message receive buffer too small.  %i", receiveLen);
361516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
362516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
3630e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
3641c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3651c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
367a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
3681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
369e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextPeekMessage, con(%p)", (RsContext)con);
370488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr);
3711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
3721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
373a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
374edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                  &subID, sizeof(subID));
3751c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
3761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
3771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
3780e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
379516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
380516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
381a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
382516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
383e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextInitToClient, con(%p)", (RsContext)con);
384a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextInitToClient((RsContext)con);
385516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
386516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
387a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
388516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
389e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con);
390a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextDeinitToClient((RsContext)con);
391516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
392516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
393455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void
394a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
395455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{
396488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *ptr = nullptr;
397455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    jint len = 0;
398455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
399455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        len = _env->GetArrayLength(data);
400488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        jint *ptr = _env->GetIntArrayElements(data, nullptr);
401455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
402e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
403a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
404455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
405455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
406455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
407455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams}
408455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
409455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
410516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
4117a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
4127a629fac82f88126642081b4474879f6a883e313Tim MurraynElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size)
413d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
414e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, type, kind, norm, size);
4157a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, norm, size);
416d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
417d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
4187a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
419a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con,
4209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
421d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
422718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
423e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementCreate2, con(%p)", (RsContext)con);
424718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
425488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jIds = _env->GetLongArrayElements(_ids, nullptr);
426488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr);
4279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
4299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
4309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < fieldCount; i ++) {
4329807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        ids[i] = (RsElement)jIds[i];
4339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        arraySizes[i] = (uint32_t)jArraySizes[i];
4349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
435718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
4362123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
4372123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4382123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **nameArray = names.c_str();
4392123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *sizeArray = names.c_str_len();
4402123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4417a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsElementCreate2((RsContext)con,
4429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                     (const RsElement *)ids, fieldCount,
4437a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
444e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
4452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(ids);
4479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(arraySizes);
4489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
4499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
4509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4510e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)id;
452d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
453d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
454dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
4557a629fac82f88126642081b4474879f6a883e313Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData)
456dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
457dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
458e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementGetNativeData, con(%p)", (RsContext)con);
459dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
460dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
461dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
462dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
46378c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uintptr_t elementData[5];
464a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize);
465dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
466dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
4679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint data = (jint)elementData[i];
4689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_elementData, i, 1, &data);
469dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
470dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
471dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
472dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
473dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
4747a629fac82f88126642081b4474879f6a883e313Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
4759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jlongArray _IDs,
4767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jobjectArray _names,
4777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _arraySizes)
478dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
4799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t dataSize = _env->GetArrayLength(_IDs);
480e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementGetSubElements, con(%p)", (RsContext)con);
481dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
4829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t));
4839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    const char **names = (const char **)malloc(dataSize * sizeof(const char *));
48478c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t));
485dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
486a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
487dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
4889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(uint32_t i = 0; i < dataSize; i++) {
4899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jlong id = (jlong)ids[i];
4909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint arraySize = (jint)arraySizes[i];
491dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
4929807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_IDs, i, 1, &id);
4939807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
494dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
495dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
496dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
497dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
4987d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    free(arraySizes);
499dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
500dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
501d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
502d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
5037a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
5047a629fac82f88126642081b4474879f6a883e313Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
505b109cc78616abee7291eb42094cd156b5db3355dJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
506d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
507b109cc78616abee7291eb42094cd156b5db3355dJason Sams    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
508e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv);
5093b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
5107a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, faces, yuv);
511d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
512d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
513dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
5149807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData)
515dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
516dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
517dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
518dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
519dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
520dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
5210e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    LOG_API("nTypeGetNativeData, con(%p)", (RsContext)con);
522dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
5239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t typeData[6];
524a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6);
525dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
526dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
5279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jlong data = (jlong)typeData[i];
5289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_typeData, i, 1, &data);
529dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
530dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
531dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
532d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
533d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
5347a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
5359807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, jlong pointer)
536d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
537e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
5389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    return (jlong) rsAllocationCreateTyped((RsContext)con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uintptr_t)pointer);
539d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
540d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
541d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
5427a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
5435476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
544e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits);
545a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
5465476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
5475476b450e50939940dcf3f15c92335cee2fc572dJason Sams
54872226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject
5497a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a)
550615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{
551e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
552615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
553a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, (RsAllocation)a);
55472226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    sp<IGraphicBufferProducer> bp = v;
555488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    v->decStrong(nullptr);
556fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
55772226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp);
55872226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    return o;
559fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams}
560fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
561fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void
5627a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
563163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
56406883b71d0b75eee255b292ba66684eddc5fb172Stephen Hines    LOG_API("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)",
565e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)alloc, (Surface *)sur);
566163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
567fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    sp<Surface> s;
568163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    if (sur != 0) {
56964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        s = android_view_Surface_getSurface(_env, sur);
570163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
571163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
5727a629fac82f88126642081b4474879f6a883e313Tim Murray    rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, static_cast<ANativeWindow *>(s.get()));
573163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
574163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
575163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
5767a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
577163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
578e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, alloc);
5797a629fac82f88126642081b4474879f6a883e313Tim Murray    rsAllocationIoSend((RsContext)con, (RsAllocation)alloc);
580163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
581163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
582163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
5837a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
584163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
585e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, alloc);
5867a629fac82f88126642081b4474879f6a883e313Tim Murray    rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc);
587163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
588163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
589163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
590163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
5917a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
592f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
593e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
594a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
595f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
596f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
5977a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
5987a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
599fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
600ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
601a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
602ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
603fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
6045476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
6055476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
6067a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsAllocationCreateFromBitmap((RsContext)con,
60765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  (RsType)type, (RsAllocationMipmapControl)mip,
60865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  ptr, bitmap.getSize(), usage);
6095476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
6105476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
611ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
612fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
6137a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
6147a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
615a314551d69098537337c970da615a8f8af58e1f1Tim Murray{
616a314551d69098537337c970da615a8f8af58e1f1Tim Murray    SkBitmap const * nativeBitmap =
617a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
618a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const SkBitmap& bitmap(*nativeBitmap);
619a314551d69098537337c970da615a8f8af58e1f1Tim Murray
620a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.lockPixels();
621a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const void* ptr = bitmap.getPixels();
6227a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsAllocationCreateTyped((RsContext)con,
623a314551d69098537337c970da615a8f8af58e1f1Tim Murray                                            (RsType)type, (RsAllocationMipmapControl)mip,
6249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                            (uint32_t)usage, (uintptr_t)ptr);
625a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.unlockPixels();
626a314551d69098537337c970da615a8f8af58e1f1Tim Murray    return id;
627a314551d69098537337c970da615a8f8af58e1f1Tim Murray}
628a314551d69098537337c970da615a8f8af58e1f1Tim Murray
6297a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
6307a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
63167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
63267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
633a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
63467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
63567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
6365476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
6375476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
6387a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsAllocationCubeCreateFromBitmap((RsContext)con,
63965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      (RsType)type, (RsAllocationMipmapControl)mip,
64065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      ptr, bitmap.getSize(), usage);
6415476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
6425476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
64367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
64467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
64526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
6467a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
64726ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
64826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
649a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
65026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
651f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
652f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
65326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
6544ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
6554ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
656a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0,
657304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                       0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
65838faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray                       w, h, ptr, bitmap.getSize(), 0);
6594ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
6608a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
6618a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6624ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
6637a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
6648a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
6654ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
666a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
6674ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
6688a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6694ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
6704ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
671a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize());
6724ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
673835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk    bitmap.notifyPixelsChanged();
6748a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
6758a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6764ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
677650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
6784ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
6794ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    nativeBitmap->unlockPixels();
680650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
681650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
6824ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
683414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
684d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
6857a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
6860e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                  jint count, jobject data, jint sizeBytes, jint dataType)
687d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
6886fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
689e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
690e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, dataType);
691488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
692d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
693d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
694414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java array data into the Allocation pointed to by alloc.
695d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
6960e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat//    native void rsnAllocationElementData1D(long con, long id, int xoff, int compIdx, byte[] d, int sizeBytes);
6970e0c0885aed99a119052a792becb5a0c5a93632dAshok BhatnAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod, jint compIdx, jbyteArray data, jint sizeBytes)
69849bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
69949bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
700e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
701488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
702a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
70349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
70449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
70549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
706414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
70749bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
7087a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
7090e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                  jint w, jint h, jobject data, jint sizeBytes, jint dataType)
710d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
7116fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
7126fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
7136fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
714e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
715488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
716d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
717d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
718414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation
719414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc.
72040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
721a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
7227a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff,
723304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstMip, jint dstFace,
724304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint width, jint height,
7257a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff,
726304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcMip, jint srcFace)
727304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{
7284c2e4c80ce519e09e5b00fd7533e64a834d70639Jason Sams    LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
729304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " dstMip(%i), dstFace(%i), width(%i), height(%i),"
730304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
731e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
732304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
733304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
734a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationCopy2DRange((RsContext)con,
735304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)dstAlloc,
736304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstXoff, dstYoff,
737304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
738304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
739304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)srcAlloc,
740304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcXoff, srcYoff,
741304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
742304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk}
743304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
744414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
745304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void
7467a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
7476fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams                    jint w, jint h, jint d, jobject data, int sizeBytes, int dataType)
748b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
7496fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
7506fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i), h(%i), d(%i), sizeBytes(%i)",
751e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, sizeBytes);
752488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
753b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
754b05d689653b1bc94836f716f29e9578677c29075Jason Sams
755414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation
756414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc.
757b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void
758a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
7597a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
760b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint dstMip,
761b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint width, jint height, jint depth,
7627a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
763b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint srcMip)
764b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
765b05d689653b1bc94836f716f29e9578677c29075Jason Sams    LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
766b05d689653b1bc94836f716f29e9578677c29075Jason Sams            " dstMip(%i), width(%i), height(%i),"
767b05d689653b1bc94836f716f29e9578677c29075Jason Sams            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
768e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip,
769e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip);
770b05d689653b1bc94836f716f29e9578677c29075Jason Sams
771a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationCopy3DRange((RsContext)con,
772b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)dstAlloc,
773b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstXoff, dstYoff, dstZoff, dstMip,
774b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            width, height, depth,
775b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)srcAlloc,
776b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            srcXoff, srcYoff, srcZoff, srcMip);
777b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
778b05d689653b1bc94836f716f29e9578677c29075Jason Sams
77940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
780414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
78140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
7827a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType)
783fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
78429868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
785e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
786414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(0, rsAllocationRead, false, (RsContext)con, alloc, ptr, len * typeBytes);
787fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
788fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
789414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
790fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
7917a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
79229868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams                  jint count, jobject data, int sizeBytes, int dataType)
793fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
79429868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
795e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
796e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, alloc, offset, count, sizeBytes, dataType);
797414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(0, rsAllocation1DRead, false, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
798fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
799fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
800414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
801fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
8027a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
80329868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams                  jint w, jint h, jobject data, int sizeBytes, int dataType)
80440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
80529868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
80629868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
80729868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
808e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
809414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(0, rsAllocation2DRead, false, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
81040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
811d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
8127a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
8137a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
814dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
815e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
8167a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong) rsaAllocationGetType((RsContext)con, (RsAllocation)a);
817dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
818dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
8195edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
8207a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
8215edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
822e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, (RsAllocation)alloc, dimX);
823a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
8245edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
8255edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
826aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
827aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8287a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
8297a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset)
830aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
831aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
8320e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", asset);
833aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8347a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
835b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
836b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
837b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8387a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
839a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
840b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
841b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
842488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (mgr == nullptr) {
843b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
844b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
845b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
846b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
847b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
848488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (asset == nullptr) {
849b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
850b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
851b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8527a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsaFileA3DCreateFromAsset((RsContext)con, asset);
853b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
854b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
855b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8567a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
857a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
858b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
859b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
8607a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
861b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
862aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
863aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
864aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8657a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jint
8667a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
867aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
868aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
869a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
8700e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)numEntries;
871aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
872aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
873aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
8747a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
875aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
8760e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
877aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
878aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
879a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
880aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
881aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
882aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
883aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
884aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
885aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
886aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
887aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
888aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8890e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
8907a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
891aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
8920e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
8930e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong id = (jlong)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
894aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
895aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
896d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
897d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
898d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
8990e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
900a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
901b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
9029b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
903b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
9040e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong id = (jlong)rsFontCreateFromFile((RsContext)con,
905e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
906e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
907b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
908b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
909b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
910b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
9110e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
912a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
9130e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                           jstring name, jfloat fontSize, jint dpi, jlong native_asset)
914b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
915b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
916b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
917b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
9180e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong id = (jlong)rsFontCreateFromMemory((RsContext)con,
919e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
920e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
921b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
922b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
923b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
924b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
9250e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
926a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
927b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
928b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
929b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
930488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (mgr == nullptr) {
931b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
932b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
933b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
934b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
935b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
936488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (asset == nullptr) {
937b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
938b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
9399b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
9400e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong id = (jlong)rsFontCreateFromMemory((RsContext)con,
941e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
942e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
943b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
944b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
9459b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
9469b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
9479b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
948bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
949bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
950bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
9517a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
952d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
953e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
954a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
955d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
956d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
957d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9587a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
9594d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
960e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
961a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
9624d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
9634d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
9647c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint
9657a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9667c4caadb939b1563328251c156262c179a685c70Tim Murray{
967e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9687c4caadb939b1563328251c156262c179a685c70Tim Murray    int value = 0;
969a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9707c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9717c4caadb939b1563328251c156262c179a685c70Tim Murray}
9727c4caadb939b1563328251c156262c179a685c70Tim Murray
9734d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
9747a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
9756f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
976e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
977a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
9786f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
9796f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
9806f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
9817a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
982031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
983e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, (void *)script, slot, val);
984a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
985031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
986031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
9877c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong
9887a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9897c4caadb939b1563328251c156262c179a685c70Tim Murray{
990e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9917c4caadb939b1563328251c156262c179a685c70Tim Murray    jlong value = 0;
992a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9937c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9947c4caadb939b1563328251c156262c179a685c70Tim Murray}
9957c4caadb939b1563328251c156262c179a685c70Tim Murray
996031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
9977a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
9984d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
999e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, slot, val);
1000a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
10014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
10024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
10037c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat
10047a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
10057c4caadb939b1563328251c156262c179a685c70Tim Murray{
1006e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10077c4caadb939b1563328251c156262c179a685c70Tim Murray    jfloat value = 0;
1008a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
10097c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
10107c4caadb939b1563328251c156262c179a685c70Tim Murray}
10117c4caadb939b1563328251c156262c179a685c70Tim Murray
10124d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
10137a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
1014ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
1015e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, slot, val);
1016a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
1017ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
1018ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
10197c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble
10207a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
10217c4caadb939b1563328251c156262c179a685c70Tim Murray{
1022e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10237c4caadb939b1563328251c156262c179a685c70Tim Murray    jdouble value = 0;
1024a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
10257c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
10267c4caadb939b1563328251c156262c179a685c70Tim Murray}
10277c4caadb939b1563328251c156262c179a685c70Tim Murray
1028ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
10297a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
10304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
1031e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10324d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
1033488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1034a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
10354d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
10364d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
10374d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1038adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void
10397a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
10407c4caadb939b1563328251c156262c179a685c70Tim Murray{
1041e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10427c4caadb939b1563328251c156262c179a685c70Tim Murray    jint len = _env->GetArrayLength(data);
1043488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1044a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
1045414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    _env->ReleaseByteArrayElements(data, ptr, 0);
10467c4caadb939b1563328251c156262c179a685c70Tim Murray}
10477c4caadb939b1563328251c156262c179a685c70Tim Murray
10487c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void
10497a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jlong elem, jintArray dims)
1050adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{
1051e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1052adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint len = _env->GetArrayLength(data);
1053488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1054adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1055488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr);
1056a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
1057bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines                     (const uint32_t*) dimsPtr, dimsLen);
1058adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1059adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1060adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines}
1061adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines
1062d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1063d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10647a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
1065584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
1066e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
1067584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1068584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
1069584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
1070584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1071584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1072a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
1073584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1074584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
1075584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1076584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
1077584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
1078584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
107922534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
10807a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
108122534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
1082e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
1083a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
108422534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
108522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1086584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
10877a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
1088be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
1089e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
1091488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1092a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
10934d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1094be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
1095be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
10966e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
1097be7b1defb6b11920703b241ba5815fb09487bb02Chris WailesnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot,
1098be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes               jlongArray ains, jlong aout, jbyteArray params,
1099be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes               jintArray limits)
11006e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
1101be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con,
1102be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            (void *)script, slot);
1103949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1104be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint   in_len = 0;
1105488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *in_ptr = nullptr;
1106949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1107488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    RsAllocation *in_allocs = nullptr;
1108949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1109488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (ains != nullptr) {
1110be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        in_len = _env->GetArrayLength(ains);
1111488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        in_ptr = _env->GetLongArrayElements(ains, nullptr);
1112eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes
1113be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        if (sizeof(RsAllocation) == sizeof(jlong)) {
1114be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            in_allocs = (RsAllocation*)in_ptr;
1115949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1116be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        } else {
1117be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            // Convert from 64-bit jlong types to the native pointer type.
1118eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes
1119be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation));
1120be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1121be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            for (int index = in_len; --index >= 0;) {
1122be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                in_allocs[index] = (RsAllocation)in_ptr[index];
1123be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            }
1124be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        }
1125949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1126949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1127be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint   param_len = 0;
1128488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *param_ptr = nullptr;
1129be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1130488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (params != nullptr) {
1131be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        param_len = _env->GetArrayLength(params);
1132488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        param_ptr = _env->GetByteArrayElements(params, nullptr);
1133c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines    }
1134949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1135488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    RsScriptCall sc, *sca = nullptr;
1136be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    uint32_t sc_size = 0;
1137949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1138be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint  limit_len = 0;
1139488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *limit_ptr = nullptr;
1140949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1141488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (limits != nullptr) {
1142be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        limit_len = _env->GetArrayLength(limits);
1143488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        limit_ptr = _env->GetIntArrayElements(limits, nullptr);
1144949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1145be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        assert(limit_len == 6);
1146949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1147be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.xStart     = limit_ptr[0];
1148be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.xEnd       = limit_ptr[1];
1149be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.yStart     = limit_ptr[2];
1150be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.yEnd       = limit_ptr[3];
1151be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.zStart     = limit_ptr[4];
1152be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.zEnd       = limit_ptr[5];
1153be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.strategy   = RS_FOR_EACH_STRATEGY_DONT_CARE;
1154949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1155be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sca = &sc;
1156be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    }
1157949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1158be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    rsScriptForEachMulti((RsContext)con, (RsScript)script, slot,
1159be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                         in_allocs, in_len, (RsAllocation)aout,
1160be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                         param_ptr, param_len, sca, sc_size);
1161949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1162488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (ains != nullptr) {
1163be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
1164949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1165949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1166488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (params != nullptr) {
1167be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT);
1168eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes    }
1169c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines
1170488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (limits != nullptr) {
1171be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT);
1172be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    }
1173949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes}
1174949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1175fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
1176fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
11770e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1178a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
1179e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
1180e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
1181d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1182e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptCCreate, con(%p)", (RsContext)con);
1183e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
1184e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
1185e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
11860e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong ret = 0;
1187488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte* script_ptr = nullptr;
118843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
118943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
119043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
119143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
11928451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
119343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
119443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
119543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
119643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
11978451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
119843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
119943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1200e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
120143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
120243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
12038451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
12048451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
120543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
120643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1207e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
120843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
120943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
1210a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
1211e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
12120e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ret = (jlong)rsScriptCCreate((RsContext)con,
1213e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
1214e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
1215e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
121639ddc950c9064129ead5de04b200106c0659f937Jason Sams
121743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
1218e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
1219e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
122043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
122143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1222d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
12230e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)ret;
1224d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1225d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
12267a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
12277a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
12286ab97682fd444586ee135912a4210417a1c8781bJason Sams{
1229e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid);
12307a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
12316ab97682fd444586ee135912a4210417a1c8781bJason Sams}
12326ab97682fd444586ee135912a4210417a1c8781bJason Sams
12337a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
12347a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
123508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1236e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, (void *)sid, slot, sig);
12370e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
123808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
123908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
12407a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
12417a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
124208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1243e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot);
12440e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
124508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
124608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
12477a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
12489807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
12499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlongArray _dstk, jlongArray _dstf, jlongArray _types)
125008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1251e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con);
125208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
12539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint kernelsLen = _env->GetArrayLength(_kernels);
1254488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr);
12559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
12569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < kernelsLen; ++i) {
12579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
12589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
12599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint srcLen = _env->GetArrayLength(_src);
1261488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr);
12629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
12639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < srcLen; ++i) {
12649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
12659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
12669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstkLen = _env->GetArrayLength(_dstk);
1268488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr);
12699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
12709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstkLen; ++i) {
12719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
12729807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
12739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12749807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstfLen = _env->GetArrayLength(_dstf);
1275488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr);
12769807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
12779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstfLen; ++i) {
12789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
12799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
12809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint typesLen = _env->GetArrayLength(_types);
1282488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr);
12839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
12849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < typesLen; ++i) {
12859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        typesPtr[i] = (RsType)jTypesPtr[i];
12869807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
12879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong id = (jlong)rsScriptGroupCreate((RsContext)con,
12899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
12909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
12919807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
12929807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
12939807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsType *)typesPtr, typesLen * sizeof(RsType));
12949807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12959807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(kernelsPtr);
12969807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(srcPtr);
12979807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstkPtr);
12989807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstfPtr);
12999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(typesPtr);
13009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
13019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
13029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
13039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
13049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
130508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    return id;
130608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
130708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
130808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
13097a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
131008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1311e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
131208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        (void *)gid, (void *)kid, (void *)alloc);
1313a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
131408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
131508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
131608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
13177a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
131808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1319e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
132008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        (void *)gid, (void *)kid, (void *)alloc);
1321a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
132208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
132308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
132408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
13257a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
132608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1327e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
1328a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
132908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
133008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1331d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1332d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
13330e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1334a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
1335331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1336331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
1337331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
1338331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
1339d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1340e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramStoreCreate, con(%p)", (RsContext)con);
13410e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
1342331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1343331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
1344d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1345d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
13460011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
13470011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
13480011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
13497a629fac82f88126642081b4474879f6a883e313Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
13500011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
1351e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1352a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
13530011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
135454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
1355d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
13567a629fac82f88126642081b4474879f6a883e313Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
135754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
1358e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1359a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
136054c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
136154c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
136254c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
13637a629fac82f88126642081b4474879f6a883e313Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
1364d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1365e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1366a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1367d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1368d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
136968afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
1370d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
13717a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1372a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
13739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jobjectArray texNames, jlongArray params)
13747e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
1375b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
1376488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr);
13777e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
13787e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13792123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
13802123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
13812123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
13822123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
13832123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
1384e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
13857e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13869807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
13879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
13889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
13899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
13907a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong ret = (jlong)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
13912123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                             nameArray, texCount, sizeArray,
13929807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                             paramPtr, paramLen);
13932123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
13949807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
13959807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
13967e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
13977e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
13987e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13997e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
14001fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
14011fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
14027a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1403a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
14049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                     jobjectArray texNames, jlongArray params)
14051fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
1406b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
1407488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr);
14080011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
14091fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1410e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
1411ee41112e1539de95596600fd2c6dada5d275217fJason Sams
14122123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
14132123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
14142123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
14152123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
14162123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
14179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
14189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
14199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
14209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
14219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
14227a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong ret = (jlong)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
14232123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                           nameArray, texCount, sizeArray,
14249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                           paramPtr, paramLen);
14252123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
14269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
14279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
14280011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
14291fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
14301fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1431ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1432ebfb436a49673693b98469683451bd9ede797557Jason Sams
14337a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1434a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
1435ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1436e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, pointSprite, cull);
14370e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
1438ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1439ebfb436a49673693b98469683451bd9ede797557Jason Sams
1440d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1441d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1442d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1443d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
144478c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script)
1445d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1446e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
1447a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindRootScript((RsContext)con, (RsScript)script);
1448d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1449d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1450d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
145178c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs)
1452d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1453e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
1454a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
1455d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1456d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1457d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
145878c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf)
1459d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1460e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, (RsProgramFragment)pf);
1461a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
1462d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1463d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
14640826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
146578c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf)
14660826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
1467e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
1468a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
14690826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
14700826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1471d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
147278c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf)
1473ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1474e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
1475a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
1476ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1477ebfb436a49673693b98469683451bd9ede797557Jason Sams
1478d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
147902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
148002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
14810e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1482a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
1483a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
148402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
1485e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nSamplerCreate, con(%p)", (RsContext)con);
14860e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsSamplerCreate((RsContext)con,
1487a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)magFilter,
1488a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)minFilter,
1489a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapS,
1490a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapT,
1491a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapR,
1492a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 aniso);
149302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
149402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1495bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1496bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
14977a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
14980e0c0885aed99a119052a792becb5a0c5a93632dAshok BhatnPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jlong _loop, jfloat q) {
1499e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nPathCreate, con(%p)", (RsContext)con);
1500f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
15017a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic,
15027a629fac82f88126642081b4474879f6a883e313Tim Murray                                   (RsAllocation)_vtx,
15037a629fac82f88126642081b4474879f6a883e313Tim Murray                                   (RsAllocation)_loop, q);
1504f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    return id;
1505f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams}
1506f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
15077a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
15089807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim)
1509164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
1510e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshCreate, con(%p)", (RsContext)con);
1511164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
151225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint vtxLen = _env->GetArrayLength(_vtx);
1513488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr);
15149807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen);
15159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < vtxLen; ++i) {
15169807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i];
15179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
15189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
151925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint idxLen = _env->GetArrayLength(_idx);
1520488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr);
15219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen);
15229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < idxLen; ++i) {
15239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i];
15249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
15259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
152625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint primLen = _env->GetArrayLength(_prim);
1527488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *primPtr = _env->GetIntArrayElements(_prim, nullptr);
1528164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
15299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong id = (jlong)rsMeshCreate((RsContext)con,
153025999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)vtxPtr, vtxLen,
153125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)idxPtr, idxLen,
153225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (uint32_t *)primPtr, primLen);
153380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
15349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(vtxPtr);
15359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(idxPtr);
15369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0);
15379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0);
153825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_prim, primPtr, 0);
153925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    return id;
15409d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
15419d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
154280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
15437a629fac82f88126642081b4474879f6a883e313Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
154480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1545e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
154680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1547a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
154880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
154980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
155080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
155180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
15527a629fac82f88126642081b4474879f6a883e313Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
155380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1554e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
155580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1556a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
155780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
155880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
155980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
156080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
15619807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs)
156280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1563e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
156480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
156580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1566a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
156780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
156880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
15699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jlong alloc = (jlong)allocs[i];
15709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_ids, i, 1, &alloc);
157180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
157280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
157380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
157480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
157580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
157680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
15779807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices)
157880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1579e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
158080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
158180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
158280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
158380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1584a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
158580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
158680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
15879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jlong alloc = (jlong)allocs[i];
15889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint prim = (jint)prims[i];
15899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_idxIds, i, 1, &alloc);
15909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_primitives, i, 1, &prim);
159180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
159280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
159380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
159480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1595164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1596164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1597f0c62b26765f1e0ec0df8fceeecb77fca690c29aTim Murraystatic jint
1598f0c62b26765f1e0ec0df8fceeecb77fca690c29aTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) {
1599f0c62b26765f1e0ec0df8fceeecb77fca690c29aTim Murray    return (jint)sizeof(void*);
1600f0c62b26765f1e0ec0df8fceeecb77fca690c29aTim Murray}
1601f0c62b26765f1e0ec0df8fceeecb77fca690c29aTim Murray
1602f0c62b26765f1e0ec0df8fceeecb77fca690c29aTim Murray
1603164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1604164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1605d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
160694d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1607d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1608d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
16091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
16101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1611a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nDeviceCreate",                  "()J",                                     (void*)nDeviceCreate },
1612a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nDeviceDestroy",                 "(J)V",                                    (void*)nDeviceDestroy },
1613a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nDeviceSetConfig",               "(JII)V",                                  (void*)nDeviceSetConfig },
1614a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextGetUserMessage",         "(J[I)I",                                  (void*)nContextGetUserMessage },
1615a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextGetErrorMessage",        "(J)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1616a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextPeekMessage",            "(J[I)I",                                  (void*)nContextPeekMessage },
16171c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1618a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextInitToClient",           "(J)V",                                    (void*)nContextInitToClient },
1619a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextDeinitToClient",         "(J)V",                                    (void*)nContextDeinitToClient },
16202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
16212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
16222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
1623a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextCreate",                 "(JIII)J",                               (void*)nContextCreate },
1624a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextCreateGL",               "(JIIIIIIIIIIIIFI)J",                    (void*)nContextCreateGL },
1625a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextFinish",                 "(J)V",                                  (void*)nContextFinish },
1626a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextSetPriority",            "(JI)V",                                 (void*)nContextSetPriority },
1627a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextSetSurface",             "(JIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1628a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextDestroy",                "(J)V",                                  (void*)nContextDestroy },
1629a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextDump",                   "(JI)V",                                 (void*)nContextDump },
1630a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextPause",                  "(J)V",                                  (void*)nContextPause },
1631a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextResume",                 "(J)V",                                  (void*)nContextResume },
1632a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextSendMessage",            "(JI[I)V",                               (void*)nContextSendMessage },
16337a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAssignName",                    "(JJ[B)V",                               (void*)nAssignName },
16347a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnGetName",                       "(JJ)Ljava/lang/String;",                (void*)nGetName },
16357a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnObjDestroy",                    "(JJ)V",                                 (void*)nObjDestroy },
1636a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16377a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DCreateFromFile",         "(JLjava/lang/String;)J",                (void*)nFileA3DCreateFromFile },
16380e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream",  "(JJ)J",                                 (void*)nFileA3DCreateFromAssetStream },
16397a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J",            (void*)nFileA3DCreateFromAsset },
16407a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DGetNumIndexEntries",     "(JJ)I",                                 (void*)nFileA3DGetNumIndexEntries },
16417a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DGetIndexEntries",        "(JJI[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
16420e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex",        "(JJI)J",                                (void*)nFileA3DGetEntryByIndex },
1643a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16440e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile",            "(JLjava/lang/String;FI)J",              (void*)nFontCreateFromFile },
16450e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream",     "(JLjava/lang/String;FIJ)J",             (void*)nFontCreateFromAssetStream },
16460e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J",            (void*)nFontCreateFromAsset },
1647a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16487a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnElementCreate",                 "(JJIZI)J",                              (void*)nElementCreate },
16499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2",                "(J[J[Ljava/lang/String;[I)J",           (void*)nElementCreate2 },
16507a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnElementGetNativeData",          "(JJ[I)V",                               (void*)nElementGetNativeData },
16519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements",         "(JJ[J[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
16527a629fac82f88126642081b4474879f6a883e313Tim Murray
16537a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnTypeCreate",                    "(JJIIIZZI)J",                           (void*)nTypeCreate },
16549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData",             "(JJ[J)V",                               (void*)nTypeGetNativeData },
16557a629fac82f88126642081b4474879f6a883e313Tim Murray
16569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped",         "(JJIIJ)J",                               (void*)nAllocationCreateTyped },
16577a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCreateFromBitmap",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateFromBitmap },
16587a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCreateBitmapBackedAllocation",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateBitmapBackedAllocation },
16597a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCubeCreateFromBitmap },
16607a629fac82f88126642081b4474879f6a883e313Tim Murray
16617a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCopyFromBitmap",      "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
16627a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCopyToBitmap",        "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
16637a629fac82f88126642081b4474879f6a883e313Tim Murray
16647a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationSyncAll",             "(JJI)V",                                (void*)nAllocationSyncAll },
16657a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationGetSurface",          "(JJ)Landroid/view/Surface;",            (void*)nAllocationGetSurface },
16667a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationSetSurface",          "(JJLandroid/view/Surface;)V",           (void*)nAllocationSetSurface },
16677a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationIoSend",              "(JJ)V",                                 (void*)nAllocationIoSend },
16687a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationIoReceive",           "(JJ)V",                                 (void*)nAllocationIoReceive },
16697a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationData1D },
16707a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationElementData1D",       "(JJIII[BI)V",                           (void*)nAllocationElementData1D },
16717a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationData2D },
16727a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData2D",              "(JJIIIIIIJIIII)V",                      (void*)nAllocationData2D_alloc },
16737a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIILjava/lang/Object;II)V",      (void*)nAllocationData3D },
16747a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIIJIIII)V",                     (void*)nAllocationData3D_alloc },
16757a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationRead",                "(JJLjava/lang/Object;I)V",              (void*)nAllocationRead },
16767a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationRead1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationRead1D },
16777a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationRead2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationRead2D },
16787a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationGetType",             "(JJ)J",                                 (void*)nAllocationGetType},
16797a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationResize1D",            "(JJI)V",                                (void*)nAllocationResize1D },
16807a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationGenerateMipmaps",     "(JJ)V",                                 (void*)nAllocationGenerateMipmaps },
16817a629fac82f88126642081b4474879f6a883e313Tim Murray
16827a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptBindAllocation",          "(JJJI)V",                               (void*)nScriptBindAllocation },
16837a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetTimeZone",             "(JJ[B)V",                               (void*)nScriptSetTimeZone },
16847a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptInvoke",                  "(JJI)V",                                (void*)nScriptInvoke },
16857a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptInvokeV",                 "(JJI[B)V",                              (void*)nScriptInvokeV },
1686be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1687be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes{"rsnScriptForEach",                 "(JJI[JJ[B[I)V",                         (void*)nScriptForEach },
1688be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
16897a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarI",                 "(JJII)V",                               (void*)nScriptSetVarI },
16907a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarI",                 "(JJI)I",                                (void*)nScriptGetVarI },
16917a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarJ",                 "(JJIJ)V",                               (void*)nScriptSetVarJ },
16927a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarJ",                 "(JJI)J",                                (void*)nScriptGetVarJ },
16937a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarF",                 "(JJIF)V",                               (void*)nScriptSetVarF },
16947a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarF",                 "(JJI)F",                                (void*)nScriptGetVarF },
16957a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarD",                 "(JJID)V",                               (void*)nScriptSetVarD },
16967a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarD",                 "(JJI)D",                                (void*)nScriptGetVarD },
16977a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarV",                 "(JJI[B)V",                              (void*)nScriptSetVarV },
16987a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarV",                 "(JJI[B)V",                              (void*)nScriptGetVarV },
16997a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarVE",                "(JJI[BJ[I)V",                           (void*)nScriptSetVarVE },
17007a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarObj",               "(JJIJ)V",                               (void*)nScriptSetVarObj },
1701a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
17020e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate",                 "(JLjava/lang/String;Ljava/lang/String;[BI)J",  (void*)nScriptCCreate },
17037a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptIntrinsicCreate",         "(JIJ)J",                                (void*)nScriptIntrinsicCreate },
17047a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptKernelIDCreate",          "(JJII)J",                               (void*)nScriptKernelIDCreate },
17057a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptFieldIDCreate",           "(JJI)J",                                (void*)nScriptFieldIDCreate },
17069807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate",             "(J[J[J[J[J[J)J",                        (void*)nScriptGroupCreate },
17077a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGroupSetInput",           "(JJJJ)V",                               (void*)nScriptGroupSetInput },
17087a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGroupSetOutput",          "(JJJJ)V",                               (void*)nScriptGroupSetOutput },
17097a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGroupExecute",            "(JJ)V",                                 (void*)nScriptGroupExecute },
1710a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
17110e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate",            "(JZZZZZZIII)J",                         (void*)nProgramStoreCreate },
1712a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
17137a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramBindConstants",          "(JJIJ)V",                               (void*)nProgramBindConstants },
17147a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramBindTexture",            "(JJIJ)V",                               (void*)nProgramBindTexture },
17157a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramBindSampler",            "(JJIJ)V",                               (void*)nProgramBindSampler },
1716a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
17179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate",         "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramFragmentCreate },
17187a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramRasterCreate",           "(JZI)J",                                (void*)nProgramRasterCreate },
17199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate",           "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramVertexCreate },
1720a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
172178c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript",         "(JJ)V",                                 (void*)nContextBindRootScript },
172278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore",       "(JJ)V",                                 (void*)nContextBindProgramStore },
172378c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment",    "(JJ)V",                                 (void*)nContextBindProgramFragment },
172478c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex",      "(JJ)V",                                 (void*)nContextBindProgramVertex },
172578c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster",      "(JJ)V",                                 (void*)nContextBindProgramRaster },
1726a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
17270e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate",                 "(JIIIIIF)J",                            (void*)nSamplerCreate },
1728a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
17290e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnPathCreate",                    "(JIZJJF)J",                             (void*)nPathCreate },
17309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate",                    "(J[J[J[I)J",                            (void*)nMeshCreate },
1731a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
17327a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnMeshGetVertexBufferCount",      "(JJ)I",                                 (void*)nMeshGetVertexBufferCount },
17337a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnMeshGetIndexCount",             "(JJ)I",                                 (void*)nMeshGetIndexCount },
17349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices",               "(JJ[JI)V",                              (void*)nMeshGetVertices },
17359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices",                "(JJ[J[II)V",                            (void*)nMeshGetIndices },
173680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1737f0c62b26765f1e0ec0df8fceeecb77fca690c29aTim Murray{"rsnSystemGetPointerSize",          "()I",                                   (void*)nSystemGetPointerSize },
1738d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1739d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1740d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1741d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1742d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1743d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1744d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1745d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1746d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1747d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1748d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1749d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1750488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    JNIEnv* env = nullptr;
1751d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1752d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1753d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
17543762c311729fe9f3af085c14c5c1fb471d994c03Steve Block        ALOGE("ERROR: GetEnv failed\n");
1755d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1756d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1757488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    assert(env != nullptr);
1758d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1759d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
17600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat        ALOGE("ERROR: Renderscript native registration failed\n");
1761d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1762d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1763d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1764d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1765d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1766d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1767d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1768d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1769d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1770