android_renderscript_RenderScript.cpp revision 78c0ce56129d8109fa2427de769f4d25a971d162
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
536fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams#define PER_ARRAY_TYPE(flag, fnc, ...) {                                                \
546fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    jint len = 0;                                                                       \
556fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    void *ptr = NULL;                                                                   \
5629868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    size_t typeBytes = 0;                                                               \
576fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    switch(dataType) {                                                                  \
586fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_FLOAT_32:                                                              \
596fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jfloatArray)data);                                  \
606fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetFloatArrayElements((jfloatArray)data, flag);                     \
6129868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 4;                                                                  \
626fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
636fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, JNI_ABORT);   \
646fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
656fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_FLOAT_64:                                                              \
666fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jdoubleArray)data);                                 \
676fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag);                   \
6829868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 8;                                                                  \
696fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
706fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, JNI_ABORT);\
716fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
726fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_8:                                                              \
736fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_8:                                                            \
746fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jbyteArray)data);                                   \
756fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetByteArrayElements((jbyteArray)data, flag);                       \
7629868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 1;                                                                  \
776fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
786fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, JNI_ABORT);       \
796fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
806fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_16:                                                             \
816fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_16:                                                           \
826fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jshortArray)data);                                  \
836fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetShortArrayElements((jshortArray)data, flag);                     \
8429868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 2;                                                                  \
856fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
866fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, JNI_ABORT);   \
876fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
886fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_32:                                                             \
896fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_32:                                                           \
906fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jintArray)data);                                    \
916fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetIntArrayElements((jintArray)data, flag);                         \
9229868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 4;                                                                  \
936fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
946fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, JNI_ABORT);         \
956fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
966fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_64:                                                             \
976fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_64:                                                           \
986fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jlongArray)data);                                   \
996fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetLongArrayElements((jlongArray)data, flag);                       \
10029868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 8;                                                                  \
1016fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
1026fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, JNI_ABORT);      \
1036fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
1046fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    default:                                                                            \
1056fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        break;                                                                          \
1066fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    }                                                                                   \
1076fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams}
1086fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams
1096fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams
110b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 {
111b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic:
1122123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
113b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fCStr = env->GetStringUTFChars(str, NULL);
114b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fLength = env->GetStringUTFLength(str);
115b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1162123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringToUTF8() {
117b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
118b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
119b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* c_str() const { return fCStr; }
120b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize length() const { return fLength; }
121b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
122b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate:
123b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    JNIEnv*     fEnv;
124b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jstring     fJStr;
125b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* fCStr;
126b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize       fLength;
127b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk};
128b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1292123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 {
1302123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic:
1312123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
1322123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
1332123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        mCStrings = NULL;
1342123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        mSizeArray = NULL;
1352123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        if (stringsLength > 0) {
1362123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
1372123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
1382123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            for (jsize ct = 0; ct < stringsLength; ct ++) {
1392123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
1402123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL);
1412123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
1422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            }
1432123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
1442123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
1452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringArrayToUTF8() {
1462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        for (jsize ct=0; ct < mStringsLength; ct++) {
1472123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
1482123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
1492123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
1502123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mCStrings);
1512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mSizeArray);
1522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
1532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **c_str() const { return mCStrings; }
1542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *c_str_len() const { return mSizeArray; }
1552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize length() const { return mStringsLength; }
1562123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
1572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate:
1582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    JNIEnv      *mEnv;
1592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jobjectArray mStrings;
1602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **mCStrings;
1612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t      *mSizeArray;
1622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize        mStringsLength;
1632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk};
1642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
165d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
166d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
167ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
168ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
16943ee06857bb7f99446d1d84f8789016c5d105558Jason Samsstatic jfieldID gTypeNativeCache = 0;
170d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
171d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
172d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
173a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    gContextId             = _env->GetFieldID(_this, "mContext", "J");
174ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
175ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
176a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J");
177d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
178d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
179d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
180d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1813eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
182a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con)
18396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
184e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextFinish, con(%p)", (RsContext)con);
185a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextFinish((RsContext)con);
18696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
18796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
18896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
1897a629fac82f88126642081b4474879f6a883e313Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str)
1903eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
191e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
1923eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
1933eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
194a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len);
1953eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
1963eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
1973eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
198fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
1997a629fac82f88126642081b4474879f6a883e313Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj)
200fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
201e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
202fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    const char *name = NULL;
203a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaGetName((RsContext)con, (void *)obj, &name);
204581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    if(name == NULL || strlen(name) == 0) {
205581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk        return NULL;
206581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
207fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
208fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
209fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
2107ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
2117a629fac82f88126642081b4474879f6a883e313Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
2127ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
213e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
214a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsObjDestroy((RsContext)con, (void *)obj);
2157ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
2167ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
2173eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
2183eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
219a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic jlong
220d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
221d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
222d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
2230e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsDeviceCreate();
224d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
225d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
226d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
227b75c27e8704f3933601afba5a9f719de2b927355Tim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
228d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
229d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
230d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
231d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
232d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
233ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
234b75c27e8704f3933601afba5a9f719de2b927355Tim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
235ebfb436a49673693b98469683451bd9ede797557Jason Sams{
236ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
237ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
238ebfb436a49673693b98469683451bd9ede797557Jason Sams}
239ebfb436a49673693b98469683451bd9ede797557Jason Sams
240a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic jlong
241b75c27e8704f3933601afba5a9f719de2b927355Tim MurraynContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct)
242d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
243d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
2440e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsContextCreate((RsDevice)dev, ver, sdkVer, (RsContextType)ct, 0);
245704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
246704ff64b099406bb328898a7443921f22dbffd6dJason Sams
247a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic jlong
248b75c27e8704f3933601afba5a9f719de2b927355Tim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
2490e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint colorMin, jint colorPref,
2500e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint alphaMin, jint alphaPref,
2510e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint depthMin, jint depthPref,
2520e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint stencilMin, jint stencilPref,
2530e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint samplesMin, jint samplesPref, jfloat samplesQ,
2540e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint dpi)
25511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
25611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
25711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
25811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
25911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
26011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
26111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
26211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
26311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
26411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
26511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
26611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
267704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
2680e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
269d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
270d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
271d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
272a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
2737d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
274e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
275a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextSetPriority((RsContext)con, p);
2767d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
2777d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2787d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2797d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2807d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
281a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd)
282efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
283e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, width, height, (Surface *)wnd);
284efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
2856c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk    ANativeWindow * window = NULL;
286efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    if (wnd == NULL) {
287efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
288efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
28964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        window = android_view_Surface_getNativeWindow(_env, wnd).get();
290efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
291efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
292a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextSetSurface((RsContext)con, width, height, window);
293efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
294efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
295efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
296a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con)
297d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
298e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextDestroy, con(%p)", (RsContext)con);
299a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextDestroy((RsContext)con);
300d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
301d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
302715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
303a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
304715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
305715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
306715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
307715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
308d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
309d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
310a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con)
31165e7aa56f56097418d617663683544c25b3988eaJason Sams{
312e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextPause, con(%p)", (RsContext)con);
313a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextPause((RsContext)con);
31465e7aa56f56097418d617663683544c25b3988eaJason Sams}
31565e7aa56f56097418d617663683544c25b3988eaJason Sams
31665e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
317a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con)
31865e7aa56f56097418d617663683544c25b3988eaJason Sams{
319e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextResume, con(%p)", (RsContext)con);
320a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextResume((RsContext)con);
32165e7aa56f56097418d617663683544c25b3988eaJason Sams}
32265e7aa56f56097418d617663683544c25b3988eaJason Sams
3231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3241c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
325a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
3261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
327e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con);
3281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
3291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
3311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
332a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = rsContextGetMessage((RsContext)con,
33365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 buf, sizeof(buf),
33465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
335edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
3361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
33771f2cf116aab893e224056c38ab146bd1538dd3eSteve Block        ALOGV("message receive buffer too small.  %i", receiveLen);
3381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
3391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
3401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
342edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint
343a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
344516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
345516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
346e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
347516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
348516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
3491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
350a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = rsContextGetMessage((RsContext)con,
35165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 ptr, len * 4,
35265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
353edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
354516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
35571f2cf116aab893e224056c38ab146bd1538dd3eSteve Block        ALOGV("message receive buffer too small.  %i", receiveLen);
356516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
357516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
3580e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
3591c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
362a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
3631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
364e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextPeekMessage, con(%p)", (RsContext)con);
3651c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
3661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
3671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
368a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
369edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                  &subID, sizeof(subID));
3701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
3711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
3721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
3730e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
374516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
375516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
376a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
377516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
378e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextInitToClient, con(%p)", (RsContext)con);
379a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextInitToClient((RsContext)con);
380516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
381516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
382a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
383516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
384e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con);
385a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextDeinitToClient((RsContext)con);
386516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
387516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
388455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void
389a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
390455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{
391455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    jint *ptr = NULL;
392455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    jint len = 0;
393455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
394455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        len = _env->GetArrayLength(data);
39557cf560719e5cbe4ed52e54bb0556e6f79bbe061Stephen Hines        ptr = _env->GetIntArrayElements(data, NULL);
396455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
397e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
398a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
399455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
400455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
401455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
402455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams}
403455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
404455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
405516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
4067a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
4077a629fac82f88126642081b4474879f6a883e313Tim MurraynElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size)
408d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
409e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, type, kind, norm, size);
4107a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, norm, size);
411d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
412d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
4137a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
414a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con,
4159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
416d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
417718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
418e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementCreate2, con(%p)", (RsContext)con);
419718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
4209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jIds = _env->GetLongArrayElements(_ids, NULL);
4219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
4229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
4249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
4259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < fieldCount; i ++) {
4279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        ids[i] = (RsElement)jIds[i];
4289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        arraySizes[i] = (uint32_t)jArraySizes[i];
4299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
430718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
4312123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
4322123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4332123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **nameArray = names.c_str();
4342123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *sizeArray = names.c_str_len();
4352123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4367a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsElementCreate2((RsContext)con,
4379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                     (const RsElement *)ids, fieldCount,
4387a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
439e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
4402123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(ids);
4429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(arraySizes);
4439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
4449807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
4459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4460e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)id;
447d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
448d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
449dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
4507a629fac82f88126642081b4474879f6a883e313Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData)
451dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
452dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
453e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementGetNativeData, con(%p)", (RsContext)con);
454dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
455dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
456dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
457dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
45878c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uintptr_t elementData[5];
459a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize);
460dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
461dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
4629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint data = (jint)elementData[i];
4639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_elementData, i, 1, &data);
464dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
465dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
466dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
467dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
468dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
4697a629fac82f88126642081b4474879f6a883e313Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
4709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jlongArray _IDs,
4717d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jobjectArray _names,
4727d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _arraySizes)
473dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
4749807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t dataSize = _env->GetArrayLength(_IDs);
475e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementGetSubElements, con(%p)", (RsContext)con);
476dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
4779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t));
4789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    const char **names = (const char **)malloc(dataSize * sizeof(const char *));
47978c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t));
480dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
481a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
482dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
4839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(uint32_t i = 0; i < dataSize; i++) {
4849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jlong id = (jlong)ids[i];
4859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint arraySize = (jint)arraySizes[i];
486dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
4879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_IDs, i, 1, &id);
4889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
489dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
490dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
491dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
492dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
4937d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    free(arraySizes);
494dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
495dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
496d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
497d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
4987a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
4997a629fac82f88126642081b4474879f6a883e313Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
500b109cc78616abee7291eb42094cd156b5db3355dJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
501d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
502b109cc78616abee7291eb42094cd156b5db3355dJason Sams    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
503e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv);
5043b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
5057a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, faces, yuv);
506d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
507d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
508dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
5099807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData)
510dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
511dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
512dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
513dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
514dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
515dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
5160e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    LOG_API("nTypeGetNativeData, con(%p)", (RsContext)con);
517dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
5189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t typeData[6];
519a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6);
520dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
521dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
5229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jlong data = (jlong)typeData[i];
5239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_typeData, i, 1, &data);
524dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
525dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
526dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
527d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
528d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
5297a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
5309807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, jlong pointer)
531d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
532e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
5339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    return (jlong) rsAllocationCreateTyped((RsContext)con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uintptr_t)pointer);
534d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
535d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
536d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
5377a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
5385476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
539e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits);
540a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
5415476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
5425476b450e50939940dcf3f15c92335cee2fc572dJason Sams
54372226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject
5447a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a)
545615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{
546e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
547615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
548a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, (RsAllocation)a);
54972226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    sp<IGraphicBufferProducer> bp = v;
55072226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    v->decStrong(NULL);
551fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
55272226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp);
55372226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    return o;
554fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams}
555fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
556fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void
5577a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
558163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
55906883b71d0b75eee255b292ba66684eddc5fb172Stephen Hines    LOG_API("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)",
560e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)alloc, (Surface *)sur);
561163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
562fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    sp<Surface> s;
563163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    if (sur != 0) {
56464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        s = android_view_Surface_getSurface(_env, sur);
565163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
566163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
5677a629fac82f88126642081b4474879f6a883e313Tim Murray    rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, static_cast<ANativeWindow *>(s.get()));
568163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
569163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
570163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
5717a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
572163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
573e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, alloc);
5747a629fac82f88126642081b4474879f6a883e313Tim Murray    rsAllocationIoSend((RsContext)con, (RsAllocation)alloc);
575163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
576163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
577163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
5787a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
579163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
580e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, alloc);
5817a629fac82f88126642081b4474879f6a883e313Tim Murray    rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc);
582163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
583163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
584163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
585163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
5867a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
587f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
588e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
589a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
590f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
591f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
5927a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
5937a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
594fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
595ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
596a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
597ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
598fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
5995476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
6005476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
6017a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsAllocationCreateFromBitmap((RsContext)con,
60265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  (RsType)type, (RsAllocationMipmapControl)mip,
60365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  ptr, bitmap.getSize(), usage);
6045476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
6055476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
606ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
607fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
6087a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
6097a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
610a314551d69098537337c970da615a8f8af58e1f1Tim Murray{
611a314551d69098537337c970da615a8f8af58e1f1Tim Murray    SkBitmap const * nativeBitmap =
612a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
613a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const SkBitmap& bitmap(*nativeBitmap);
614a314551d69098537337c970da615a8f8af58e1f1Tim Murray
615a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.lockPixels();
616a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const void* ptr = bitmap.getPixels();
6177a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsAllocationCreateTyped((RsContext)con,
618a314551d69098537337c970da615a8f8af58e1f1Tim Murray                                            (RsType)type, (RsAllocationMipmapControl)mip,
6199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                            (uint32_t)usage, (uintptr_t)ptr);
620a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.unlockPixels();
621a314551d69098537337c970da615a8f8af58e1f1Tim Murray    return id;
622a314551d69098537337c970da615a8f8af58e1f1Tim Murray}
623a314551d69098537337c970da615a8f8af58e1f1Tim Murray
6247a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
6257a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
62667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
62767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
628a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
62967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
63067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
6315476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
6325476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
6337a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsAllocationCubeCreateFromBitmap((RsContext)con,
63465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      (RsType)type, (RsAllocationMipmapControl)mip,
63565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      ptr, bitmap.getSize(), usage);
6365476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
6375476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
63867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
63967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
64026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
6417a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
64226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
64326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
644a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
64526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
646f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
647f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
64826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
6494ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
6504ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
651a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0,
652304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                       0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
65338faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray                       w, h, ptr, bitmap.getSize(), 0);
6544ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
6558a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
6568a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6574ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
6587a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
6598a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
6604ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
661a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
6624ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
6638a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6644ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
6654ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
666a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize());
6674ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
668835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk    bitmap.notifyPixelsChanged();
6698a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
6708a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6714ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
672650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
6734ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
6744ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    nativeBitmap->unlockPixels();
675650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
676650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
6774ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
678d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
6797a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
6800e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                  jint count, jobject data, jint sizeBytes, jint dataType)
681d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
6826fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
683e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
684e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, dataType);
685a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(NULL, rsAllocation1DData, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
686d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
687d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
688d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
6890e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat//    native void rsnAllocationElementData1D(long con, long id, int xoff, int compIdx, byte[] d, int sizeBytes);
6900e0c0885aed99a119052a792becb5a0c5a93632dAshok BhatnAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod, jint compIdx, jbyteArray data, jint sizeBytes)
69149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
69249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
693e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
69449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
695a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
69649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
69749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
69849bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
69949bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
7007a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
7010e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                  jint w, jint h, jobject data, jint sizeBytes, jint dataType)
702d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
7036fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
7046fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
7056fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
706e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
707a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(NULL, rsAllocation2DData, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
708d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
709d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
71040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
711a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
7127a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff,
713304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstMip, jint dstFace,
714304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint width, jint height,
7157a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff,
716304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcMip, jint srcFace)
717304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{
7184c2e4c80ce519e09e5b00fd7533e64a834d70639Jason Sams    LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
719304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " dstMip(%i), dstFace(%i), width(%i), height(%i),"
720304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
721e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
722304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
723304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
724a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationCopy2DRange((RsContext)con,
725304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)dstAlloc,
726304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstXoff, dstYoff,
727304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
728304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
729304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)srcAlloc,
730304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcXoff, srcYoff,
731304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
732304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk}
733304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
734304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void
7357a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
7366fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams                    jint w, jint h, jint d, jobject data, int sizeBytes, int dataType)
737b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
7386fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
7396fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i), h(%i), d(%i), sizeBytes(%i)",
740e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, sizeBytes);
741a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(NULL, rsAllocation3DData, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
742b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
743b05d689653b1bc94836f716f29e9578677c29075Jason Sams
744b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void
745a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
7467a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
747b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint dstMip,
748b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint width, jint height, jint depth,
7497a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
750b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint srcMip)
751b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
752b05d689653b1bc94836f716f29e9578677c29075Jason Sams    LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
753b05d689653b1bc94836f716f29e9578677c29075Jason Sams            " dstMip(%i), width(%i), height(%i),"
754b05d689653b1bc94836f716f29e9578677c29075Jason Sams            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
755e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip,
756e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip);
757b05d689653b1bc94836f716f29e9578677c29075Jason Sams
758a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationCopy3DRange((RsContext)con,
759b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)dstAlloc,
760b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstXoff, dstYoff, dstZoff, dstMip,
761b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            width, height, depth,
762b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)srcAlloc,
763b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            srcXoff, srcYoff, srcZoff, srcMip);
764b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
765b05d689653b1bc94836f716f29e9578677c29075Jason Sams
76640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
76740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
7687a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType)
769fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
77029868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
771e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
772a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(0, rsAllocationRead, (RsContext)con, alloc, ptr, len * typeBytes);
773fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
774fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
775fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
7767a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
77729868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams                  jint count, jobject data, int sizeBytes, int dataType)
778fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
77929868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
780e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
781e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, alloc, offset, count, sizeBytes, dataType);
782a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(0, rsAllocation1DRead, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
783fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
784fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
785fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
7867a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
78729868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams                  jint w, jint h, jobject data, int sizeBytes, int dataType)
78840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
78929868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
79029868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
79129868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
792e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
793a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(0, rsAllocation2DRead, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
79440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
795d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
7967a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
7977a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
798dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
799e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
8007a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong) rsaAllocationGetType((RsContext)con, (RsAllocation)a);
801dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
802dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
8035edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
8047a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
8055edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
806e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, (RsAllocation)alloc, dimX);
807a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
8085edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
8095edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
810aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
811aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8127a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
8137a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset)
814aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
815aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
8160e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", asset);
817aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8187a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
819b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
820b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
821b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8227a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
823a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
824b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
825b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
826b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
827b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
828b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
829b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
830b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
831b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
832b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
833b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
834b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
835b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8367a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsaFileA3DCreateFromAsset((RsContext)con, asset);
837b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
838b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
839b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8407a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
841a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
842b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
843b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
8447a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
845b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
846aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
847aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
848aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8497a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jint
8507a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
851aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
852aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
853a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
8540e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)numEntries;
855aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
856aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
857aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
8587a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
859aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
8600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
861aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
862aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
863a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
864aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
865aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
866aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
867aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
868aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
869aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
870aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
871aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
872aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8730e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
8747a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
875aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
8760e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
8770e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong id = (jlong)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
878aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
879aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
880d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
881d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
882d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
8830e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
884a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
885b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
8869b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
887b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
8880e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong id = (jlong)rsFontCreateFromFile((RsContext)con,
889e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
890e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
891b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
892b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
893b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
894b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8950e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
896a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
8970e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                           jstring name, jfloat fontSize, jint dpi, jlong native_asset)
898b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
899b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
900b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
901b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
9020e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong id = (jlong)rsFontCreateFromMemory((RsContext)con,
903e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
904e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
905b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
906b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
907b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
908b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
9090e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
910a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
911b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
912b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
913b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
914b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
915b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
916b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
917b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
918b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
919b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
920b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
921b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
922b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
9239b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
9240e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong id = (jlong)rsFontCreateFromMemory((RsContext)con,
925e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
926e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
927b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
928b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
9299b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
9309b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
9319b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
932bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
933bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
934bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
9357a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
936d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
937e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
938a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
939d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
940d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
941d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9427a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
9434d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
944e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
945a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
9464d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
9474d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
9487c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint
9497a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9507c4caadb939b1563328251c156262c179a685c70Tim Murray{
951e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9527c4caadb939b1563328251c156262c179a685c70Tim Murray    int value = 0;
953a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9547c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9557c4caadb939b1563328251c156262c179a685c70Tim Murray}
9567c4caadb939b1563328251c156262c179a685c70Tim Murray
9574d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
9587a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
9596f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
960e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
961a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
9626f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
9636f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
9646f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
9657a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
966031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
967e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, (void *)script, slot, val);
968a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
969031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
970031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
9717c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong
9727a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9737c4caadb939b1563328251c156262c179a685c70Tim Murray{
974e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9757c4caadb939b1563328251c156262c179a685c70Tim Murray    jlong value = 0;
976a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9777c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9787c4caadb939b1563328251c156262c179a685c70Tim Murray}
9797c4caadb939b1563328251c156262c179a685c70Tim Murray
980031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
9817a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
9824d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
983e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, slot, val);
984a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
9854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
9864d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
9877c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat
9887a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9897c4caadb939b1563328251c156262c179a685c70Tim Murray{
990e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9917c4caadb939b1563328251c156262c179a685c70Tim Murray    jfloat value = 0;
992a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9937c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9947c4caadb939b1563328251c156262c179a685c70Tim Murray}
9957c4caadb939b1563328251c156262c179a685c70Tim Murray
9964d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
9977a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
998ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
999e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, slot, val);
1000a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
1001ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
1002ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
10037c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble
10047a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
10057c4caadb939b1563328251c156262c179a685c70Tim Murray{
1006e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10077c4caadb939b1563328251c156262c179a685c70Tim Murray    jdouble value = 0;
1008a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
10097c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
10107c4caadb939b1563328251c156262c179a685c70Tim Murray}
10117c4caadb939b1563328251c156262c179a685c70Tim Murray
1012ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
10137a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
10144d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
1015e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10164d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
10174d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1018a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
10194d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
10204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
10214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1022adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void
10237a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
10247c4caadb939b1563328251c156262c179a685c70Tim Murray{
1025e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10267c4caadb939b1563328251c156262c179a685c70Tim Murray    jint len = _env->GetArrayLength(data);
10277c4caadb939b1563328251c156262c179a685c70Tim Murray    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1028a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
10297c4caadb939b1563328251c156262c179a685c70Tim Murray    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
10307c4caadb939b1563328251c156262c179a685c70Tim Murray}
10317c4caadb939b1563328251c156262c179a685c70Tim Murray
10327c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void
10337a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jlong elem, jintArray dims)
1034adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{
1035e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1036adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint len = _env->GetArrayLength(data);
1037adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1038adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1039adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
1040a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
1041adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines                     (const size_t*) dimsPtr, dimsLen);
1042adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1043adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1044adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines}
1045adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines
1046d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1047d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10487a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
1049584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
1050e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
1051584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1052584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
1053584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
1054584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1055584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1056a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
1057584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1058584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
1059584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1060584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
1061584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
1062584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
106322534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
10647a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
106522534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
1066e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
1067a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
106822534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
106922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1070584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
10717a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
1072be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
1073e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10744d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
10754d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1076a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
10774d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1078be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
1079be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
10806e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
1081a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptForEach(JNIEnv *_env, jobject _this, jlong con,
10827a629fac82f88126642081b4474879f6a883e313Tim Murray               jlong script, jint slot, jlong ain, jlong aout)
10836e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
1084e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1085a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, NULL, 0);
10866e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
10876e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
1088a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptForEachV(JNIEnv *_env, jobject _this, jlong con,
10897a629fac82f88126642081b4474879f6a883e313Tim Murray                jlong script, jint slot, jlong ain, jlong aout, jbyteArray params)
10906e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
1091e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10926e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jint len = _env->GetArrayLength(params);
10936e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1094a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, NULL, 0);
10956e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
10966e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
10976e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams
1098eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murraystatic void
1099a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con,
11007a629fac82f88126642081b4474879f6a883e313Tim Murray                      jlong script, jint slot, jlong ain, jlong aout,
1101dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                      jint xstart, jint xend,
1102eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                      jint ystart, jint yend, jint zstart, jint zend)
1103eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray{
1104e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1105dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    RsScriptCall sc;
1106dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.xStart = xstart;
1107dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.xEnd = xend;
1108dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.yStart = ystart;
1109dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.yEnd = yend;
1110dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.zStart = zstart;
1111dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.zEnd = zend;
1112dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1113dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.arrayStart = 0;
1114dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.arrayEnd = 0;
1115a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, &sc, sizeof(sc));
1116dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines}
1117dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines
1118dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hinesstatic void
1119a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con,
11207a629fac82f88126642081b4474879f6a883e313Tim Murray                       jlong script, jint slot, jlong ain, jlong aout,
1121dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                       jbyteArray params, jint xstart, jint xend,
1122dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                       jint ystart, jint yend, jint zstart, jint zend)
1123dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines{
1124e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1125eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    jint len = _env->GetArrayLength(params);
1126eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1127eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    RsScriptCall sc;
1128eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.xStart = xstart;
1129eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.xEnd = xend;
1130eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.yStart = ystart;
1131eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.yEnd = yend;
1132eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.zStart = zstart;
1133eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.zEnd = zend;
1134eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1135eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.arrayStart = 0;
1136eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.arrayEnd = 0;
1137a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, &sc, sizeof(sc));
1138eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1139eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray}
1140d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1141fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
1142fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
11430e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1144a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
1145e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
1146e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
1147d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1148e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptCCreate, con(%p)", (RsContext)con);
1149e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
1150e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
1151e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
11520e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong ret = 0;
11538451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    jbyte* script_ptr = NULL;
115443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
115543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
115643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
115743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
11588451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
115943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
116043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
116143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
116243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
11638451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
116443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
116543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1166e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
116743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
116843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
11698451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
11708451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
117143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
117243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1173e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
117443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
117543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
1176a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
1177e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
11780e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ret = (jlong)rsScriptCCreate((RsContext)con,
1179e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
1180e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
1181e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
118239ddc950c9064129ead5de04b200106c0659f937Jason Sams
118343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
1184e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
1185e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
118643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
118743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1188d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
11890e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)ret;
1190d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1191d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
11927a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
11937a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
11946ab97682fd444586ee135912a4210417a1c8781bJason Sams{
1195e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid);
11967a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
11976ab97682fd444586ee135912a4210417a1c8781bJason Sams}
11986ab97682fd444586ee135912a4210417a1c8781bJason Sams
11997a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
12007a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
120108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1202e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, (void *)sid, slot, sig);
12030e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
120408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
120508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
12067a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
12077a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
120808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1209e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot);
12100e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
121108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
121208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
12137a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
12149807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
12159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlongArray _dstk, jlongArray _dstf, jlongArray _types)
121608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1217e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con);
121808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
12199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint kernelsLen = _env->GetArrayLength(_kernels);
12209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, NULL);
12219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
12229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < kernelsLen; ++i) {
12239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
12249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
12259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint srcLen = _env->GetArrayLength(_src);
12279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jSrcPtr = _env->GetLongArrayElements(_src, NULL);
12289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
12299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < srcLen; ++i) {
12309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
12319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
12329807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstkLen = _env->GetArrayLength(_dstk);
12349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, NULL);
12359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
12369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstkLen; ++i) {
12379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
12389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
12399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstfLen = _env->GetArrayLength(_dstf);
12419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, NULL);
12429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
12439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstfLen; ++i) {
12449807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
12459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
12469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint typesLen = _env->GetArrayLength(_types);
12489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jTypesPtr = _env->GetLongArrayElements(_types, NULL);
12499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
12509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < typesLen; ++i) {
12519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        typesPtr[i] = (RsType)jTypesPtr[i];
12529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
12539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong id = (jlong)rsScriptGroupCreate((RsContext)con,
12559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
12569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
12579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
12589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
12599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsType *)typesPtr, typesLen * sizeof(RsType));
12609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
12619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(kernelsPtr);
12629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(srcPtr);
12639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstkPtr);
12649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstfPtr);
12659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(typesPtr);
12669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
12679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
12689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
12699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
12709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
127108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    return id;
127208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
127308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
127408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
12757a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
127608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1277e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
127808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        (void *)gid, (void *)kid, (void *)alloc);
1279a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
128008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
128108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
128208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
12837a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
128408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1285e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
128608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        (void *)gid, (void *)kid, (void *)alloc);
1287a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
128808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
128908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
129008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
12917a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
129208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1293e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
1294a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
129508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
129608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1297d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1298d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
12990e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1300a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
1301331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1302331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
1303331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
1304331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
1305d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1306e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramStoreCreate, con(%p)", (RsContext)con);
13070e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
1308331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1309331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
1310d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1311d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
13120011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
13130011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
13140011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
13157a629fac82f88126642081b4474879f6a883e313Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
13160011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
1317e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1318a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
13190011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
132054c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
1321d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
13227a629fac82f88126642081b4474879f6a883e313Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
132354c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
1324e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1325a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
132654c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
132754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
132854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
13297a629fac82f88126642081b4474879f6a883e313Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
1330d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1331e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1332a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1333d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1334d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
133568afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
1336d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
13377a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1338a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
13399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jobjectArray texNames, jlongArray params)
13407e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
1341b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
13429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jParamPtr = _env->GetLongArrayElements(params, NULL);
13437e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
13447e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
13462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
13472123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
13482123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
13492123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
1350e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
13517e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
13539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
13549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
13559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
13567a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong ret = (jlong)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
13572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                             nameArray, texCount, sizeArray,
13589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                             paramPtr, paramLen);
13592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
13609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
13619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
13627e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
13637e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
13647e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13657e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13661fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
13671fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
13687a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1369a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
13709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                     jobjectArray texNames, jlongArray params)
13711fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
1372b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
13739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jParamPtr = _env->GetLongArrayElements(params, NULL);
13740011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
13751fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1376e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
1377ee41112e1539de95596600fd2c6dada5d275217fJason Sams
13782123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
13792123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
13802123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
13812123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
13822123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
13839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
13849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
13859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
13869807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
13879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
13887a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong ret = (jlong)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
13892123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                           nameArray, texCount, sizeArray,
13909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                           paramPtr, paramLen);
13912123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
13929807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
13939807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
13940011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
13951fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
13961fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1397ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1398ebfb436a49673693b98469683451bd9ede797557Jason Sams
13997a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1400a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
1401ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1402e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, pointSprite, cull);
14030e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
1404ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1405ebfb436a49673693b98469683451bd9ede797557Jason Sams
1406d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1407d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1408d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1409d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
141078c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script)
1411d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1412e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
1413a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindRootScript((RsContext)con, (RsScript)script);
1414d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1415d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1416d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
141778c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs)
1418d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1419e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
1420a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
1421d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1422d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1423d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
142478c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf)
1425d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1426e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, (RsProgramFragment)pf);
1427a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
1428d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1429d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
14300826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
143178c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf)
14320826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
1433e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
1434a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
14350826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
14360826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1437d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
143878c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf)
1439ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1440e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
1441a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
1442ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1443ebfb436a49673693b98469683451bd9ede797557Jason Sams
1444d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
144502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
144602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
14470e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1448a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
1449a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
145002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
1451e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nSamplerCreate, con(%p)", (RsContext)con);
14520e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jlong)rsSamplerCreate((RsContext)con,
1453a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)magFilter,
1454a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)minFilter,
1455a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapS,
1456a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapT,
1457a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapR,
1458a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 aniso);
145902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
146002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1461bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1462bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
14637a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
14640e0c0885aed99a119052a792becb5a0c5a93632dAshok BhatnPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jlong _loop, jfloat q) {
1465e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nPathCreate, con(%p)", (RsContext)con);
1466f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
14677a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic,
14687a629fac82f88126642081b4474879f6a883e313Tim Murray                                   (RsAllocation)_vtx,
14697a629fac82f88126642081b4474879f6a883e313Tim Murray                                   (RsAllocation)_loop, q);
1470f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    return id;
1471f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams}
1472f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
14737a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
14749807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim)
1475164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
1476e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshCreate, con(%p)", (RsContext)con);
1477164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
147825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint vtxLen = _env->GetArrayLength(_vtx);
14799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, NULL);
14809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen);
14819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < vtxLen; ++i) {
14829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i];
14839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
14849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
148525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint idxLen = _env->GetArrayLength(_idx);
14869807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jIdxPtr = _env->GetLongArrayElements(_idx, NULL);
14879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen);
14889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < idxLen; ++i) {
14899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i];
14909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
14919807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
149225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint primLen = _env->GetArrayLength(_prim);
149325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1494164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
14959807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong id = (jlong)rsMeshCreate((RsContext)con,
149625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)vtxPtr, vtxLen,
149725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)idxPtr, idxLen,
149825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (uint32_t *)primPtr, primLen);
149980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
15009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(vtxPtr);
15019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(idxPtr);
15029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0);
15039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0);
150425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_prim, primPtr, 0);
150525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    return id;
15069d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
15079d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
150880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
15097a629fac82f88126642081b4474879f6a883e313Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
151080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1511e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
151280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1513a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
151480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
151580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
151680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
151780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
15187a629fac82f88126642081b4474879f6a883e313Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
151980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1520e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
152180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1522a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
152380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
152480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
152580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
152680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
15279807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs)
152880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1529e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
153080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
153180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1532a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
153380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
153480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
15359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jlong alloc = (jlong)allocs[i];
15369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_ids, i, 1, &alloc);
153780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
153880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
153980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
154080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
154180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
154280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
15439807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices)
154480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1545e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
154680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
154780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
154880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
154980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1550a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
155180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
155280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
15539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jlong alloc = (jlong)allocs[i];
15549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint prim = (jint)prims[i];
15559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_idxIds, i, 1, &alloc);
15569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_primitives, i, 1, &prim);
155780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
155880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
155980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
156080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1561164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1562164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1563164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1564164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1565d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
156694d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1567d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1568d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
15691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
15701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1571a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nDeviceCreate",                  "()J",                                     (void*)nDeviceCreate },
1572a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nDeviceDestroy",                 "(J)V",                                    (void*)nDeviceDestroy },
1573a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nDeviceSetConfig",               "(JII)V",                                  (void*)nDeviceSetConfig },
1574a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextGetUserMessage",         "(J[I)I",                                  (void*)nContextGetUserMessage },
1575a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextGetErrorMessage",        "(J)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1576a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextPeekMessage",            "(J[I)I",                                  (void*)nContextPeekMessage },
15771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1578a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextInitToClient",           "(J)V",                                    (void*)nContextInitToClient },
1579a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextDeinitToClient",         "(J)V",                                    (void*)nContextDeinitToClient },
15802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
15812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
15822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
1583a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextCreate",                 "(JIII)J",                               (void*)nContextCreate },
1584a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextCreateGL",               "(JIIIIIIIIIIIIFI)J",                    (void*)nContextCreateGL },
1585a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextFinish",                 "(J)V",                                  (void*)nContextFinish },
1586a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextSetPriority",            "(JI)V",                                 (void*)nContextSetPriority },
1587a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextSetSurface",             "(JIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1588a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextDestroy",                "(J)V",                                  (void*)nContextDestroy },
1589a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextDump",                   "(JI)V",                                 (void*)nContextDump },
1590a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextPause",                  "(J)V",                                  (void*)nContextPause },
1591a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextResume",                 "(J)V",                                  (void*)nContextResume },
1592a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextSendMessage",            "(JI[I)V",                               (void*)nContextSendMessage },
15937a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAssignName",                    "(JJ[B)V",                               (void*)nAssignName },
15947a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnGetName",                       "(JJ)Ljava/lang/String;",                (void*)nGetName },
15957a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnObjDestroy",                    "(JJ)V",                                 (void*)nObjDestroy },
1596a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
15977a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DCreateFromFile",         "(JLjava/lang/String;)J",                (void*)nFileA3DCreateFromFile },
15980e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream",  "(JJ)J",                                 (void*)nFileA3DCreateFromAssetStream },
15997a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J",            (void*)nFileA3DCreateFromAsset },
16007a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DGetNumIndexEntries",     "(JJ)I",                                 (void*)nFileA3DGetNumIndexEntries },
16017a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DGetIndexEntries",        "(JJI[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
16020e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex",        "(JJI)J",                                (void*)nFileA3DGetEntryByIndex },
1603a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16040e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile",            "(JLjava/lang/String;FI)J",              (void*)nFontCreateFromFile },
16050e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream",     "(JLjava/lang/String;FIJ)J",             (void*)nFontCreateFromAssetStream },
16060e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J",            (void*)nFontCreateFromAsset },
1607a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16087a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnElementCreate",                 "(JJIZI)J",                              (void*)nElementCreate },
16099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2",                "(J[J[Ljava/lang/String;[I)J",           (void*)nElementCreate2 },
16107a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnElementGetNativeData",          "(JJ[I)V",                               (void*)nElementGetNativeData },
16119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements",         "(JJ[J[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
16127a629fac82f88126642081b4474879f6a883e313Tim Murray
16137a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnTypeCreate",                    "(JJIIIZZI)J",                           (void*)nTypeCreate },
16149807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData",             "(JJ[J)V",                               (void*)nTypeGetNativeData },
16157a629fac82f88126642081b4474879f6a883e313Tim Murray
16169807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped",         "(JJIIJ)J",                               (void*)nAllocationCreateTyped },
16177a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCreateFromBitmap",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateFromBitmap },
16187a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCreateBitmapBackedAllocation",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateBitmapBackedAllocation },
16197a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCubeCreateFromBitmap },
16207a629fac82f88126642081b4474879f6a883e313Tim Murray
16217a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCopyFromBitmap",      "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
16227a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCopyToBitmap",        "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
16237a629fac82f88126642081b4474879f6a883e313Tim Murray
16247a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationSyncAll",             "(JJI)V",                                (void*)nAllocationSyncAll },
16257a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationGetSurface",          "(JJ)Landroid/view/Surface;",            (void*)nAllocationGetSurface },
16267a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationSetSurface",          "(JJLandroid/view/Surface;)V",           (void*)nAllocationSetSurface },
16277a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationIoSend",              "(JJ)V",                                 (void*)nAllocationIoSend },
16287a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationIoReceive",           "(JJ)V",                                 (void*)nAllocationIoReceive },
16297a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationData1D },
16307a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationElementData1D",       "(JJIII[BI)V",                           (void*)nAllocationElementData1D },
16317a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationData2D },
16327a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData2D",              "(JJIIIIIIJIIII)V",                      (void*)nAllocationData2D_alloc },
16337a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIILjava/lang/Object;II)V",      (void*)nAllocationData3D },
16347a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIIJIIII)V",                     (void*)nAllocationData3D_alloc },
16357a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationRead",                "(JJLjava/lang/Object;I)V",              (void*)nAllocationRead },
16367a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationRead1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationRead1D },
16377a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationRead2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationRead2D },
16387a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationGetType",             "(JJ)J",                                 (void*)nAllocationGetType},
16397a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationResize1D",            "(JJI)V",                                (void*)nAllocationResize1D },
16407a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationGenerateMipmaps",     "(JJ)V",                                 (void*)nAllocationGenerateMipmaps },
16417a629fac82f88126642081b4474879f6a883e313Tim Murray
16427a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptBindAllocation",          "(JJJI)V",                               (void*)nScriptBindAllocation },
16437a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetTimeZone",             "(JJ[B)V",                               (void*)nScriptSetTimeZone },
16447a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptInvoke",                  "(JJI)V",                                (void*)nScriptInvoke },
16457a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptInvokeV",                 "(JJI[B)V",                              (void*)nScriptInvokeV },
16467a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptForEach",                 "(JJIJJ)V",                              (void*)nScriptForEach },
16477a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptForEach",                 "(JJIJJ[B)V",                            (void*)nScriptForEachV },
16487a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptForEachClipped",          "(JJIJJIIIIII)V",                        (void*)nScriptForEachClipped },
16497a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptForEachClipped",          "(JJIJJ[BIIIIII)V",                      (void*)nScriptForEachClippedV },
16507a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarI",                 "(JJII)V",                               (void*)nScriptSetVarI },
16517a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarI",                 "(JJI)I",                                (void*)nScriptGetVarI },
16527a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarJ",                 "(JJIJ)V",                               (void*)nScriptSetVarJ },
16537a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarJ",                 "(JJI)J",                                (void*)nScriptGetVarJ },
16547a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarF",                 "(JJIF)V",                               (void*)nScriptSetVarF },
16557a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarF",                 "(JJI)F",                                (void*)nScriptGetVarF },
16567a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarD",                 "(JJID)V",                               (void*)nScriptSetVarD },
16577a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarD",                 "(JJI)D",                                (void*)nScriptGetVarD },
16587a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarV",                 "(JJI[B)V",                              (void*)nScriptSetVarV },
16597a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarV",                 "(JJI[B)V",                              (void*)nScriptGetVarV },
16607a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarVE",                "(JJI[BJ[I)V",                           (void*)nScriptSetVarVE },
16617a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarObj",               "(JJIJ)V",                               (void*)nScriptSetVarObj },
1662a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16630e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate",                 "(JLjava/lang/String;Ljava/lang/String;[BI)J",  (void*)nScriptCCreate },
16647a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptIntrinsicCreate",         "(JIJ)J",                                (void*)nScriptIntrinsicCreate },
16657a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptKernelIDCreate",          "(JJII)J",                               (void*)nScriptKernelIDCreate },
16667a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptFieldIDCreate",           "(JJI)J",                                (void*)nScriptFieldIDCreate },
16679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate",             "(J[J[J[J[J[J)J",                        (void*)nScriptGroupCreate },
16687a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGroupSetInput",           "(JJJJ)V",                               (void*)nScriptGroupSetInput },
16697a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGroupSetOutput",          "(JJJJ)V",                               (void*)nScriptGroupSetOutput },
16707a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGroupExecute",            "(JJ)V",                                 (void*)nScriptGroupExecute },
1671a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16720e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate",            "(JZZZZZZIII)J",                         (void*)nProgramStoreCreate },
1673a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16747a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramBindConstants",          "(JJIJ)V",                               (void*)nProgramBindConstants },
16757a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramBindTexture",            "(JJIJ)V",                               (void*)nProgramBindTexture },
16767a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramBindSampler",            "(JJIJ)V",                               (void*)nProgramBindSampler },
1677a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate",         "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramFragmentCreate },
16797a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramRasterCreate",           "(JZI)J",                                (void*)nProgramRasterCreate },
16809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate",           "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramVertexCreate },
1681a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
168278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript",         "(JJ)V",                                 (void*)nContextBindRootScript },
168378c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore",       "(JJ)V",                                 (void*)nContextBindProgramStore },
168478c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment",    "(JJ)V",                                 (void*)nContextBindProgramFragment },
168578c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex",      "(JJ)V",                                 (void*)nContextBindProgramVertex },
168678c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster",      "(JJ)V",                                 (void*)nContextBindProgramRaster },
1687a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16880e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate",                 "(JIIIIIF)J",                            (void*)nSamplerCreate },
1689a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16900e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnPathCreate",                    "(JIZJJF)J",                             (void*)nPathCreate },
16919807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate",                    "(J[J[J[I)J",                            (void*)nMeshCreate },
1692a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16937a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnMeshGetVertexBufferCount",      "(JJ)I",                                 (void*)nMeshGetVertexBufferCount },
16947a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnMeshGetIndexCount",             "(JJ)I",                                 (void*)nMeshGetIndexCount },
16959807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices",               "(JJ[JI)V",                              (void*)nMeshGetVertices },
16969807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices",                "(JJ[J[II)V",                            (void*)nMeshGetIndices },
169780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1698d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1699d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1700d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1701d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1702d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1703d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1704d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1705d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1706d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1707d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1708d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1709d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1710d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    JNIEnv* env = NULL;
1711d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1712d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1713d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
17143762c311729fe9f3af085c14c5c1fb471d994c03Steve Block        ALOGE("ERROR: GetEnv failed\n");
1715d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1716d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1717d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    assert(env != NULL);
1718d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1719d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
17200e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat        ALOGE("ERROR: Renderscript native registration failed\n");
1721d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1722d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1723d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1724d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1725d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1726d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1727d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1728d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1729d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1730