android_renderscript_RenderScript.cpp revision e926dddb21392f6391dee56fa509d60cb6ee18c4
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/*
24cbe25a86b4aa3353c8016a129028671e902611fStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project
3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License.
6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at
7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software
11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and
14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License.
15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */
16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
17f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams#define LOG_TAG "libRS_jni"
18f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdlib.h>
20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdio.h>
21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <fcntl.h>
22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <unistd.h>
23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <math.h>
24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <utils/misc.h>
25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
26ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams#include <core/SkBitmap.h>
27650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkPixelRef.h>
28650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkStream.h>
29650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkTemplates.h>
30ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
31b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/Asset.h>
32b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h>
33b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h>
34f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h"
36d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h"
37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h"
38ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h"
39b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h"
40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
411d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rs.h>
421d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rsEnv.h>
43fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams#include <gui/Surface.h>
44d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden#include <gui/GLConsumer.h>
4552800617946c456e78ed010c82d0ec4358368164Mathias Agopian#include <gui/Surface.h>
46faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h>
47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
483762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define LOG_API(...)
50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
51d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
536fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams#define PER_ARRAY_TYPE(flag, fnc, ...) {                                                \
546fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    jint len = 0;                                                                       \
556fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    void *ptr = NULL;                                                                   \
5629868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    size_t typeBytes = 0;                                                               \
576fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    switch(dataType) {                                                                  \
586fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_FLOAT_32:                                                              \
596fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jfloatArray)data);                                  \
606fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetFloatArrayElements((jfloatArray)data, flag);                     \
6129868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 4;                                                                  \
626fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
636fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, JNI_ABORT);   \
646fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
656fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_FLOAT_64:                                                              \
666fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jdoubleArray)data);                                 \
676fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag);                   \
6829868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 8;                                                                  \
696fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
706fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, JNI_ABORT);\
716fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
726fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_8:                                                              \
736fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_8:                                                            \
746fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jbyteArray)data);                                   \
756fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetByteArrayElements((jbyteArray)data, flag);                       \
7629868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 1;                                                                  \
776fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
786fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, JNI_ABORT);       \
796fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
806fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_16:                                                             \
816fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_16:                                                           \
826fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jshortArray)data);                                  \
836fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetShortArrayElements((jshortArray)data, flag);                     \
8429868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 2;                                                                  \
856fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
866fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, JNI_ABORT);   \
876fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
886fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_32:                                                             \
896fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_32:                                                           \
906fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jintArray)data);                                    \
916fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetIntArrayElements((jintArray)data, flag);                         \
9229868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 4;                                                                  \
936fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
946fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, JNI_ABORT);         \
956fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
966fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_SIGNED_64:                                                             \
976fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    case RS_TYPE_UNSIGNED_64:                                                           \
986fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        len = _env->GetArrayLength((jlongArray)data);                                   \
996fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        ptr = _env->GetLongArrayElements((jlongArray)data, flag);                       \
10029868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams        typeBytes = 8;                                                                  \
1016fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        fnc(__VA_ARGS__);                                                               \
1026fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, JNI_ABORT);      \
1036fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        return;                                                                         \
1046fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    default:                                                                            \
1056fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams        break;                                                                          \
1066fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    }                                                                                   \
1076fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams}
1086fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams
1096fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams
110b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 {
111b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic:
1122123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
113b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fCStr = env->GetStringUTFChars(str, NULL);
114b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fLength = env->GetStringUTFLength(str);
115b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1162123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringToUTF8() {
117b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
118b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
119b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* c_str() const { return fCStr; }
120b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize length() const { return fLength; }
121b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
122b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate:
123b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    JNIEnv*     fEnv;
124b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jstring     fJStr;
125b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* fCStr;
126b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize       fLength;
127b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk};
128b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1292123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 {
1302123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic:
1312123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
1322123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
1332123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        mCStrings = NULL;
1342123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        mSizeArray = NULL;
1352123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        if (stringsLength > 0) {
1362123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
1372123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
1382123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            for (jsize ct = 0; ct < stringsLength; ct ++) {
1392123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
1402123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL);
1412123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
1422123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            }
1432123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
1442123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
1452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringArrayToUTF8() {
1462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        for (jsize ct=0; ct < mStringsLength; ct++) {
1472123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
1482123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
1492123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
1502123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mCStrings);
1512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mSizeArray);
1522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
1532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **c_str() const { return mCStrings; }
1542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *c_str_len() const { return mSizeArray; }
1552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize length() const { return mStringsLength; }
1562123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
1572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate:
1582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    JNIEnv      *mEnv;
1592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jobjectArray mStrings;
1602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **mCStrings;
1612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t      *mSizeArray;
1622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize        mStringsLength;
1632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk};
1642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
165d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
166d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
167ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
168ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
16943ee06857bb7f99446d1d84f8789016c5d105558Jason Samsstatic jfieldID gTypeNativeCache = 0;
170d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
171d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
172d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
173a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    gContextId             = _env->GetFieldID(_this, "mContext", "J");
174ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
175ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
176a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J");
177d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
178d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
179d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
180d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1813eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
182a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con)
18396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
184e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextFinish, con(%p)", (RsContext)con);
185a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextFinish((RsContext)con);
18696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
18796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
18896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
1897a629fac82f88126642081b4474879f6a883e313Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str)
1903eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
191e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
1923eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
1933eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
194a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len);
1953eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
1963eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
1973eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
198fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
1997a629fac82f88126642081b4474879f6a883e313Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj)
200fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
201e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
202fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    const char *name = NULL;
203a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaGetName((RsContext)con, (void *)obj, &name);
204581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    if(name == NULL || strlen(name) == 0) {
205581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk        return NULL;
206581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
207fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
208fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
209fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
2107ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
2117a629fac82f88126642081b4474879f6a883e313Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
2127ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
213e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
214a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsObjDestroy((RsContext)con, (void *)obj);
2157ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
2167ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
2173eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
2183eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
219a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic jlong
220d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
221d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
222d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
223d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return (jint)rsDeviceCreate();
224d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
225d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
226d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
227d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
228d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
229d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
230d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
231d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
232d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
233ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
234ebfb436a49673693b98469683451bd9ede797557Jason SamsnDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
235ebfb436a49673693b98469683451bd9ede797557Jason Sams{
236ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
237ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
238ebfb436a49673693b98469683451bd9ede797557Jason Sams}
239ebfb436a49673693b98469683451bd9ede797557Jason Sams
240a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic jlong
241add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason SamsnContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer, jint ct)
242d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
243d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
2449578e642403c0fa4fdcb32828f27c2417cabe88dTim Murray    return (jint)rsContextCreate((RsDevice)dev, ver, sdkVer, (RsContextType)ct, 0);
245704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
246704ff64b099406bb328898a7443921f22dbffd6dJason Sams
247a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic jlong
2484382467a80dd12c6362d57edca7f2367f7ae877cStephen HinesnContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer,
24911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
25011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
25111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
25211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
2532c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ,
2542c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int dpi)
25511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
25611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
25711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
25811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
25911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
26011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
26111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
26211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
26311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
26411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
26511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
26611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
267704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
2684382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    return (jint)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
269d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
270d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
271d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
272a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
2737d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
274e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
275a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextSetPriority((RsContext)con, p);
2767d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
2777d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2787d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2797d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2807d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
281a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd)
282efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
283e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, width, height, (Surface *)wnd);
284efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
2856c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk    ANativeWindow * window = NULL;
286efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    if (wnd == NULL) {
287efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
288efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
28964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        window = android_view_Surface_getNativeWindow(_env, wnd).get();
290efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
291efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
292a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextSetSurface((RsContext)con, width, height, window);
293efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
294efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
295efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
296a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con)
297d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
298e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextDestroy, con(%p)", (RsContext)con);
299a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextDestroy((RsContext)con);
300d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
301d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
302715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
303a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
304715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
305715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
306715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
307715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
308d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
309d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
310a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con)
31165e7aa56f56097418d617663683544c25b3988eaJason Sams{
312e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextPause, con(%p)", (RsContext)con);
313a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextPause((RsContext)con);
31465e7aa56f56097418d617663683544c25b3988eaJason Sams}
31565e7aa56f56097418d617663683544c25b3988eaJason Sams
31665e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
317a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con)
31865e7aa56f56097418d617663683544c25b3988eaJason Sams{
319e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextResume, con(%p)", (RsContext)con);
320a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextResume((RsContext)con);
32165e7aa56f56097418d617663683544c25b3988eaJason Sams}
32265e7aa56f56097418d617663683544c25b3988eaJason Sams
3231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3241c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
325a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
3261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
327e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con);
3281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
3291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
3311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
332a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = rsContextGetMessage((RsContext)con,
33365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 buf, sizeof(buf),
33465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
335edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
3361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
33771f2cf116aab893e224056c38ab146bd1538dd3eSteve Block        ALOGV("message receive buffer too small.  %i", receiveLen);
3381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
3391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
3401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
342edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint
343a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
344516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
345516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
346e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
347516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
348516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
3491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
350a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = rsContextGetMessage((RsContext)con,
35165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 ptr, len * 4,
35265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
353edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
354516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
35571f2cf116aab893e224056c38ab146bd1538dd3eSteve Block        ALOGV("message receive buffer too small.  %i", receiveLen);
356516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
357516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
358edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    return id;
3591c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
362a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
3631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
364e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextPeekMessage, con(%p)", (RsContext)con);
3651c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
3661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
3671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
368a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
369edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                  &subID, sizeof(subID));
3701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
3711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
3721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
373516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    return id;
374516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
375516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
376a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
377516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
378e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextInitToClient, con(%p)", (RsContext)con);
379a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextInitToClient((RsContext)con);
380516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
381516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
382a78e9adb864e27f54d82f325eb6148302cd03914Tim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
383516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
384e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con);
385a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextDeinitToClient((RsContext)con);
386516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
387516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
388455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void
389a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
390455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{
391455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    jint *ptr = NULL;
392455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    jint len = 0;
393455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
394455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        len = _env->GetArrayLength(data);
39557cf560719e5cbe4ed52e54bb0556e6f79bbe061Stephen Hines        ptr = _env->GetIntArrayElements(data, NULL);
396455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
397e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
398a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
399455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
400455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
401455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
402455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams}
403455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
404455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
405516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
4067a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
4077a629fac82f88126642081b4474879f6a883e313Tim MurraynElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size)
408d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
409e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, type, kind, norm, size);
4107a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, norm, size);
411d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
412d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
4137a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
414a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con,
4152123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                jintArray _ids, jobjectArray _names, jintArray _arraySizes)
416d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
417718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
418e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementCreate2, con(%p)", (RsContext)con);
419718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
420718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    jint *ids = _env->GetIntArrayElements(_ids, NULL);
42170d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
422718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
4232123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
4242123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4252123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **nameArray = names.c_str();
4262123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *sizeArray = names.c_str_len();
4272123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
4287a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsElementCreate2((RsContext)con,
429e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (RsElement *)ids, fieldCount,
4307a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
431e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
4322123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
433718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
43470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
435718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)id;
436d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
437d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
438dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
4397a629fac82f88126642081b4474879f6a883e313Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData)
440dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
441dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
442e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementGetNativeData, con(%p)", (RsContext)con);
443dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
444dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
445dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
446dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
447dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t elementData[5];
448a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize);
449dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
450dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
451dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
452dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
453dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
454dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
455dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
456dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
4577a629fac82f88126642081b4474879f6a883e313Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
4587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _IDs,
4597d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jobjectArray _names,
4607d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _arraySizes)
461dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
462dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_IDs);
463e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nElementGetSubElements, con(%p)", (RsContext)con);
464dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
465dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
466dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
4677d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
468dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
469a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
470dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
47111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    for(jint i = 0; i < dataSize; i++) {
472dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
473dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
4747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        _env->SetIntArrayRegion(_arraySizes, i, 1, (const jint*)&arraySizes[i]);
475dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
476dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
477dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
478dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
4797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    free(arraySizes);
480dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
481dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
482d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
483d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
4847a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
4857a629fac82f88126642081b4474879f6a883e313Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
486b109cc78616abee7291eb42094cd156b5db3355dJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
487d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
488b109cc78616abee7291eb42094cd156b5db3355dJason Sams    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
489e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv);
4903b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
4917a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, faces, yuv);
492d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
493d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
494dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
4957a629fac82f88126642081b4474879f6a883e313Tim MurraynTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _typeData)
496dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
497dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
498dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
499dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
500dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
501dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
502e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nTypeCreate, con(%p)", (RsContext)con);
503dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
504dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t typeData[6];
505a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6);
506dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
507dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
508dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
509dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
510dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
511dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
512d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
513d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
5147a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
5157a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, jint pointer)
516d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
517e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
518a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    return (jint) rsAllocationCreateTyped((RsContext)con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uint32_t)pointer);
519d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
520d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
521d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
5227a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
5235476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
524e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits);
525a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
5265476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
5275476b450e50939940dcf3f15c92335cee2fc572dJason Sams
52872226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject
5297a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a)
530615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{
531e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
532615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
533a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, (RsAllocation)a);
53472226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    sp<IGraphicBufferProducer> bp = v;
53572226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    v->decStrong(NULL);
536fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
53772226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp);
53872226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    return o;
539fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams}
540fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
541fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void
5427a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
543163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
54406883b71d0b75eee255b292ba66684eddc5fb172Stephen Hines    LOG_API("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)",
545e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)alloc, (Surface *)sur);
546163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
547fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    sp<Surface> s;
548163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    if (sur != 0) {
54964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        s = android_view_Surface_getSurface(_env, sur);
550163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
551163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
5527a629fac82f88126642081b4474879f6a883e313Tim Murray    rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, static_cast<ANativeWindow *>(s.get()));
553163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
554163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
555163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
5567a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
557163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
558e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, alloc);
5597a629fac82f88126642081b4474879f6a883e313Tim Murray    rsAllocationIoSend((RsContext)con, (RsAllocation)alloc);
560163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
561163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
562163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
5637a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
564163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
565e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, alloc);
5667a629fac82f88126642081b4474879f6a883e313Tim Murray    rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc);
567163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
568163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
569163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
570163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
5717a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
572f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
573e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
574a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
575f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
576f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
5777a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
5787a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
579fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
580ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
581a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
582ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
583fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
5845476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
5855476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
5867a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsAllocationCreateFromBitmap((RsContext)con,
58765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  (RsType)type, (RsAllocationMipmapControl)mip,
58865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  ptr, bitmap.getSize(), usage);
5895476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
5905476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
591ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
592fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
5937a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
5947a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
595a314551d69098537337c970da615a8f8af58e1f1Tim Murray{
596a314551d69098537337c970da615a8f8af58e1f1Tim Murray    SkBitmap const * nativeBitmap =
597a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
598a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const SkBitmap& bitmap(*nativeBitmap);
599a314551d69098537337c970da615a8f8af58e1f1Tim Murray
600a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.lockPixels();
601a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const void* ptr = bitmap.getPixels();
6027a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsAllocationCreateTyped((RsContext)con,
603a314551d69098537337c970da615a8f8af58e1f1Tim Murray                                            (RsType)type, (RsAllocationMipmapControl)mip,
604a314551d69098537337c970da615a8f8af58e1f1Tim Murray                                            (uint32_t)usage, (size_t)ptr);
605a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.unlockPixels();
606a314551d69098537337c970da615a8f8af58e1f1Tim Murray    return id;
607a314551d69098537337c970da615a8f8af58e1f1Tim Murray}
608a314551d69098537337c970da615a8f8af58e1f1Tim Murray
6097a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
6107a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage)
61167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
61267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
613a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
61467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
61567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
6165476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
6175476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
6187a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsAllocationCubeCreateFromBitmap((RsContext)con,
61965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      (RsType)type, (RsAllocationMipmapControl)mip,
62065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      ptr, bitmap.getSize(), usage);
6215476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
6225476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
62367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
62467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
62526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
6267a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
62726ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
62826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
629a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
63026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
631f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
632f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
63326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
6344ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
6354ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
636a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0,
637304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                       0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
63838faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray                       w, h, ptr, bitmap.getSize(), 0);
6394ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
6408a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
6418a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6424ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
6437a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
6448a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
6454ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
646a0398430fcf365fba6e42ad0bdca2fbf45ed6fe0Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
6474ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
6488a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6494ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
6504ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
651a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize());
6524ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
653835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk    bitmap.notifyPixelsChanged();
6548a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
6558a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
6564ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
657650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
6584ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
6594ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    nativeBitmap->unlockPixels();
660650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
661650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
6624ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
663d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
6647a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
6656fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams                  jint count, jobject data, int sizeBytes, int dataType)
666d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
6676fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
668e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
669e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, dataType);
670a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(NULL, rsAllocation1DData, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
671d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
672d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
673d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
67449a05d7b82956009f03acbb92a064eed054eb031Jason Sams//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
6757a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
67649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
67749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
678e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
67949bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
680a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
68149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
68249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
68349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
68449bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
6857a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
6866fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams                  jint w, jint h, jobject data, int sizeBytes, int dataType)
687d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
6886fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
6896fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
6906fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
691e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
692a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(NULL, rsAllocation2DData, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
693d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
694d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
69540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
696a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
6977a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff,
698304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstMip, jint dstFace,
699304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint width, jint height,
7007a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff,
701304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcMip, jint srcFace)
702304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{
7034c2e4c80ce519e09e5b00fd7533e64a834d70639Jason Sams    LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
704304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " dstMip(%i), dstFace(%i), width(%i), height(%i),"
705304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
706e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
707304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
708304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
709a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationCopy2DRange((RsContext)con,
710304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)dstAlloc,
711304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstXoff, dstYoff,
712304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
713304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
714304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)srcAlloc,
715304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcXoff, srcYoff,
716304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
717304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk}
718304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
719304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void
7207a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
7216fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams                    jint w, jint h, jint d, jobject data, int sizeBytes, int dataType)
722b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
7236fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
7246fcf2e196b7ad3503ddab1ed9105ab4beed75760Jason Sams    LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i), h(%i), d(%i), sizeBytes(%i)",
725e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, sizeBytes);
726a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(NULL, rsAllocation3DData, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
727b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
728b05d689653b1bc94836f716f29e9578677c29075Jason Sams
729b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void
730a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
7317a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
732b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint dstMip,
733b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint width, jint height, jint depth,
7347a629fac82f88126642081b4474879f6a883e313Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
735b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint srcMip)
736b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
737b05d689653b1bc94836f716f29e9578677c29075Jason Sams    LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
738b05d689653b1bc94836f716f29e9578677c29075Jason Sams            " dstMip(%i), width(%i), height(%i),"
739b05d689653b1bc94836f716f29e9578677c29075Jason Sams            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
740e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip,
741e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip);
742b05d689653b1bc94836f716f29e9578677c29075Jason Sams
743a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationCopy3DRange((RsContext)con,
744b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)dstAlloc,
745b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstXoff, dstYoff, dstZoff, dstMip,
746b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            width, height, depth,
747b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)srcAlloc,
748b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            srcXoff, srcYoff, srcZoff, srcMip);
749b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
750b05d689653b1bc94836f716f29e9578677c29075Jason Sams
75140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
75240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
7537a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType)
754fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
75529868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
756e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
757a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(0, rsAllocationRead, (RsContext)con, alloc, ptr, len * typeBytes);
758fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
759fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
760fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
7617a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
76229868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams                  jint count, jobject data, int sizeBytes, int dataType)
763fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
76429868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
765e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)",
766e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, alloc, offset, count, sizeBytes, dataType);
767a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(0, rsAllocation1DRead, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
768fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
769fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
770fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
7717a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
77229868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams                  jint w, jint h, jobject data, int sizeBytes, int dataType)
77340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
77429868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
77529868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
77629868dfae26550a9541008b3e9b12fe2c58e1c7eJason Sams    LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
777e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray            (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
778a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    PER_ARRAY_TYPE(0, rsAllocation2DRead, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
77940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
780d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
7817a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
7827a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
783dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
784e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
7857a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong) rsaAllocationGetType((RsContext)con, (RsAllocation)a);
786dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
787dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
7885edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
7897a629fac82f88126642081b4474879f6a883e313Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
7905edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
791e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, (RsAllocation)alloc, dimX);
792a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
7935edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
7945edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
795aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
796aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
7977a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
7987a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset)
799aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
80071f2cf116aab893e224056c38ab146bd1538dd3eSteve Block    ALOGV("______nFileA3D %u", (uint32_t) native_asset);
801aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
802aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
803aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8047a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
805b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
806b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
807b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8087a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
809a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
810b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
811b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
812b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
813b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
814b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
815b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
816b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
817b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
818b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
819b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
820b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
821b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8227a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsaFileA3DCreateFromAsset((RsContext)con, asset);
823b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
824b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
825b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
8267a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
827a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
828b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
829b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
8307a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
831b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
832aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
833aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
834aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
8357a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jint
8367a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
837aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
838aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
839a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
840aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return numEntries;
841aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
842aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
843aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
8447a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
845aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
84671f2cf116aab893e224056c38ab146bd1538dd3eSteve Block    ALOGV("______nFileA3D %u", (uint32_t) fileA3D);
847aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
848aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
849a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
850aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
851aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
852aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
853aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
854aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
855aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
856aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
857aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
858aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
859aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
8607a629fac82f88126642081b4474879f6a883e313Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
861aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
86271f2cf116aab893e224056c38ab146bd1538dd3eSteve Block    ALOGV("______nFileA3D %u", (uint32_t) fileA3D);
863a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    jint id = (jint)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
864aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
865aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
866d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
867d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
868d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
8699b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic int
870a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
871b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
8729b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
873b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
874a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    jint id = (jint)rsFontCreateFromFile((RsContext)con,
875e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
876e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
877b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
878b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
879b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
880b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
881b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
882a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
883b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                           jstring name, jfloat fontSize, jint dpi, jint native_asset)
884b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
885b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
886b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
887b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
888a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    jint id = (jint)rsFontCreateFromMemory((RsContext)con,
889e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
890e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
891b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
892b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
893b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
894b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
895b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
896a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
897b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
898b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
899b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
900b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
901b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
902b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
903b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
904b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
905b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
906b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
907b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
908b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
9099b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
910a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    jint id = (jint)rsFontCreateFromMemory((RsContext)con,
911e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
912e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
913b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
914b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
9159b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
9169b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
9179b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
918bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
919bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
920bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
9217a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
922d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
923e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
924a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
925d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
926d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
927d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9287a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
9294d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
930e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
931a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
9324d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
9334d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
9347c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint
9357a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9367c4caadb939b1563328251c156262c179a685c70Tim Murray{
937e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9387c4caadb939b1563328251c156262c179a685c70Tim Murray    int value = 0;
939a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9407c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9417c4caadb939b1563328251c156262c179a685c70Tim Murray}
9427c4caadb939b1563328251c156262c179a685c70Tim Murray
9434d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
9447a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
9456f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
946e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val);
947a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
9486f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
9496f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
9506f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
9517a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
952031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
953e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, (void *)script, slot, val);
954a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
955031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
956031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
9577c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong
9587a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9597c4caadb939b1563328251c156262c179a685c70Tim Murray{
960e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9617c4caadb939b1563328251c156262c179a685c70Tim Murray    jlong value = 0;
962a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9637c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9647c4caadb939b1563328251c156262c179a685c70Tim Murray}
9657c4caadb939b1563328251c156262c179a685c70Tim Murray
966031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
9677a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
9684d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
969e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, slot, val);
970a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
9714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
9724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
9737c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat
9747a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9757c4caadb939b1563328251c156262c179a685c70Tim Murray{
976e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9777c4caadb939b1563328251c156262c179a685c70Tim Murray    jfloat value = 0;
978a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9797c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9807c4caadb939b1563328251c156262c179a685c70Tim Murray}
9817c4caadb939b1563328251c156262c179a685c70Tim Murray
9824d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
9837a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
984ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
985e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, slot, val);
986a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
987ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
988ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
9897c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble
9907a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
9917c4caadb939b1563328251c156262c179a685c70Tim Murray{
992e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
9937c4caadb939b1563328251c156262c179a685c70Tim Murray    jdouble value = 0;
994a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
9957c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
9967c4caadb939b1563328251c156262c179a685c70Tim Murray}
9977c4caadb939b1563328251c156262c179a685c70Tim Murray
998ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
9997a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
10004d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
1001e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
10034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1004a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
10054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
10064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
10074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1008adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void
10097a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
10107c4caadb939b1563328251c156262c179a685c70Tim Murray{
1011e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10127c4caadb939b1563328251c156262c179a685c70Tim Murray    jint len = _env->GetArrayLength(data);
10137c4caadb939b1563328251c156262c179a685c70Tim Murray    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1014a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
10157c4caadb939b1563328251c156262c179a685c70Tim Murray    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
10167c4caadb939b1563328251c156262c179a685c70Tim Murray}
10177c4caadb939b1563328251c156262c179a685c70Tim Murray
10187c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void
10197a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jlong elem, jintArray dims)
1020adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{
1021e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1022adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint len = _env->GetArrayLength(data);
1023adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1024adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1025adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
1026a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
1027adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines                     (const size_t*) dimsPtr, dimsLen);
1028adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1029adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1030adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines}
1031adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines
1032d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1033d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10347a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
1035584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
1036e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
1037584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1038584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
1039584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
1040584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1041584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1042a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
1043584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1044584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
1045584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1046584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
1047584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
1048584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
104922534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
10507a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
105122534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
1052e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
1053a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
105422534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
105522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1056584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
10577a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
1058be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
1059e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10604d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
10614d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1062a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
10634d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1064be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
1065be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
10666e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
1067a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptForEach(JNIEnv *_env, jobject _this, jlong con,
10687a629fac82f88126642081b4474879f6a883e313Tim Murray               jlong script, jint slot, jlong ain, jlong aout)
10696e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
1070e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1071a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, NULL, 0);
10726e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
10736e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
1074a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptForEachV(JNIEnv *_env, jobject _this, jlong con,
10757a629fac82f88126642081b4474879f6a883e313Tim Murray                jlong script, jint slot, jlong ain, jlong aout, jbyteArray params)
10766e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
1077e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
10786e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jint len = _env->GetArrayLength(params);
10796e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1080a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, NULL, 0);
10816e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
10826e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
10836e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams
1084eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murraystatic void
1085a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptForEachClipped(JNIEnv *_env, jobject _this, jlong con,
10867a629fac82f88126642081b4474879f6a883e313Tim Murray                      jlong script, jint slot, jlong ain, jlong aout,
1087dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                      jint xstart, jint xend,
1088eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                      jint ystart, jint yend, jint zstart, jint zend)
1089eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray{
1090e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1091dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    RsScriptCall sc;
1092dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.xStart = xstart;
1093dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.xEnd = xend;
1094dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.yStart = ystart;
1095dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.yEnd = yend;
1096dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.zStart = zstart;
1097dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.zEnd = zend;
1098dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1099dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.arrayStart = 0;
1100dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    sc.arrayEnd = 0;
1101a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, &sc, sizeof(sc));
1102dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines}
1103dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines
1104dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hinesstatic void
1105a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptForEachClippedV(JNIEnv *_env, jobject _this, jlong con,
11067a629fac82f88126642081b4474879f6a883e313Tim Murray                       jlong script, jint slot, jlong ain, jlong aout,
1107dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                       jbyteArray params, jint xstart, jint xend,
1108dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                       jint ystart, jint yend, jint zstart, jint zend)
1109dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines{
1110e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
1111eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    jint len = _env->GetArrayLength(params);
1112eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1113eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    RsScriptCall sc;
1114eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.xStart = xstart;
1115eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.xEnd = xend;
1116eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.yStart = ystart;
1117eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.yEnd = yend;
1118eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.zStart = zstart;
1119eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.zEnd = zend;
1120eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1121eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.arrayStart = 0;
1122eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    sc.arrayEnd = 0;
1123a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptForEach((RsContext)con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, &sc, sizeof(sc));
1124eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1125eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray}
1126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1127fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
1128fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
1129e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Samsstatic jint
1130a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
1131e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
1132e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
1133d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1134e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptCCreate, con(%p)", (RsContext)con);
1135e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
1136e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
1137e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
1138e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    jint ret = 0;
11398451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    jbyte* script_ptr = NULL;
114043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
114143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
114243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
114343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
11448451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
114543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
114643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
114743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
114843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
11498451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
115043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
115143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1152e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
115343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
115443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
11558451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
11568451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
115743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
115843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1159e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
116043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
116143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
1162a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
1163e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
1164a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    ret = (jint)rsScriptCCreate((RsContext)con,
1165e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
1166e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
1167e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
116839ddc950c9064129ead5de04b200106c0659f937Jason Sams
116943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
1170e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
1171e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
117243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
117343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1174d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1175e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    return ret;
1176d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1177d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
11787a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
11797a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
11806ab97682fd444586ee135912a4210417a1c8781bJason Sams{
1181e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid);
11827a629fac82f88126642081b4474879f6a883e313Tim Murray    return (jlong)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
11836ab97682fd444586ee135912a4210417a1c8781bJason Sams}
11846ab97682fd444586ee135912a4210417a1c8781bJason Sams
11857a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
11867a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
118708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1188e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, (void *)sid, slot, sig);
1189a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    return (jint)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
119008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
119108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
11927a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
11937a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
119408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1195e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot);
1196a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    return (jint)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
119708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
119808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
11997a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1200a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jintArray _kernels, jintArray _src,
120108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jintArray _dstk, jintArray _dstf, jintArray _types)
120208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1203e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con);
120408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
120508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jint kernelsLen = _env->GetArrayLength(_kernels) * sizeof(int);
120608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jint *kernelsPtr = _env->GetIntArrayElements(_kernels, NULL);
120708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jint srcLen = _env->GetArrayLength(_src) * sizeof(int);
120808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jint *srcPtr = _env->GetIntArrayElements(_src, NULL);
120908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jint dstkLen = _env->GetArrayLength(_dstk) * sizeof(int);
121008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jint *dstkPtr = _env->GetIntArrayElements(_dstk, NULL);
121108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jint dstfLen = _env->GetArrayLength(_dstf) * sizeof(int);
121208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jint *dstfPtr = _env->GetIntArrayElements(_dstf, NULL);
121308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jint typesLen = _env->GetArrayLength(_types) * sizeof(int);
121408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    jint *typesPtr = _env->GetIntArrayElements(_types, NULL);
121508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1216a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = (int)rsScriptGroupCreate((RsContext)con,
121708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams                               (RsScriptKernelID *)kernelsPtr, kernelsLen,
121808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams                               (RsScriptKernelID *)srcPtr, srcLen,
121908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams                               (RsScriptKernelID *)dstkPtr, dstkLen,
122008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams                               (RsScriptFieldID *)dstfPtr, dstfLen,
122108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams                               (RsType *)typesPtr, typesLen);
122208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
122308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    _env->ReleaseIntArrayElements(_kernels, kernelsPtr, 0);
122408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    _env->ReleaseIntArrayElements(_src, srcPtr, 0);
122508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    _env->ReleaseIntArrayElements(_dstk, dstkPtr, 0);
122608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    _env->ReleaseIntArrayElements(_dstf, dstfPtr, 0);
122708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    _env->ReleaseIntArrayElements(_types, typesPtr, 0);
122808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    return id;
122908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
123008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
123108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
12327a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
123308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1234e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
123508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        (void *)gid, (void *)kid, (void *)alloc);
1236a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
123708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
123808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
123908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
12407a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
124108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1242e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
124308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        (void *)gid, (void *)kid, (void *)alloc);
1244a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
124508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
124608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
124708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
12487a629fac82f88126642081b4474879f6a883e313Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
124908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
1250e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
1251a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
125208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
125308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1254d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1255d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1256d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
1257a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
1258331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1259331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
1260331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
1261331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
1262d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1263e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramStoreCreate, con(%p)", (RsContext)con);
1264a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    return (jint)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
1265331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1266331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
1267d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1268d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
12690011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
12700011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
12710011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
12727a629fac82f88126642081b4474879f6a883e313Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
12730011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
1274e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1275a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
12760011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
127754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
1278d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
12797a629fac82f88126642081b4474879f6a883e313Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
128054c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
1281e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1282a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
128354c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
128454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
128554c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
12867a629fac82f88126642081b4474879f6a883e313Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
1287d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1288e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1289a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1290d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1291d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
129268afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
1293d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
12947a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1295a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
12962123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                       jobjectArray texNames, jintArray params)
12977e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
1298b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
12997e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
13007e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
13017e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13022123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
13032123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
13042123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
13052123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
13062123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
1307e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
13087e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13097a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong ret = (jlong)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
13102123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                             nameArray, texCount, sizeArray,
13112123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                             (uint32_t *)paramPtr, paramLen);
13122123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
13137e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
13147e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
13157e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
13167e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13177e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
13181fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
13191fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
13207a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1321a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
13222123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                     jobjectArray texNames, jintArray params)
13231fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
1324b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
13250011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
13260011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
13271fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1328e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
1329ee41112e1539de95596600fd2c6dada5d275217fJason Sams
13302123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
13312123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
13322123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
13332123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
13342123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
13357a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong ret = (jlong)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
13362123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                           nameArray, texCount, sizeArray,
13372123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                           (uint32_t *)paramPtr, paramLen);
13382123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
13390011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
13400011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
13411fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
13421fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1343ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1344ebfb436a49673693b98469683451bd9ede797557Jason Sams
13457a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1346a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
1347ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1348e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, pointSprite, cull);
1349a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    return (jint)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
1350ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1351ebfb436a49673693b98469683451bd9ede797557Jason Sams
1352d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1353d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1354d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1355d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1356a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jint script)
1357d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1358e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
1359a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindRootScript((RsContext)con, (RsScript)script);
1360d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1361d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1362d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1363a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jint pfs)
1364d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1365e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
1366a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
1367d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1368d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1369d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1370a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jint pf)
1371d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1372e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, (RsProgramFragment)pf);
1373a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
1374d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1375d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
13760826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
1377a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jint pf)
13780826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
1379e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
1380a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
13810826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
13820826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1383d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
1384a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jint pf)
1385ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1386e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
1387a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
1388ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1389ebfb436a49673693b98469683451bd9ede797557Jason Sams
1390d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
139102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
139202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
139302fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic jint
1394a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
1395a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
139602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
1397e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nSamplerCreate, con(%p)", (RsContext)con);
1398a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    return (jint)rsSamplerCreate((RsContext)con,
1399a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)magFilter,
1400a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)minFilter,
1401a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapS,
1402a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapT,
1403a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapR,
1404a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 aniso);
140502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
140602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1407bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1408bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
14097a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
14107a629fac82f88126642081b4474879f6a883e313Tim MurraynPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jint _loop, jfloat q) {
1411e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nPathCreate, con(%p)", (RsContext)con);
1412f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
14137a629fac82f88126642081b4474879f6a883e313Tim Murray    jlong id = (jlong)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic,
14147a629fac82f88126642081b4474879f6a883e313Tim Murray                                   (RsAllocation)_vtx,
14157a629fac82f88126642081b4474879f6a883e313Tim Murray                                   (RsAllocation)_loop, q);
1416f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    return id;
1417f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams}
1418f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
14197a629fac82f88126642081b4474879f6a883e313Tim Murraystatic jlong
1420a78e9adb864e27f54d82f325eb6148302cd03914Tim MurraynMeshCreate(JNIEnv *_env, jobject _this, jlong con, jintArray _vtx, jintArray _idx, jintArray _prim)
1421164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
1422e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshCreate, con(%p)", (RsContext)con);
1423164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
142425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint vtxLen = _env->GetArrayLength(_vtx);
142525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *vtxPtr = _env->GetIntArrayElements(_vtx, NULL);
142625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint idxLen = _env->GetArrayLength(_idx);
142725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *idxPtr = _env->GetIntArrayElements(_idx, NULL);
142825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint primLen = _env->GetArrayLength(_prim);
142925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1430164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1431a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    int id = (int)rsMeshCreate((RsContext)con,
143225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)vtxPtr, vtxLen,
143325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)idxPtr, idxLen,
143425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (uint32_t *)primPtr, primLen);
143580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
143625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_vtx, vtxPtr, 0);
143725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_idx, idxPtr, 0);
143825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_prim, primPtr, 0);
143925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    return id;
14409d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
14419d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
144280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
14437a629fac82f88126642081b4474879f6a883e313Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
144480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1445e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
144680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1447a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
144880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
144980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
145080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
145180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
14527a629fac82f88126642081b4474879f6a883e313Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
145380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1454e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
145580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1456a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
145780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
145880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
145980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
146080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
14617a629fac82f88126642081b4474879f6a883e313Tim MurraynMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jintArray _ids, int numVtxIDs)
146280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1463e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
146480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
146580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1466a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
146780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
146880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
146980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
147080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
147180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
147280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
147380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
147480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
147580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
14767a629fac82f88126642081b4474879f6a883e313Tim MurraynMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
147780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
1478e926dddb21392f6391dee56fa509d60cb6ee18c4Tim Murray    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
147980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
148080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
148180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
148280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1483a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray    rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
148480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
148580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
148680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
148780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
148880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
148980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
149080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
149180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1492164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1493164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1494164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1495164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1496d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
149794d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1498d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1499d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
15001c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
15011c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1502a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nDeviceCreate",                  "()J",                                     (void*)nDeviceCreate },
1503a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nDeviceDestroy",                 "(J)V",                                    (void*)nDeviceDestroy },
1504a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nDeviceSetConfig",               "(JII)V",                                  (void*)nDeviceSetConfig },
1505a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextGetUserMessage",         "(J[I)I",                                  (void*)nContextGetUserMessage },
1506a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextGetErrorMessage",        "(J)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1507a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextPeekMessage",            "(J[I)I",                                  (void*)nContextPeekMessage },
15081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1509a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextInitToClient",           "(J)V",                                    (void*)nContextInitToClient },
1510a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"nContextDeinitToClient",         "(J)V",                                    (void*)nContextDeinitToClient },
15112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
15122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
15132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
1514a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextCreate",                 "(JIII)J",                               (void*)nContextCreate },
1515a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextCreateGL",               "(JIIIIIIIIIIIIFI)J",                    (void*)nContextCreateGL },
1516a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextFinish",                 "(J)V",                                  (void*)nContextFinish },
1517a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextSetPriority",            "(JI)V",                                 (void*)nContextSetPriority },
1518a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextSetSurface",             "(JIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1519a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextDestroy",                "(J)V",                                  (void*)nContextDestroy },
1520a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextDump",                   "(JI)V",                                 (void*)nContextDump },
1521a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextPause",                  "(J)V",                                  (void*)nContextPause },
1522a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextResume",                 "(J)V",                                  (void*)nContextResume },
1523a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextSendMessage",            "(JI[I)V",                               (void*)nContextSendMessage },
15247a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAssignName",                    "(JJ[B)V",                               (void*)nAssignName },
15257a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnGetName",                       "(JJ)Ljava/lang/String;",                (void*)nGetName },
15267a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnObjDestroy",                    "(JJ)V",                                 (void*)nObjDestroy },
1527a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
15287a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DCreateFromFile",         "(JLjava/lang/String;)J",                (void*)nFileA3DCreateFromFile },
15297a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DCreateFromAssetStream",  "(JI)J",                                 (void*)nFileA3DCreateFromAssetStream },
15307a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J",            (void*)nFileA3DCreateFromAsset },
15317a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DGetNumIndexEntries",     "(JJ)I",                                 (void*)nFileA3DGetNumIndexEntries },
15327a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DGetIndexEntries",        "(JJI[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
15337a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnFileA3DGetEntryByIndex",        "(JJI)I",                                (void*)nFileA3DGetEntryByIndex },
1534a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
1535a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnFontCreateFromFile",            "(JLjava/lang/String;FI)I",              (void*)nFontCreateFromFile },
1536a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnFontCreateFromAssetStream",     "(JLjava/lang/String;FII)I",             (void*)nFontCreateFromAssetStream },
1537a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnFontCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)I",            (void*)nFontCreateFromAsset },
1538a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
15397a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnElementCreate",                 "(JJIZI)J",                              (void*)nElementCreate },
15407a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnElementCreate2",                "(J[I[Ljava/lang/String;[I)J",           (void*)nElementCreate2 },
15417a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnElementGetNativeData",          "(JJ[I)V",                               (void*)nElementGetNativeData },
15427a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnElementGetSubElements",         "(JJ[I[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
15437a629fac82f88126642081b4474879f6a883e313Tim Murray
15447a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnTypeCreate",                    "(JJIIIZZI)J",                           (void*)nTypeCreate },
15457a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnTypeGetNativeData",             "(JJ[I)V",                               (void*)nTypeGetNativeData },
15467a629fac82f88126642081b4474879f6a883e313Tim Murray
15477a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCreateTyped",         "(JJIII)J",                               (void*)nAllocationCreateTyped },
15487a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCreateFromBitmap",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateFromBitmap },
15497a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCreateBitmapBackedAllocation",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateBitmapBackedAllocation },
15507a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCubeCreateFromBitmap },
15517a629fac82f88126642081b4474879f6a883e313Tim Murray
15527a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCopyFromBitmap",      "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
15537a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationCopyToBitmap",        "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
15547a629fac82f88126642081b4474879f6a883e313Tim Murray
15557a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationSyncAll",             "(JJI)V",                                (void*)nAllocationSyncAll },
15567a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationGetSurface",          "(JJ)Landroid/view/Surface;",            (void*)nAllocationGetSurface },
15577a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationSetSurface",          "(JJLandroid/view/Surface;)V",           (void*)nAllocationSetSurface },
15587a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationIoSend",              "(JJ)V",                                 (void*)nAllocationIoSend },
15597a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationIoReceive",           "(JJ)V",                                 (void*)nAllocationIoReceive },
15607a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationData1D },
15617a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationElementData1D",       "(JJIII[BI)V",                           (void*)nAllocationElementData1D },
15627a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationData2D },
15637a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData2D",              "(JJIIIIIIJIIII)V",                      (void*)nAllocationData2D_alloc },
15647a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIILjava/lang/Object;II)V",      (void*)nAllocationData3D },
15657a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIIJIIII)V",                     (void*)nAllocationData3D_alloc },
15667a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationRead",                "(JJLjava/lang/Object;I)V",              (void*)nAllocationRead },
15677a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationRead1D",              "(JJIIILjava/lang/Object;II)V",          (void*)nAllocationRead1D },
15687a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationRead2D",              "(JJIIIIIILjava/lang/Object;II)V",       (void*)nAllocationRead2D },
15697a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationGetType",             "(JJ)J",                                 (void*)nAllocationGetType},
15707a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationResize1D",            "(JJI)V",                                (void*)nAllocationResize1D },
15717a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnAllocationGenerateMipmaps",     "(JJ)V",                                 (void*)nAllocationGenerateMipmaps },
15727a629fac82f88126642081b4474879f6a883e313Tim Murray
15737a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptBindAllocation",          "(JJJI)V",                               (void*)nScriptBindAllocation },
15747a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetTimeZone",             "(JJ[B)V",                               (void*)nScriptSetTimeZone },
15757a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptInvoke",                  "(JJI)V",                                (void*)nScriptInvoke },
15767a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptInvokeV",                 "(JJI[B)V",                              (void*)nScriptInvokeV },
15777a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptForEach",                 "(JJIJJ)V",                              (void*)nScriptForEach },
15787a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptForEach",                 "(JJIJJ[B)V",                            (void*)nScriptForEachV },
15797a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptForEachClipped",          "(JJIJJIIIIII)V",                        (void*)nScriptForEachClipped },
15807a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptForEachClipped",          "(JJIJJ[BIIIIII)V",                      (void*)nScriptForEachClippedV },
15817a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarI",                 "(JJII)V",                               (void*)nScriptSetVarI },
15827a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarI",                 "(JJI)I",                                (void*)nScriptGetVarI },
15837a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarJ",                 "(JJIJ)V",                               (void*)nScriptSetVarJ },
15847a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarJ",                 "(JJI)J",                                (void*)nScriptGetVarJ },
15857a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarF",                 "(JJIF)V",                               (void*)nScriptSetVarF },
15867a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarF",                 "(JJI)F",                                (void*)nScriptGetVarF },
15877a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarD",                 "(JJID)V",                               (void*)nScriptSetVarD },
15887a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarD",                 "(JJI)D",                                (void*)nScriptGetVarD },
15897a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarV",                 "(JJI[B)V",                              (void*)nScriptSetVarV },
15907a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGetVarV",                 "(JJI[B)V",                              (void*)nScriptGetVarV },
15917a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarVE",                "(JJI[BJ[I)V",                           (void*)nScriptSetVarVE },
15927a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptSetVarObj",               "(JJIJ)V",                               (void*)nScriptSetVarObj },
1593a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
1594a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnScriptCCreate",                 "(JLjava/lang/String;Ljava/lang/String;[BI)I",  (void*)nScriptCCreate },
15957a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptIntrinsicCreate",         "(JIJ)J",                                (void*)nScriptIntrinsicCreate },
15967a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptKernelIDCreate",          "(JJII)J",                               (void*)nScriptKernelIDCreate },
15977a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptFieldIDCreate",           "(JJI)J",                                (void*)nScriptFieldIDCreate },
15987a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGroupCreate",             "(J[I[I[I[I[I)J",                        (void*)nScriptGroupCreate },
15997a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGroupSetInput",           "(JJJJ)V",                               (void*)nScriptGroupSetInput },
16007a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGroupSetOutput",          "(JJJJ)V",                               (void*)nScriptGroupSetOutput },
16017a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnScriptGroupExecute",            "(JJ)V",                                 (void*)nScriptGroupExecute },
1602a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
1603a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnProgramStoreCreate",            "(JZZZZZZIII)I",                         (void*)nProgramStoreCreate },
1604a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16057a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramBindConstants",          "(JJIJ)V",                               (void*)nProgramBindConstants },
16067a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramBindTexture",            "(JJIJ)V",                               (void*)nProgramBindTexture },
16077a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramBindSampler",            "(JJIJ)V",                               (void*)nProgramBindSampler },
1608a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16097a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramFragmentCreate",         "(JLjava/lang/String;[Ljava/lang/String;[I)J",              (void*)nProgramFragmentCreate },
16107a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramRasterCreate",           "(JZI)J",                                (void*)nProgramRasterCreate },
16117a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnProgramVertexCreate",           "(JLjava/lang/String;[Ljava/lang/String;[I)J",              (void*)nProgramVertexCreate },
1612a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
1613a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextBindRootScript",         "(JI)V",                                 (void*)nContextBindRootScript },
1614a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextBindProgramStore",       "(JI)V",                                 (void*)nContextBindProgramStore },
1615a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextBindProgramFragment",    "(JI)V",                                 (void*)nContextBindProgramFragment },
1616a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextBindProgramVertex",      "(JI)V",                                 (void*)nContextBindProgramVertex },
1617a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnContextBindProgramRaster",      "(JI)V",                                 (void*)nContextBindProgramRaster },
1618a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
1619a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray{"rsnSamplerCreate",                 "(JIIIIIF)I",                            (void*)nSamplerCreate },
1620a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16217a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnPathCreate",                    "(JIZJIF)J",                             (void*)nPathCreate },
16227a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnMeshCreate",                    "(J[I[I[I)J",                            (void*)nMeshCreate },
1623a78e9adb864e27f54d82f325eb6148302cd03914Tim Murray
16247a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnMeshGetVertexBufferCount",      "(JJ)I",                                 (void*)nMeshGetVertexBufferCount },
16257a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnMeshGetIndexCount",             "(JJ)I",                                 (void*)nMeshGetIndexCount },
16267a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnMeshGetVertices",               "(JJ[II)V",                              (void*)nMeshGetVertices },
16277a629fac82f88126642081b4474879f6a883e313Tim Murray{"rsnMeshGetIndices",                "(JJ[I[II)V",                            (void*)nMeshGetIndices },
162880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1629d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1630d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1631d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1632d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1633d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1634d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1635d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1636d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1637d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1638d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1639d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1640d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1641d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    JNIEnv* env = NULL;
1642d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1643d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1644d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
16453762c311729fe9f3af085c14c5c1fb471d994c03Steve Block        ALOGE("ERROR: GetEnv failed\n");
1646d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1647d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1648d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    assert(env != NULL);
1649d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1650d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
16513762c311729fe9f3af085c14c5c1fb471d994c03Steve Block        ALOGE("ERROR: MediaPlayer native registration failed\n");
1652d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1653d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1654d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1655d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1656d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1657d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1658d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1659d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1660d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1661