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
26eece0dda56ae29fff6e9003df97594f6ac50b6e2Derek Sollenberger#include <SkBitmap.h>
27ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
28b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/Asset.h>
29b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h>
30b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h>
31f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h"
33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h"
34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h"
35ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h"
36b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h"
37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
381d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rs.h>
391d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rsEnv.h>
40fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams#include <gui/Surface.h>
41d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden#include <gui/GLConsumer.h>
4252800617946c456e78ed010c82d0ec4358368164Mathias Agopian#include <gui/Surface.h>
43faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h>
44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
453762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE
46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define LOG_API(...)
47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
48d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
50414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) {                                      \
51e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    jint len = 0;                                                                       \
52e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    void *ptr = NULL;                                                                   \
5321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    size_t typeBytes = 0;                                                               \
54414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    jint relFlag = 0;                                                                   \
55414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    if (readonly) {                                                                     \
56414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        /* The on-release mode should only be JNI_ABORT for read-only accesses. */      \
57414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        relFlag = JNI_ABORT;                                                            \
58414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    }                                                                                   \
59e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    switch(dataType) {                                                                  \
60e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_FLOAT_32:                                                              \
61e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jfloatArray)data);                                  \
62e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetFloatArrayElements((jfloatArray)data, flag);                     \
6321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 4;                                                                  \
64e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
65414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag);     \
66e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
67e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_FLOAT_64:                                                              \
68e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jdoubleArray)data);                                 \
69e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag);                   \
7021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 8;                                                                  \
71e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
72414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag);  \
73e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
74e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_8:                                                              \
75e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_8:                                                            \
76e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jbyteArray)data);                                   \
77e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetByteArrayElements((jbyteArray)data, flag);                       \
7821659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 1;                                                                  \
79e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
80414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag);         \
81e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
82e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_16:                                                             \
83e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_16:                                                           \
84e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jshortArray)data);                                  \
85e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetShortArrayElements((jshortArray)data, flag);                     \
8621659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 2;                                                                  \
87e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
88414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag);     \
89e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
90e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_32:                                                             \
91e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_32:                                                           \
92e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jintArray)data);                                    \
93e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetIntArrayElements((jintArray)data, flag);                         \
9421659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 4;                                                                  \
95e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
96414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag);           \
97e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
98e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_64:                                                             \
99e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_64:                                                           \
100e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jlongArray)data);                                   \
101e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetLongArrayElements((jlongArray)data, flag);                       \
10221659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 8;                                                                  \
103e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        fnc(__VA_ARGS__);                                                               \
104414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag);        \
105e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
106e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    default:                                                                            \
107e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        break;                                                                          \
108e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    }                                                                                   \
109e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams}
110e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams
111e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams
112b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 {
113b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic:
1142123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
115b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fCStr = env->GetStringUTFChars(str, NULL);
116b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fLength = env->GetStringUTFLength(str);
117b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1182123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringToUTF8() {
119b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
120b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
121b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* c_str() const { return fCStr; }
122b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize length() const { return fLength; }
123b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
124b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate:
125b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    JNIEnv*     fEnv;
126b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jstring     fJStr;
127b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* fCStr;
128b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize       fLength;
129b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk};
130b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1312123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 {
1322123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic:
1332123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
1342123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
1352123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        mCStrings = NULL;
1362123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        mSizeArray = NULL;
1372123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        if (stringsLength > 0) {
1382123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
1392123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
1402123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            for (jsize ct = 0; ct < stringsLength; ct ++) {
1412123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
1422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL);
1432123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
1442123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            }
1452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
1462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
1472123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringArrayToUTF8() {
1482123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        for (jsize ct=0; ct < mStringsLength; ct++) {
1492123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
1502123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
1512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
1522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mCStrings);
1532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mSizeArray);
1542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
1552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **c_str() const { return mCStrings; }
1562123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *c_str_len() const { return mSizeArray; }
1572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize length() const { return mStringsLength; }
1582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
1592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate:
1602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    JNIEnv      *mEnv;
1612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jobjectArray mStrings;
1622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **mCStrings;
1632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t      *mSizeArray;
1642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize        mStringsLength;
1652123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk};
1662123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
167d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
168d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
169ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
170ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
17143ee06857bb7f99446d1d84f8789016c5d105558Jason Samsstatic jfieldID gTypeNativeCache = 0;
172d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
173d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
174d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
175eff663f391fa4f119685d5c14489b94661ea126fTim Murray    gContextId             = _env->GetFieldID(_this, "mContext", "J");
176ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
177ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
17836bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J");
179d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
180d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
181d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
182d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1833eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
184eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con)
18596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
18671a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextFinish, con(%p)", (RsContext)con);
187eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextFinish((RsContext)con);
18896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
18996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
19096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
191460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str)
1923eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
19371a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
1943eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
1953eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
196eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len);
1973eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
1983eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
1993eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
200fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
201460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj)
202fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
20371a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
204fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    const char *name = NULL;
205eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaGetName((RsContext)con, (void *)obj, &name);
206581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    if(name == NULL || strlen(name) == 0) {
207581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk        return NULL;
208581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
209fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
210fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
211fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
2127ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
213460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
2147ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
21571a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
216eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsObjDestroy((RsContext)con, (void *)obj);
2177ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
2187ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
2193eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
2203eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
221eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
222d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
223d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
224d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
2253aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsDeviceCreate();
226d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
227d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
228d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2295eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
230d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
231d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
232d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
233d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
234d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
235ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
2365eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
237ebfb436a49673693b98469683451bd9ede797557Jason Sams{
238ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
239ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
240ebfb436a49673693b98469683451bd9ede797557Jason Sams}
241ebfb436a49673693b98469683451bd9ede797557Jason Sams
242eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
243bb7e86ff0478ef9ea2e35065bfcb2d6e9ffa9292Jason SamsnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint flags, jint sdkVer, jint contextType)
244d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
245d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
246bb7e86ff0478ef9ea2e35065bfcb2d6e9ffa9292Jason Sams    return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, 0, sdkVer, (RsContextType)contextType, flags);
247704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
248704ff64b099406bb328898a7443921f22dbffd6dJason Sams
249eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
2505eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
2510e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint colorMin, jint colorPref,
2520e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint alphaMin, jint alphaPref,
2530e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint depthMin, jint depthPref,
2540e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint stencilMin, jint stencilPref,
2550e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint samplesMin, jint samplesPref, jfloat samplesQ,
2560e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint dpi)
25711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
25811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
25911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
26011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
26111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
26211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
26311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
26411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
26511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
26611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
26711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
26811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
269704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
2703aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
271d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
272d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
273d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
274eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
2757d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
27671a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
277eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSetPriority((RsContext)con, p);
2787d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
2797d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2807d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2817d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2827d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
283eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd)
284efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
28571a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, width, height, (Surface *)wnd);
286efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
2876c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk    ANativeWindow * window = NULL;
288efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    if (wnd == NULL) {
289efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
290efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
29164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        window = android_view_Surface_getNativeWindow(_env, wnd).get();
292efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
293efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
294eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSetSurface((RsContext)con, width, height, window);
295efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
296efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
297efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
298eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con)
299d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
30071a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextDestroy, con(%p)", (RsContext)con);
301eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextDestroy((RsContext)con);
302d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
303d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
304715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
305eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
306715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
307715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
308715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
309715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
310d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
311d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
312eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con)
31365e7aa56f56097418d617663683544c25b3988eaJason Sams{
31471a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextPause, con(%p)", (RsContext)con);
315eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextPause((RsContext)con);
31665e7aa56f56097418d617663683544c25b3988eaJason Sams}
31765e7aa56f56097418d617663683544c25b3988eaJason Sams
31865e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
319eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con)
32065e7aa56f56097418d617663683544c25b3988eaJason Sams{
32171a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextResume, con(%p)", (RsContext)con);
322eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextResume((RsContext)con);
32365e7aa56f56097418d617663683544c25b3988eaJason Sams}
32465e7aa56f56097418d617663683544c25b3988eaJason Sams
3251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
327eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
3281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
32971a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con);
3301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
3311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
3331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
334eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextGetMessage((RsContext)con,
33565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 buf, sizeof(buf),
33665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
337edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
3381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
33971f2cf116aab893e224056c38ab146bd1538dd3eSteve Block        ALOGV("message receive buffer too small.  %i", receiveLen);
3401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
3411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
3421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
344edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint
345eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
346516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
347516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
34871a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
349516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
350516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
3511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
352eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextGetMessage((RsContext)con,
35365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 ptr, len * 4,
35465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
355edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
356516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
35771f2cf116aab893e224056c38ab146bd1538dd3eSteve Block        ALOGV("message receive buffer too small.  %i", receiveLen);
358516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
359516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
3600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
3611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
364eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
3651c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
36671a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextPeekMessage, con(%p)", (RsContext)con);
3671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
3681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
3691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
370eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
371edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                  &subID, sizeof(subID));
3721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
3731c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
3741c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
3750e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
376516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
377516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
378eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
379516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
38071a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextInitToClient, con(%p)", (RsContext)con);
381eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextInitToClient((RsContext)con);
382516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
383516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
384eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
385516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
38671a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con);
387eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextDeinitToClient((RsContext)con);
388516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
389516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
390455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void
391eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
392455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{
393455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    jint *ptr = NULL;
394455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    jint len = 0;
395455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
396455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        len = _env->GetArrayLength(data);
397a0eabfbc413cf6ee0659ac19243efc5ba2d0f733Stephen Hines        ptr = _env->GetIntArrayElements(data, NULL);
398455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
39971a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
400eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
401455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
402455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
403455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
404455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams}
405455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
406455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
407516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
408460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
409460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size)
410d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
41171a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, type, kind, norm, size);
4123aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, norm, size);
413d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
414d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
415460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
416eff663f391fa4f119685d5c14489b94661ea126fTim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con,
4179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
418d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
419718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
42071a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nElementCreate2, con(%p)", (RsContext)con);
421718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
4229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jIds = _env->GetLongArrayElements(_ids, NULL);
4239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
4249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
4269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
4279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < fieldCount; i ++) {
4299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        ids[i] = (RsElement)jIds[i];
4309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        arraySizes[i] = (uint32_t)jArraySizes[i];
4319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
432718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
4332123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
4342123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4352123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **nameArray = names.c_str();
4362123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *sizeArray = names.c_str_len();
4372123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4383aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con,
4399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                     (const RsElement *)ids, fieldCount,
4407a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
441e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
4422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(ids);
4449807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(arraySizes);
4459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
4469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
4479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
4483aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)id;
449d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
450d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
451dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
452460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData)
453dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
454dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
45571a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nElementGetNativeData, con(%p)", (RsContext)con);
456dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
457dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
458dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
459dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
46078c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uintptr_t elementData[5];
461eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize);
462dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
463dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
4649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint data = (jint)elementData[i];
4659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_elementData, i, 1, &data);
466dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
467dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
468dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
469dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
470dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
471460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
4729807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jlongArray _IDs,
4737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jobjectArray _names,
4747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _arraySizes)
475dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
4769807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t dataSize = _env->GetArrayLength(_IDs);
47771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nElementGetSubElements, con(%p)", (RsContext)con);
478dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
4799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t));
4809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    const char **names = (const char **)malloc(dataSize * sizeof(const char *));
48178c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t));
482dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
483eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
484dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
4859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(uint32_t i = 0; i < dataSize; i++) {
4863aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong id = (jlong)(uintptr_t)ids[i];
4879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint arraySize = (jint)arraySizes[i];
488dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
4899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_IDs, i, 1, &id);
4909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
491dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
492dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
493dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
494dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
4957d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    free(arraySizes);
496dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
497dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
498d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
499d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
500460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
501460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
502b109cc78616abee7291eb42094cd156b5db3355dJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
503d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
504b109cc78616abee7291eb42094cd156b5db3355dJason Sams    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
50571a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray            (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv);
5063b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
5073aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, faces, yuv);
508d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
509d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
510dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
5119807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData)
512dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
513dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
514dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
515dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
516dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
517dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
5180e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    LOG_API("nTypeGetNativeData, con(%p)", (RsContext)con);
519dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
5209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t typeData[6];
521eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6);
522dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
523dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
5243aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong data = (jlong)(uintptr_t)typeData[i];
5259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_typeData, i, 1, &data);
526dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
527dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
528dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
529d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
530d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
531460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
5329807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, jlong pointer)
533d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
53471a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
5353aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uintptr_t)pointer);
536d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
537d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
538d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
539460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
5405476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
54171a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits);
542eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
5435476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
5445476b450e50939940dcf3f15c92335cee2fc572dJason Sams
54572226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject
546460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a)
547615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{
54871a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
549615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
550eff663f391fa4f119685d5c14489b94661ea126fTim Murray    IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, (RsAllocation)a);
55172226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    sp<IGraphicBufferProducer> bp = v;
55272226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    v->decStrong(NULL);
553fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
55472226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp);
55572226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    return o;
556fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams}
557fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
558fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void
559460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
560163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
56106883b71d0b75eee255b292ba66684eddc5fb172Stephen Hines    LOG_API("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)",
56271a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray            (RsContext)con, (RsAllocation)alloc, (Surface *)sur);
563163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
564fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    sp<Surface> s;
565163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    if (sur != 0) {
56664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        s = android_view_Surface_getSurface(_env, sur);
567163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
568163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
569460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray    rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, static_cast<ANativeWindow *>(s.get()));
570163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
571163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
572163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
573460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
574163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
57571a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, alloc);
576460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray    rsAllocationIoSend((RsContext)con, (RsAllocation)alloc);
577163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
578163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
579163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
580460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
581163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
58271a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, alloc);
583460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray    rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc);
584163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
585163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
586163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
587163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
588460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
589f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
59071a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
591eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
592f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
593f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
594460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
595460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
596fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
597ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
59836bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
599ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
600fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
6015476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
6025476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
6033aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con,
60465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  (RsType)type, (RsAllocationMipmapControl)mip,
60565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  ptr, bitmap.getSize(), usage);
6065476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
6075476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
608ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
609fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
610460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
611460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
612a314551d69098537337c970da615a8f8af58e1f1Tim Murray{
613a314551d69098537337c970da615a8f8af58e1f1Tim Murray    SkBitmap const * nativeBitmap =
61436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
615a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const SkBitmap& bitmap(*nativeBitmap);
616a314551d69098537337c970da615a8f8af58e1f1Tim Murray
617a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.lockPixels();
618a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const void* ptr = bitmap.getPixels();
6193aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con,
620a314551d69098537337c970da615a8f8af58e1f1Tim Murray                                            (RsType)type, (RsAllocationMipmapControl)mip,
6219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                            (uint32_t)usage, (uintptr_t)ptr);
622a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.unlockPixels();
623a314551d69098537337c970da615a8f8af58e1f1Tim Murray    return id;
624a314551d69098537337c970da615a8f8af58e1f1Tim Murray}
625a314551d69098537337c970da615a8f8af58e1f1Tim Murray
626460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
627460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
62867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
62967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
63036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
63167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
63267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
6335476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
6345476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
6353aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con,
63665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      (RsType)type, (RsAllocationMipmapControl)mip,
63765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      ptr, bitmap.getSize(), usage);
6385476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
6395476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
64067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
64167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
64226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
643460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
64426ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
64526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
64636bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
64726ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
648f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
649f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
65026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
6514ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
6524ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
653eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0,
654304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                       0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
65538faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray                       w, h, ptr, bitmap.getSize(), 0);
6564ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
6578a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
6588a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6594ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
660460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
6618a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
6624ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
66336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
6644ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
6658a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6664ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
6674ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
668eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize());
6694ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
670835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk    bitmap.notifyPixelsChanged();
6718a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
6728a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6734ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
674650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
6754ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
6764ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    nativeBitmap->unlockPixels();
677650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
678650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
6794ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
680414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
681d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
682460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
6830e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                  jint count, jobject data, jint sizeBytes, jint dataType)
684d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
685e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
68671a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
68771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray            (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, dataType);
688414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(NULL, rsAllocation1DData, true, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
689d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
690d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
691414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java array data into the Allocation pointed to by alloc.
692d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
6930e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat//    native void rsnAllocationElementData1D(long con, long id, int xoff, int compIdx, byte[] d, int sizeBytes);
6940e0c0885aed99a119052a792becb5a0c5a93632dAshok BhatnAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod, jint compIdx, jbyteArray data, jint sizeBytes)
69549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
69649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
69771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
69849bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
699eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
70049bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
70149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
70249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
703414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
70449bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
705460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
7060e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                  jint w, jint h, jobject data, jint sizeBytes, jint dataType)
707d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
708e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
709e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
710e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
71171a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray            (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
712414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(NULL, rsAllocation2DData, true, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
713d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
714d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
715414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation
716414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc.
71740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
718eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
719460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff,
720304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstMip, jint dstFace,
721304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint width, jint height,
722460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff,
723304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcMip, jint srcFace)
724304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{
7254c2e4c80ce519e09e5b00fd7533e64a834d70639Jason Sams    LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
726304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " dstMip(%i), dstFace(%i), width(%i), height(%i),"
727304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
72871a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
729304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
730304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
731eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopy2DRange((RsContext)con,
732304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)dstAlloc,
733304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstXoff, dstYoff,
734304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
735304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
736304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)srcAlloc,
737304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcXoff, srcYoff,
738304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
739304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk}
740304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
741414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
742304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void
743460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
744e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams                    jint w, jint h, jint d, jobject data, int sizeBytes, int dataType)
745b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
746e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
747e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i), h(%i), d(%i), sizeBytes(%i)",
74871a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray            (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, sizeBytes);
749414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(NULL, rsAllocation3DData, true, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
750b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
751b05d689653b1bc94836f716f29e9578677c29075Jason Sams
752414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation
753414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc.
754b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void
755eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
756460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
757b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint dstMip,
758b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint width, jint height, jint depth,
759460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
760b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint srcMip)
761b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
762b05d689653b1bc94836f716f29e9578677c29075Jason Sams    LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
763b05d689653b1bc94836f716f29e9578677c29075Jason Sams            " dstMip(%i), width(%i), height(%i),"
764b05d689653b1bc94836f716f29e9578677c29075Jason Sams            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
76571a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip,
76671a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip);
767b05d689653b1bc94836f716f29e9578677c29075Jason Sams
768eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopy3DRange((RsContext)con,
769b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)dstAlloc,
770b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstXoff, dstYoff, dstZoff, dstMip,
771b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            width, height, depth,
772b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)srcAlloc,
773b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            srcXoff, srcYoff, srcZoff, srcMip);
774b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
775b05d689653b1bc94836f716f29e9578677c29075Jason Sams
77640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
777414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
77840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
779460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType)
780fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
78121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
78271a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
783414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(0, rsAllocationRead, false, (RsContext)con, alloc, ptr, len * typeBytes);
784fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
785fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
786414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
787fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
788460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
78921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams                  jint count, jobject data, int sizeBytes, int dataType)
790fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
79121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
79271a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
79371a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray            (RsContext)con, alloc, offset, count, sizeBytes, dataType);
794414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(0, rsAllocation1DRead, false, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
795fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
796fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
797414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
798fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
799460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
80021659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams                  jint w, jint h, jobject data, int sizeBytes, int dataType)
80140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
80221659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
80321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
80421659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
80571a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray            (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
806414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    PER_ARRAY_TYPE(0, rsAllocation2DRead, false, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
80740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
808d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
809460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
810460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
811dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
81271a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
8133aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a);
814dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
815dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
8165edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
817460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
8185edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
81971a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, (RsAllocation)alloc, dimX);
820eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
8215edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
8225edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
823aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
824aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
825460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
826460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset)
827aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
828aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
8290e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", asset);
830aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8313aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
832b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
833b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
834b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
835460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
836eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
837b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
838b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
839b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
840b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
841b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
842b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
843b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
844b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
845b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
846b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
847b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
848b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8493aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset);
850b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
851b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
852b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
853460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
854eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
855b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
856b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
8573aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
858b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
859aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
860aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
861aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
862460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jint
863460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
864aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
865aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
866eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
8670e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)numEntries;
868aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
869aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
870aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
871460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
872aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
8730e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
874aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
875aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
876eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
877aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
878aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
879aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
880aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
881aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
882aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
883aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
884aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
885aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8860e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
887460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
888aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
8890e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
8903aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
891aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
892aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
893d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
894d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
895d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
8960e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
897eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
898b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
8999b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
900b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
9013aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con,
902e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
903e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
904b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
905b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
906b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
907b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
9080e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
909eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
9100e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                           jstring name, jfloat fontSize, jint dpi, jlong native_asset)
911b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
912b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
913b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
914b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
9153aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con,
916e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
917e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
918b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
919b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
920b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
921b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
9220e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
923eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
924b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
925b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
926b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
927b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
928b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
929b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
930b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
931b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
932b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
933b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
934b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
935b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
9369b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
9373aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con,
938e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
939e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
940b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
941b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
9429b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
9439b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
9449b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
945bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
946bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
947bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
948460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
949d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
95071a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
951eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
952d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
953d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
954d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
955460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
9564d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
95771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
958eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
9594d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
9604d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
9617c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint
962460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9637c4caadb939b1563328251c156262c179a685c70Tim Murray{
96471a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9657c4caadb939b1563328251c156262c179a685c70Tim Murray    int value = 0;
966eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9677c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9687c4caadb939b1563328251c156262c179a685c70Tim Murray}
9697c4caadb939b1563328251c156262c179a685c70Tim Murray
9704d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
971460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
9726f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
97371a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
974eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
9756f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
9766f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
9776f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
978460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
979031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
98071a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, (void *)script, slot, val);
981eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
982031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
983031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
9847c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong
985460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9867c4caadb939b1563328251c156262c179a685c70Tim Murray{
98771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9887c4caadb939b1563328251c156262c179a685c70Tim Murray    jlong value = 0;
989eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9907c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9917c4caadb939b1563328251c156262c179a685c70Tim Murray}
9927c4caadb939b1563328251c156262c179a685c70Tim Murray
993031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
994460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
9954d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
99671a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, slot, val);
997eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
9984d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
9994d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
10007c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat
1001460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
10027c4caadb939b1563328251c156262c179a685c70Tim Murray{
100371a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10047c4caadb939b1563328251c156262c179a685c70Tim Murray    jfloat value = 0;
1005eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
10067c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
10077c4caadb939b1563328251c156262c179a685c70Tim Murray}
10087c4caadb939b1563328251c156262c179a685c70Tim Murray
10094d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
1010460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
1011ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
101271a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, slot, val);
1013eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
1014ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
1015ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
10167c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble
1017460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
10187c4caadb939b1563328251c156262c179a685c70Tim Murray{
101971a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10207c4caadb939b1563328251c156262c179a685c70Tim Murray    jdouble value = 0;
1021eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
10227c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
10237c4caadb939b1563328251c156262c179a685c70Tim Murray}
10247c4caadb939b1563328251c156262c179a685c70Tim Murray
1025ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
1026460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
10274d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
102871a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10294d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
10304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1031eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
10324d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
10334d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
10344d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1035adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void
1036460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
10377c4caadb939b1563328251c156262c179a685c70Tim Murray{
103871a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10397c4caadb939b1563328251c156262c179a685c70Tim Murray    jint len = _env->GetArrayLength(data);
10407c4caadb939b1563328251c156262c179a685c70Tim Murray    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1041eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
1042414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    _env->ReleaseByteArrayElements(data, ptr, 0);
10437c4caadb939b1563328251c156262c179a685c70Tim Murray}
10447c4caadb939b1563328251c156262c179a685c70Tim Murray
10457c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void
1046460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jlong elem, jintArray dims)
1047adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{
104871a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1049adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint len = _env->GetArrayLength(data);
1050adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1051adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1052adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
1053eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
1054bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines                     (const uint32_t*) dimsPtr, dimsLen);
1055adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1056adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1057adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines}
1058adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines
1059d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1060d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1061460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
1062584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
106371a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
1064584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1065584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
1066584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
1067584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1068584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1069eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
1070584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1071584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
1072584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1073584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
1074584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
1075584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
107622534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
1077460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
107822534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
107971a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
1080eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
108122534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
108222534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1083584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
1084460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
1085be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
108671a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10874d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
10884d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1089eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
10904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1091be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
1092be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
10936e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
1094eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptForEach(JNIEnv *_env, jobject _this, jlong con,
1095460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray               jlong script, jint slot, jlong ain, jlong aout)
10966e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
109771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1098eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, NULL, 0);
10996e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
11006e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
1101eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptForEachV(JNIEnv *_env, jobject _this, jlong con,
1102460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                jlong script, jint slot, jlong ain, jlong aout, jbyteArray params)
11036e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
110471a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
11056e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jint len = _env->GetArrayLength(params);
11066e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1107eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, NULL, 0);
11086e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
11096e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
11106e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams
1111eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murraystatic void
1112eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con,
1113460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                      jlong script, jint slot, jlong ain, jlong aout,
1114dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                      jint xstart, jint xend,
1115eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                      jint ystart, jint yend, jint zstart, jint zend)
1116eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray{
111771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1118dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    RsScriptCall sc;
1119dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.xStart = xstart;
1120dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.xEnd = xend;
1121dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.yStart = ystart;
1122dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.yEnd = yend;
1123dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.zStart = zstart;
1124dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.zEnd = zend;
1125dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1126dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.arrayStart = 0;
1127dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.arrayEnd = 0;
1128eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, &sc, sizeof(sc));
1129dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines}
1130dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines
1131dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hinesstatic void
1132eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con,
1133460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                       jlong script, jint slot, jlong ain, jlong aout,
1134dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                       jbyteArray params, jint xstart, jint xend,
1135dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                       jint ystart, jint yend, jint zstart, jint zend)
1136dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines{
113771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1138eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    jint len = _env->GetArrayLength(params);
1139eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1140eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    RsScriptCall sc;
1141eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.xStart = xstart;
1142eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.xEnd = xend;
1143eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.yStart = ystart;
1144eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.yEnd = yend;
1145eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.zStart = zstart;
1146eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.zEnd = zend;
1147eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1148eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.arrayStart = 0;
1149eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.arrayEnd = 0;
1150eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, &sc, sizeof(sc));
1151eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1152eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray}
1153d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1154949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailesstatic void
1155949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris WailesnScriptForEachMultiClipped(JNIEnv *_env, jobject _this, jlong con,
1156949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes                      jlong script, jint slot, jlongArray ains, jlong aout,
1157949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes                      jint xstart, jint xend,
1158949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes                      jint ystart, jint yend, jint zstart, jint zend)
1159949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes{
1160949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    LOG_API("nScriptForEachMultiClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1161949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1162949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    jint   in_len = _env->GetArrayLength(ains);
1163949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    jlong* in_ptr = _env->GetLongArrayElements(ains, NULL);
1164949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1165949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    RsAllocation *in_allocs = NULL;
1166949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1167949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    if (sizeof(RsAllocation) == sizeof(jlong)) {
1168949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      in_allocs = (RsAllocation*)in_ptr;
1169949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1170949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    } else {
1171949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      // Convert from 64-bit jlong types to the native pointer type.
1172949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1173949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      in_allocs = new RsAllocation[in_len];
1174949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1175949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      for (int index = in_len; --index >= 0;) {
1176949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        in_allocs[index] = (RsAllocation)in_ptr[index];
1177949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      }
1178949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1179949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1180949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    RsScriptCall sc;
1181949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.xStart = xstart;
1182949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.xEnd = xend;
1183949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.yStart = ystart;
1184949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.yEnd = yend;
1185949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.zStart = zstart;
1186949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.zEnd = zend;
1187949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1188949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.arrayStart = 0;
1189949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.arrayEnd = 0;
1190949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1191949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    rsScriptForEachMulti((RsContext)con, (RsScript)script, slot, in_allocs, in_len, (RsAllocation)aout, NULL, 0, &sc, sizeof(sc));
1192949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1193949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    if (sizeof(RsAllocation) != sizeof(jlong)) {
1194949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      delete[] in_allocs;
1195949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1196949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1197949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
1198949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes}
1199949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1200949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailesstatic void
1201949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris WailesnScriptForEachMultiClippedV(JNIEnv *_env, jobject _this, jlong con,
1202949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes                       jlong script, jint slot, jlongArray ains, jlong aout,
1203949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes                       jbyteArray params, jint xstart, jint xend,
1204949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes                       jint ystart, jint yend, jint zstart, jint zend)
1205949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes{
1206949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    LOG_API("nScriptForEachMultiClippedV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1207949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1208949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    jint   in_len = _env->GetArrayLength(ains);
1209949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    jlong* in_ptr = _env->GetLongArrayElements(ains, NULL);
1210949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1211949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    RsAllocation *in_allocs = NULL;
1212949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1213949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    if (sizeof(RsAllocation) == sizeof(jlong)) {
1214949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      in_allocs = (RsAllocation*)in_ptr;
1215949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1216949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    } else {
1217949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      // Convert from 64-bit jlong types to the native pointer type.
1218949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1219949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      in_allocs = new RsAllocation[in_len];
1220949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1221949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      for (int index = in_len; --index >= 0;) {
1222949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes        in_allocs[index] = (RsAllocation)in_ptr[index];
1223949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      }
1224949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1225949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1226949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    jint   param_len = _env->GetArrayLength(params);
1227949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    jbyte* param_ptr = _env->GetByteArrayElements(params, NULL);
1228949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1229949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    RsScriptCall sc;
1230949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.xStart = xstart;
1231949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.xEnd = xend;
1232949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.yStart = ystart;
1233949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.yEnd = yend;
1234949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.zStart = zstart;
1235949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.zEnd = zend;
1236949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1237949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.arrayStart = 0;
1238949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    sc.arrayEnd = 0;
1239949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    rsScriptForEachMulti((RsContext)con, (RsScript)script, slot, in_allocs, in_len, (RsAllocation)aout, param_ptr, param_len, &sc, sizeof(sc));
1240949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1241949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    if (sizeof(RsAllocation) != sizeof(jlong)) {
1242949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes      delete[] in_allocs;
1243949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1244949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1245949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
1246949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT);
1247949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes}
1248949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1249fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
1250fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
12510e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1252eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
1253e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
1254e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
1255d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
125671a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptCCreate, con(%p)", (RsContext)con);
1257e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
1258e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
1259e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
12600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong ret = 0;
12618451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    jbyte* script_ptr = NULL;
126243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
126343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
126443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
126543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
12668451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
126743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
126843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
126943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
127043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
12718451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
127243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
127343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1274e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
127543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
127643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
12778451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
12788451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
127943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
128043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1281e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
128243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
128343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
1284eff663f391fa4f119685d5c14489b94661ea126fTim Murray    //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
1285e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
12863aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con,
1287e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
1288e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
1289e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
129039ddc950c9064129ead5de04b200106c0659f937Jason Sams
129143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
1292e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
1293e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
129443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
129543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1296d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
12973aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)ret;
1298d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1299d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1300460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1301460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
13026ab97682fd444586ee135912a4210417a1c8781bJason Sams{
130371a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid);
13043aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
13056ab97682fd444586ee135912a4210417a1c8781bJason Sams}
13066ab97682fd444586ee135912a4210417a1c8781bJason Sams
1307460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1308460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
130908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
131071a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, (void *)sid, slot, sig);
13113aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
131208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
131308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1314460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1315460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
131608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
131771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot);
13183aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
131908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
132008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1321460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
13229807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
13239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlongArray _dstk, jlongArray _dstf, jlongArray _types)
132408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
132571a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con);
132608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
13279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint kernelsLen = _env->GetArrayLength(_kernels);
13289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, NULL);
13299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
13309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < kernelsLen; ++i) {
13319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
13329807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
13339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
13349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint srcLen = _env->GetArrayLength(_src);
13359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jSrcPtr = _env->GetLongArrayElements(_src, NULL);
13369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
13379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < srcLen; ++i) {
13389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
13399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
13409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
13419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstkLen = _env->GetArrayLength(_dstk);
13429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, NULL);
13439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
13449807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstkLen; ++i) {
13459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
13469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
13479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
13489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstfLen = _env->GetArrayLength(_dstf);
13499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, NULL);
13509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
13519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstfLen; ++i) {
13529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
13539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
13549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
13559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint typesLen = _env->GetArrayLength(_types);
13569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jTypesPtr = _env->GetLongArrayElements(_types, NULL);
13579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
13589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < typesLen; ++i) {
13599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        typesPtr[i] = (RsType)jTypesPtr[i];
13609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
13619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
13623aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con,
13639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
13649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
13659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
13669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
13679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsType *)typesPtr, typesLen * sizeof(RsType));
13689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
13699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(kernelsPtr);
13709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(srcPtr);
13719807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstkPtr);
13729807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstfPtr);
13739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(typesPtr);
13749807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
13759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
13769807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
13779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
13789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
137908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    return id;
138008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
138108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
138208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1383460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
138408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
138571a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
138608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        (void *)gid, (void *)kid, (void *)alloc);
1387eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
138808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
138908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
139008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1391460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
139208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
139371a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
139408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        (void *)gid, (void *)kid, (void *)alloc);
1395eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
139608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
139708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
139808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1399460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
140008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
140171a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
1402eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
140308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
140408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1405d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1406d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
14070e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1408eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
1409331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1410331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
1411331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
1412331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
1413d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
141471a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nProgramStoreCreate, con(%p)", (RsContext)con);
14153aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
1416331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1417331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
1418d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1419d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
14200011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
14210011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
14220011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
1423460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
14240011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
142571a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1426eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
14270011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
142854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
1429d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1430460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
143154c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
143271a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1433eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
143454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
143554c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
143654c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
1437460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
1438d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
143971a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1440eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1441d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1442d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
144368afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
1444d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1445460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1446eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
14479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jobjectArray texNames, jlongArray params)
14487e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
1449b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
14509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jParamPtr = _env->GetLongArrayElements(params, NULL);
14517e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
14527e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
14532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
14542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
14552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
14562123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
14572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
145871a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
14597e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
14609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
14619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
14629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
14639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
14643aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
14652123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                             nameArray, texCount, sizeArray,
14669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                             paramPtr, paramLen);
14672123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
14689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
14699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
14707e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
14717e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
14727e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
14737e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
14741fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
14751fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1476460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1477eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
14789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                     jobjectArray texNames, jlongArray params)
14791fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
1480b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
14819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jParamPtr = _env->GetLongArrayElements(params, NULL);
14820011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
14831fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
148471a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
1485ee41112e1539de95596600fd2c6dada5d275217fJason Sams
14862123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
14872123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
14882123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
14892123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
14902123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
14919807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
14929807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
14939807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
14949807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
14959807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
14963aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
14972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                           nameArray, texCount, sizeArray,
14989807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                           paramPtr, paramLen);
14992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
15009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
15019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
15020011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
15031fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
15041fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1505ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1506ebfb436a49673693b98469683451bd9ede797557Jason Sams
1507460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1508eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
1509ebfb436a49673693b98469683451bd9ede797557Jason Sams{
151071a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, pointSprite, cull);
15113aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
1512ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1513ebfb436a49673693b98469683451bd9ede797557Jason Sams
1514d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1515d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1516d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1517d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
151878c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script)
1519d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
152071a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
1521eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindRootScript((RsContext)con, (RsScript)script);
1522d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1523d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1524d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
152578c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs)
1526d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
152771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
1528eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
1529d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1530d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1531d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
153278c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf)
1533d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
153471a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, (RsProgramFragment)pf);
1535eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
1536d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1537d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
15380826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
153978c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf)
15400826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
154171a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
1542eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
15430826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
15440826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1545d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
154678c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf)
1547ebfb436a49673693b98469683451bd9ede797557Jason Sams{
154871a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
1549eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
1550ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1551ebfb436a49673693b98469683451bd9ede797557Jason Sams
1552d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
155302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
155402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
15550e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1556eff663f391fa4f119685d5c14489b94661ea126fTim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
1557a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
155802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
155971a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nSamplerCreate, con(%p)", (RsContext)con);
15603aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con,
1561a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)magFilter,
1562a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)minFilter,
1563a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapS,
1564a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapT,
1565a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapR,
1566a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 aniso);
156702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
156802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1569bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1570bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
1571460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
15720e0c0885aed99a119052a792becb5a0c5a93632dAshok BhatnPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jlong _loop, jfloat q) {
157371a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nPathCreate, con(%p)", (RsContext)con);
1574f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
15753aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic,
1576460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                                   (RsAllocation)_vtx,
1577460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                                   (RsAllocation)_loop, q);
1578f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    return id;
1579f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams}
1580f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
1581460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
15829807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim)
1583164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
158471a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nMeshCreate, con(%p)", (RsContext)con);
1585164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
158625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint vtxLen = _env->GetArrayLength(_vtx);
15879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, NULL);
15889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen);
15899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < vtxLen; ++i) {
15909807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i];
15919807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
15929807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
159325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint idxLen = _env->GetArrayLength(_idx);
15949807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlong *jIdxPtr = _env->GetLongArrayElements(_idx, NULL);
15959807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen);
15969807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < idxLen; ++i) {
15979807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i];
15989807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
15999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
160025999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint primLen = _env->GetArrayLength(_prim);
160125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1602164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
16033aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con,
160425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)vtxPtr, vtxLen,
160525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)idxPtr, idxLen,
160625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (uint32_t *)primPtr, primLen);
160780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
16089807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(vtxPtr);
16099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(idxPtr);
16109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0);
16119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0);
161225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_prim, primPtr, 0);
161325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    return id;
16149d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
16159d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
161680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
1617460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
161880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
161971a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
162080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1621eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
162280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
162380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
162480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
162580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
1626460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
162780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
162871a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
162980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1630eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
163180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
163280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
163380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
163480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
16359807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs)
163680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
163771a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
163880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
163980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1640eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
164180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
164280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
16433aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong alloc = (jlong)(uintptr_t)allocs[i];
16449807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_ids, i, 1, &alloc);
164580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
164680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
164780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
164880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
164980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
165080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
16519807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices)
165280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
165371a01b8648a440d4773acf0d2376d015c129ebb5Tim Murray    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
165480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
165580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
165680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
165780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1658eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
165980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
166080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
16613aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong alloc = (jlong)(uintptr_t)allocs[i];
16629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint prim = (jint)prims[i];
16639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_idxIds, i, 1, &alloc);
16649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_primitives, i, 1, &prim);
166580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
166680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
166780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
166880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1669164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1670164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
167156f9e6f8d5436d50530807950661e66ca5efe2bbTim Murraystatic jint
167256f9e6f8d5436d50530807950661e66ca5efe2bbTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) {
167356f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray    return (jint)sizeof(void*);
167456f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray}
167556f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray
167656f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray
1677164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1678164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1679d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
168094d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1681d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1682d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
16831c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
16841c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1685eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceCreate",                  "()J",                                     (void*)nDeviceCreate },
1686eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceDestroy",                 "(J)V",                                    (void*)nDeviceDestroy },
1687eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceSetConfig",               "(JII)V",                                  (void*)nDeviceSetConfig },
1688eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetUserMessage",         "(J[I)I",                                  (void*)nContextGetUserMessage },
1689eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetErrorMessage",        "(J)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1690eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextPeekMessage",            "(J[I)I",                                  (void*)nContextPeekMessage },
16911c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1692eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextInitToClient",           "(J)V",                                    (void*)nContextInitToClient },
1693eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextDeinitToClient",         "(J)V",                                    (void*)nContextDeinitToClient },
16942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
16952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
16962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
1697eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreate",                 "(JIII)J",                               (void*)nContextCreate },
1698eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreateGL",               "(JIIIIIIIIIIIIFI)J",                    (void*)nContextCreateGL },
1699eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextFinish",                 "(J)V",                                  (void*)nContextFinish },
1700eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetPriority",            "(JI)V",                                 (void*)nContextSetPriority },
1701eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetSurface",             "(JIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1702eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDestroy",                "(J)V",                                  (void*)nContextDestroy },
1703eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDump",                   "(JI)V",                                 (void*)nContextDump },
1704eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextPause",                  "(J)V",                                  (void*)nContextPause },
1705eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextResume",                 "(J)V",                                  (void*)nContextResume },
1706eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSendMessage",            "(JI[I)V",                               (void*)nContextSendMessage },
1707460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAssignName",                    "(JJ[B)V",                               (void*)nAssignName },
1708460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnGetName",                       "(JJ)Ljava/lang/String;",                (void*)nGetName },
1709460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnObjDestroy",                    "(JJ)V",                                 (void*)nObjDestroy },
1710eff663f391fa4f119685d5c14489b94661ea126fTim Murray
1711460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromFile",         "(JLjava/lang/String;)J",                (void*)nFileA3DCreateFromFile },
17120e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream",  "(JJ)J",                                 (void*)nFileA3DCreateFromAssetStream },
1713460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J",            (void*)nFileA3DCreateFromAsset },
1714460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetNumIndexEntries",     "(JJ)I",                                 (void*)nFileA3DGetNumIndexEntries },
1715460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetIndexEntries",        "(JJI[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
17160e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex",        "(JJI)J",                                (void*)nFileA3DGetEntryByIndex },
1717eff663f391fa4f119685d5c14489b94661ea126fTim Murray
17180e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile",            "(JLjava/lang/String;FI)J",              (void*)nFontCreateFromFile },
17190e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream",     "(JLjava/lang/String;FIJ)J",             (void*)nFontCreateFromAssetStream },
17200e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J",            (void*)nFontCreateFromAsset },
1721eff663f391fa4f119685d5c14489b94661ea126fTim Murray
1722460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementCreate",                 "(JJIZI)J",                              (void*)nElementCreate },
17239807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2",                "(J[J[Ljava/lang/String;[I)J",           (void*)nElementCreate2 },
1724460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementGetNativeData",          "(JJ[I)V",                               (void*)nElementGetNativeData },
17259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements",         "(JJ[J[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
1726460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
1727460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnTypeCreate",                    "(JJIIIZZI)J",                           (void*)nTypeCreate },
17289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData",             "(JJ[J)V",                               (void*)nTypeGetNativeData },
1729460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
17309807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped",         "(JJIIJ)J",                               (void*)nAllocationCreateTyped },
1731460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateFromBitmap",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateFromBitmap },
1732460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateBitmapBackedAllocation",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateBitmapBackedAllocation },
1733460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCubeCreateFromBitmap },
1734460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
1735460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyFromBitmap",      "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
1736460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyToBitmap",        "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
1737460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
1738460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSyncAll",             "(JJI)V",                                (void*)nAllocationSyncAll },
1739460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetSurface",          "(JJ)Landroid/view/Surface;",            (void*)nAllocationGetSurface },
1740460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSetSurface",          "(JJLandroid/view/Surface;)V",           (void*)nAllocationSetSurface },
1741460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoSend",              "(JJ)V",                                 (void*)nAllocationIoSend },
1742460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoReceive",           "(JJ)V",                                 (void*)nAllocationIoReceive },
1743460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationData1D },
1744460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationElementData1D",       "(JJIII[BI)V",                           (void*)nAllocationElementData1D },
1745460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationData2D },
1746460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D",              "(JJIIIIIIJIIII)V",                      (void*)nAllocationData2D_alloc },
1747460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIILjava/lang/Object;II)V",      (void*)nAllocationData3D },
1748460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIIJIIII)V",                     (void*)nAllocationData3D_alloc },
1749460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead",                "(JJLjava/lang/Object;I)V",              (void*)nAllocationRead },
1750460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationRead1D },
1751460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationRead2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationRead2D },
1752460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetType",             "(JJ)J",                                 (void*)nAllocationGetType},
1753460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationResize1D",            "(JJI)V",                                (void*)nAllocationResize1D },
1754460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGenerateMipmaps",     "(JJ)V",                                 (void*)nAllocationGenerateMipmaps },
1755460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
1756460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptBindAllocation",          "(JJJI)V",                               (void*)nScriptBindAllocation },
1757460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetTimeZone",             "(JJ[B)V",                               (void*)nScriptSetTimeZone },
1758460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvoke",                  "(JJI)V",                                (void*)nScriptInvoke },
1759460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvokeV",                 "(JJI[B)V",                              (void*)nScriptInvokeV },
1760460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptForEach",                 "(JJIJJ)V",                              (void*)nScriptForEach },
1761460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptForEach",                 "(JJIJJ[B)V",                            (void*)nScriptForEachV },
1762460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptForEachClipped",          "(JJIJJIIIIII)V",                        (void*)nScriptForEachClipped },
1763460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptForEachClipped",          "(JJIJJ[BIIIIII)V",                      (void*)nScriptForEachClippedV },
1764949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes{"rsnScriptForEachMultiClipped",     "(JJI[JJIIIIII)V",                       (void*)nScriptForEachMultiClipped },
1765949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes{"rsnScriptForEachMultiClipped",     "(JJI[JJ[BIIIIII)V",                     (void*)nScriptForEachMultiClippedV },
1766460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarI",                 "(JJII)V",                               (void*)nScriptSetVarI },
1767460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarI",                 "(JJI)I",                                (void*)nScriptGetVarI },
1768460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarJ",                 "(JJIJ)V",                               (void*)nScriptSetVarJ },
1769460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarJ",                 "(JJI)J",                                (void*)nScriptGetVarJ },
1770460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarF",                 "(JJIF)V",                               (void*)nScriptSetVarF },
1771460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarF",                 "(JJI)F",                                (void*)nScriptGetVarF },
1772460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarD",                 "(JJID)V",                               (void*)nScriptSetVarD },
1773460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarD",                 "(JJI)D",                                (void*)nScriptGetVarD },
1774460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarV",                 "(JJI[B)V",                              (void*)nScriptSetVarV },
1775460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarV",                 "(JJI[B)V",                              (void*)nScriptGetVarV },
1776460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarVE",                "(JJI[BJ[I)V",                           (void*)nScriptSetVarVE },
1777460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarObj",               "(JJIJ)V",                               (void*)nScriptSetVarObj },
1778eff663f391fa4f119685d5c14489b94661ea126fTim Murray
17790e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate",                 "(JLjava/lang/String;Ljava/lang/String;[BI)J",  (void*)nScriptCCreate },
1780460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptIntrinsicCreate",         "(JIJ)J",                                (void*)nScriptIntrinsicCreate },
1781460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptKernelIDCreate",          "(JJII)J",                               (void*)nScriptKernelIDCreate },
1782460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptFieldIDCreate",           "(JJI)J",                                (void*)nScriptFieldIDCreate },
17839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate",             "(J[J[J[J[J[J)J",                        (void*)nScriptGroupCreate },
1784460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetInput",           "(JJJJ)V",                               (void*)nScriptGroupSetInput },
1785460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetOutput",          "(JJJJ)V",                               (void*)nScriptGroupSetOutput },
1786460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupExecute",            "(JJ)V",                                 (void*)nScriptGroupExecute },
1787eff663f391fa4f119685d5c14489b94661ea126fTim Murray
17880e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate",            "(JZZZZZZIII)J",                         (void*)nProgramStoreCreate },
1789eff663f391fa4f119685d5c14489b94661ea126fTim Murray
1790460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindConstants",          "(JJIJ)V",                               (void*)nProgramBindConstants },
1791460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindTexture",            "(JJIJ)V",                               (void*)nProgramBindTexture },
1792460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindSampler",            "(JJIJ)V",                               (void*)nProgramBindSampler },
1793eff663f391fa4f119685d5c14489b94661ea126fTim Murray
17949807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate",         "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramFragmentCreate },
1795460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramRasterCreate",           "(JZI)J",                                (void*)nProgramRasterCreate },
17969807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate",           "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramVertexCreate },
1797eff663f391fa4f119685d5c14489b94661ea126fTim Murray
179878c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript",         "(JJ)V",                                 (void*)nContextBindRootScript },
179978c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore",       "(JJ)V",                                 (void*)nContextBindProgramStore },
180078c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment",    "(JJ)V",                                 (void*)nContextBindProgramFragment },
180178c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex",      "(JJ)V",                                 (void*)nContextBindProgramVertex },
180278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster",      "(JJ)V",                                 (void*)nContextBindProgramRaster },
1803eff663f391fa4f119685d5c14489b94661ea126fTim Murray
18040e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate",                 "(JIIIIIF)J",                            (void*)nSamplerCreate },
1805eff663f391fa4f119685d5c14489b94661ea126fTim Murray
18060e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnPathCreate",                    "(JIZJJF)J",                             (void*)nPathCreate },
18079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate",                    "(J[J[J[I)J",                            (void*)nMeshCreate },
1808eff663f391fa4f119685d5c14489b94661ea126fTim Murray
1809460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetVertexBufferCount",      "(JJ)I",                                 (void*)nMeshGetVertexBufferCount },
1810460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetIndexCount",             "(JJ)I",                                 (void*)nMeshGetIndexCount },
18119807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices",               "(JJ[JI)V",                              (void*)nMeshGetVertices },
18129807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices",                "(JJ[J[II)V",                            (void*)nMeshGetIndices },
181380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
181456f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray{"rsnSystemGetPointerSize",          "()I",                                   (void*)nSystemGetPointerSize },
1815d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1816d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1817d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1818d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1819d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1820d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1821d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1822d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1823d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1824d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1825d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1826d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1827d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    JNIEnv* env = NULL;
1828d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1829d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1830d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
18313762c311729fe9f3af085c14c5c1fb471d994c03Steve Block        ALOGE("ERROR: GetEnv failed\n");
1832d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1833d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1834d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    assert(env != NULL);
1835d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1836d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
18370e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat        ALOGE("ERROR: Renderscript native registration failed\n");
1838d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1839d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1840d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1841d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1842d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1843d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1844d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1845d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1846d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1847