android_renderscript_RenderScript.cpp revision 2123b46ba85adb2cfb78068f8368e830640118d3
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
26000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/Surface.h>
27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
28ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams#include <core/SkBitmap.h>
29650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkPixelRef.h>
30650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkStream.h>
31650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkTemplates.h>
32650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <images/SkImageDecoder.h>
33ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
34650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <utils/Asset.h>
35b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include <utils/AssetManager.h>
36650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <utils/ResourceTypes.h>
37f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h"
39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h"
40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h"
41ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h"
42b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h"
43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
44e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams#include <RenderScript.h>
45e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams#include <RenderScriptEnv.h>
46faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <gui/SurfaceTexture.h>
47faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <gui/SurfaceTextureClient.h>
48faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h>
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
503762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE
51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define LOG_API(...)
52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
53d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
54d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
55b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 {
56b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic:
572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
58b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fCStr = env->GetStringUTFChars(str, NULL);
59b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fLength = env->GetStringUTFLength(str);
60b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringToUTF8() {
62b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
63b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
64b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* c_str() const { return fCStr; }
65b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize length() const { return fLength; }
66b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
67b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate:
68b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    JNIEnv*     fEnv;
69b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jstring     fJStr;
70b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* fCStr;
71b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize       fLength;
72b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk};
73b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 {
752123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic:
762123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
772123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
782123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        mCStrings = NULL;
792123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        mSizeArray = NULL;
802123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        if (stringsLength > 0) {
812123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
822123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
832123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            for (jsize ct = 0; ct < stringsLength; ct ++) {
842123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
852123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL);
862123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
872123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            }
882123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
892123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
902123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringArrayToUTF8() {
912123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        for (jsize ct=0; ct < mStringsLength; ct++) {
922123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
932123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
942123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
952123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mCStrings);
962123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mSizeArray);
972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **c_str() const { return mCStrings; }
992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *c_str_len() const { return mSizeArray; }
1002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize length() const { return mStringsLength; }
1012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
1022123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate:
1032123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    JNIEnv      *mEnv;
1042123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jobjectArray mStrings;
1052123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **mCStrings;
1062123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t      *mSizeArray;
1072123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize        mStringsLength;
1082123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk};
1092123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
110d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
111d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
112ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
113ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
11443ee06857bb7f99446d1d84f8789016c5d105558Jason Samsstatic jfieldID gTypeNativeCache = 0;
115d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
116d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
117d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
118d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    gContextId             = _env->GetFieldID(_this, "mContext", "I");
119ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
120ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
121ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
122d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
123d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
124d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
125d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1263eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
1272e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextFinish(JNIEnv *_env, jobject _this, RsContext con)
12896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
12996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    LOG_API("nContextFinish, con(%p)", con);
13096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    rsContextFinish(con);
13196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
13296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
13396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
1342e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
1353eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
13607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
1373eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
1383eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
139bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAssignName(con, (void *)obj, (const char *)cptr, len);
1403eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
1413eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
1423eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
143fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
1442e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
145fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
146fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
147fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    const char *name = NULL;
148581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaGetName(con, (void *)obj, &name);
149581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    if(name == NULL || strlen(name) == 0) {
150581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk        return NULL;
151581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
152fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
153fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
154fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
1557ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
1562e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
1577ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
1587ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams    LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
1599c25aee52672f9c8908e062bde502341c189970eJason Sams    rsObjDestroy(con, (void *)obj);
1607ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
1617ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
1623eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
1633eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
164d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
165d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
166d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
167d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
168d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return (jint)rsDeviceCreate();
169d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
170d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
171d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
172d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
173d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
174d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
175d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
176d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
177d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
178ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
179ebfb436a49673693b98469683451bd9ede797557Jason SamsnDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
180ebfb436a49673693b98469683451bd9ede797557Jason Sams{
181ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
182ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
183ebfb436a49673693b98469683451bd9ede797557Jason Sams}
184ebfb436a49673693b98469683451bd9ede797557Jason Sams
185d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
1864382467a80dd12c6362d57edca7f2367f7ae877cStephen HinesnContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer)
187d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
188d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
1894382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    return (jint)rsContextCreate((RsDevice)dev, ver, sdkVer);
190704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
191704ff64b099406bb328898a7443921f22dbffd6dJason Sams
192704ff64b099406bb328898a7443921f22dbffd6dJason Samsstatic jint
1934382467a80dd12c6362d57edca7f2367f7ae877cStephen HinesnContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer,
19411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
19511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
19611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
19711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1982c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ,
1992c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int dpi)
20011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
20111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
20211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
20311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
20411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
20511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
20611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
20711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
20811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
20911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
21011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
21111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
212704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
2134382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    return (jint)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
214d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
215d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
216d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2172e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
2187d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
2197d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
2207d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    rsContextSetPriority(con, p);
2217d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
2227d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2237d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2247d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
2257d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
2262e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
227efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
2283bc47d438171dce294e816366d53bc9eca772c5bJason Sams    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
229efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
2306c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk    ANativeWindow * window = NULL;
231efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    if (wnd == NULL) {
232efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
233efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
2346c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk        window = android_Surface_getNativeWindow(_env, wnd).get();
235efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
236efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
2376c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk    rsContextSetSurface(con, width, height, window);
238efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
239efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
240efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
241faa32b33b50ad941f631716dd0915e936bdc3ac5Jason SamsnContextSetSurfaceTexture(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject sur)
242faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams{
243faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    LOG_API("nContextSetSurfaceTexture, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)sur);
244faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
245faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    sp<ANativeWindow> window;
246faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    sp<SurfaceTexture> st;
247faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    if (sur == 0) {
248faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
249faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    } else {
250faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        st = SurfaceTexture_getSurfaceTexture(_env, sur);
251faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        window = new SurfaceTextureClient(st);
252faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    }
253faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
254faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    rsContextSetSurface(con, width, height, window.get());
255faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams}
256faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
257faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsstatic void
2582e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
259d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
2602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    LOG_API("nContextDestroy, con(%p)", con);
2612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    rsContextDestroy(con);
262d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
263d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
264715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
2652e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
266715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
267715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
268715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
269715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
270d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
271d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2722e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextPause(JNIEnv *_env, jobject _this, RsContext con)
27365e7aa56f56097418d617663683544c25b3988eaJason Sams{
27465e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextPause, con(%p)", con);
27565e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextPause(con);
27665e7aa56f56097418d617663683544c25b3988eaJason Sams}
27765e7aa56f56097418d617663683544c25b3988eaJason Sams
27865e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
2792e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextResume(JNIEnv *_env, jobject _this, RsContext con)
28065e7aa56f56097418d617663683544c25b3988eaJason Sams{
28165e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextResume, con(%p)", con);
28265e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextResume(con);
28365e7aa56f56097418d617663683544c25b3988eaJason Sams}
28465e7aa56f56097418d617663683544c25b3988eaJason Sams
2851c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2861c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
2871c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
2881c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2891c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextGetErrorMessage, con(%p)", con);
2901c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
2911c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2921c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2931c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
29465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    int id = rsContextGetMessage(con,
29565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 buf, sizeof(buf),
29665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
297edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
2981c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
29971f2cf116aab893e224056c38ab146bd1538dd3eSteve Block        ALOGV("message receive buffer too small.  %i", receiveLen);
3001c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
3011c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
3021c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3031c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
304edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint
3051c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
306516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
307516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
308516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
309516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
310516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
3111c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
31265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    int id = rsContextGetMessage(con,
31365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 ptr, len * 4,
31465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
315edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
316516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
31771f2cf116aab893e224056c38ab146bd1538dd3eSteve Block        ALOGV("message receive buffer too small.  %i", receiveLen);
318516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
319516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
320edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    return id;
3211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
3221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
3231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
324edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason SamsnContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData)
3251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
3261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextPeekMessage, con(%p)", con);
3271c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
3281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
3291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
33065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    int id = rsContextPeekMessage(con, &receiveLen, sizeof(receiveLen),
331edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                  &subID, sizeof(subID));
3321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
3331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
3341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
335516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    return id;
336516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
337516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
3382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
339516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
340516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextInitToClient, con(%p)", con);
341516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextInitToClient(con);
342516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
343516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
3442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
345516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
346516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextDeinitToClient, con(%p)", con);
347516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextDeinitToClient(con);
348516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
349516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
350516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
351718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
3522e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
353d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
354718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
355718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
356d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
357d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
358718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
3592123b46ba85adb2cfb78068f8368e830640118d3Alex SakhartchouknElementCreate2(JNIEnv *_env, jobject _this, RsContext con,
3602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                jintArray _ids, jobjectArray _names, jintArray _arraySizes)
361d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
362718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
363704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nElementCreate2, con(%p)", con);
364718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
365718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    jint *ids = _env->GetIntArrayElements(_ids, NULL);
36670d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
367718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
3682123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
3692123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
3702123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **nameArray = names.c_str();
3712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *sizeArray = names.c_str_len();
3722123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
373e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsElementCreate2(con,
374e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (RsElement *)ids, fieldCount,
3757a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
376e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
3772123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
378718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
37970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
380718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)id;
381d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
382d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
383dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3842e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
385dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
386dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
387dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetNativeData, con(%p)", con);
388dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
389dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
390dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
391dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
392dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t elementData[5];
393581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
394dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
395dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
396dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
397dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
398dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
399dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
400dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
401dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
4027d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex SakhartchouknElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id,
4037d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _IDs,
4047d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jobjectArray _names,
4057d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _arraySizes)
406dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
407dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_IDs);
408dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetSubElements, con(%p)", con);
409dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
410dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
411dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
4127d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
413dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
4147d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    rsaElementGetSubElements(con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
415dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
41611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    for(jint i = 0; i < dataSize; i++) {
417dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
418dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
4197d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        _env->SetIntArrayRegion(_arraySizes, i, 1, (const jint*)&arraySizes[i]);
420dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
421dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
422dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
423dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
4247d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    free(arraySizes);
425dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
426dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
427d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
428d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
4293b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Samsstatic int
430bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason SamsnTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
431bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
432d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
433bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
434bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            con, eid, dimx, dimy, dimz, mips, faces);
4353b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
436c576537166fa3f829e4b5d8c6617a36b47e75fc3Jason Sams    jint id = (jint)rsTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
4373b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    return (jint)id;
438d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
439d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
440dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
4412e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
442dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
443dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
444dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
445dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
446dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
447dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
448dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nTypeCreate, con(%p)", con);
449dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
450dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t typeData[6];
451581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
452dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
453dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
454dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
455dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
456dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
457dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
458d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
459d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
460d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
461857d0c7017da763a420e825fffa2f260eb982c97Jason SamsnAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage, jint pointer)
462d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
463857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", con, (RsElement)type, mips, usage, (void *)pointer);
464857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    return (jint) rsAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uint32_t)pointer);
465d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
466d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
467d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
4685476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
4695476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
4705476b450e50939940dcf3f15c92335cee2fc572dJason Sams    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
4715476b450e50939940dcf3f15c92335cee2fc572dJason Sams    rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
4725476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
4735476b450e50939940dcf3f15c92335cee2fc572dJason Sams
474615e7cee03d1a53072b0369fa9f247811ac56845Jason Samsstatic jint
475615e7cee03d1a53072b0369fa9f247811ac56845Jason SamsnAllocationGetSurfaceTextureID(JNIEnv *_env, jobject _this, RsContext con, jint a)
476615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{
477615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams    LOG_API("nAllocationGetSurfaceTextureID, con(%p), a(%p)", con, (RsAllocation)a);
478615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams    return rsAllocationGetSurfaceTextureID(con, (RsAllocation)a);
479615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams}
480615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
481f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Samsstatic void
482f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason SamsnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
483f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
484f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
485f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    rsAllocationGenerateMipmaps(con, (RsAllocation)alloc);
486f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
487f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
488fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Samsstatic int
4895476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
490fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
491ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
492ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
493ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
494fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
4955476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
4965476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
497c576537166fa3f829e4b5d8c6617a36b47e75fc3Jason Sams    jint id = (jint)rsAllocationCreateFromBitmap(con,
49865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  (RsType)type, (RsAllocationMipmapControl)mip,
49965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  ptr, bitmap.getSize(), usage);
5005476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
5015476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
502ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
503fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
50467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchoukstatic int
5055476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
50667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
50767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
50867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
50967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
51067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
5115476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
5125476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
513c576537166fa3f829e4b5d8c6617a36b47e75fc3Jason Sams    jint id = (jint)rsAllocationCubeCreateFromBitmap(con,
51465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      (RsType)type, (RsAllocationMipmapControl)mip,
51565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      ptr, bitmap.getSize(), usage);
5165476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
5175476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
51867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
51967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
52026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
5214ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
52226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
52326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
52426ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
52526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
526f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
527f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
52826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
5294ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
5304ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
531f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, 0, 0,
532304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                       0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
533f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams                       w, h, ptr, bitmap.getSize());
5344ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
5358a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
5368a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
5374ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
5384ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
5398a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
5404ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
5414ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
5424ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
5438a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
5444ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
5454ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
5464ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
5474ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
548835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk    bitmap.notifyPixelsChanged();
5498a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
5508a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
5514ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
552650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
5534ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
5544ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    nativeBitmap->unlockPixels();
555650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
556650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
5574ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
558d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
55949a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
560d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
561d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
56249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
563d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
56449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
565d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
566d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
567d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
568d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
56949a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
570d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
571d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
57249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
573768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
57449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
575768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
576d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
577d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
578d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
57949a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
580d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
581d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
58249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
583768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
58449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
585768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
586d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
587d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
588d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
58949a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
590d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
591d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
59249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
593d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
59449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
595d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
596d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
597d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
598d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
59949a05d7b82956009f03acbb92a064eed054eb031Jason Sams//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
60049a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
60149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
60249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
60349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
60449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
6054cbe25a86b4aa3353c8016a129028671e902611fStephen Hines    rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
60649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
60749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
60849bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
60949bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
610fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
611fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams                    jint w, jint h, jshortArray data, int sizeBytes)
612fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
613fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
614fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocation2DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
615fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
616fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
617fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
618fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
619fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
620fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
621fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
622fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams                    jint w, jint h, jbyteArray data, int sizeBytes)
623fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
624fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
625fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocation2DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
626fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
627fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
628fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
629fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
630fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
631fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
63249a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
63349a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jintArray data, int sizeBytes)
634d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
635d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
63649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
637d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
63849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
639d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
640d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
641d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
642d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
64349a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
64449a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jfloatArray data, int sizeBytes)
645d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
646d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
64749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
648d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
64949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
650d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
651d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
652d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
65340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
654304b1f5497155bcf91e7b855cfab7a675e80bf26Alex SakhartchouknAllocationData2D_alloc(JNIEnv *_env, jobject _this, RsContext con,
655304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstAlloc, jint dstXoff, jint dstYoff,
656304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstMip, jint dstFace,
657304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint width, jint height,
658304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcAlloc, jint srcXoff, jint srcYoff,
659304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcMip, jint srcFace)
660304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{
6614c2e4c80ce519e09e5b00fd7533e64a834d70639Jason Sams    LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
662304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " dstMip(%i), dstFace(%i), width(%i), height(%i),"
663304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
664304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
665304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
666304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
667304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    rsAllocationCopy2DRange(con,
668304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)dstAlloc,
669304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstXoff, dstYoff,
670304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
671304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
672304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)srcAlloc,
673304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcXoff, srcYoff,
674304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
675304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk}
676304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
677304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void
6782e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
67940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
68040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
68140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
68240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
683e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
684e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
685ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseIntArrayElements(data, ptr, 0);
68640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
68740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
68840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
689fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
690fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
691fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
692fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
693fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
694e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
695e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
696fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseShortArrayElements(data, ptr, 0);
697fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
698fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
699fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
700fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
701fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
702fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
703fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
704fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
705e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
706e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
707fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseByteArrayElements(data, ptr, 0);
708fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
709fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
710fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
7112e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
71240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
71340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
714a8f2acee39aae94f9d7148f775ca8e35344da4b4Joe Onorato    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
71540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
716e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
717e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
718ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseFloatArrayElements(data, ptr, 0);
71940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
720d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
721dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic jint
7222e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
723dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
724dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
725581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    return (jint) rsaAllocationGetType(con, (RsAllocation)a);
726dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
727dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
7285edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
7295edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
7305edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
7315edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
7325edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
7335edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
7345edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
7355edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
7365edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
7375edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
7385edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
7395edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
7405edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
7415edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
742aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
743aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
744aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
7452e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
746aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
74771f2cf116aab893e224056c38ab146bd1538dd3eSteve Block    ALOGV("______nFileA3D %u", (uint32_t) native_asset);
748aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
749aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
750aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
751b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromMemory(con, asset->getBuffer(false), asset->getLength());
752b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
753b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
754b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
755b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
756b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path)
757b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
758b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
759b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
760b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
761b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
762b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
763b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
764b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
765b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
766b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
767b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
768b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
769b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromAsset(con, asset);
770b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
771b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
772b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
773b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
774b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFileA3DCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName)
775b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
776b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
777b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromFile(con, fileNameUTF.c_str());
778b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
779aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
780aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
781aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
782aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
7832e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
784aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
785aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
786581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
787aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return numEntries;
788aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
789aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
790aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
7912e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
792aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
79371f2cf116aab893e224056c38ab146bd1538dd3eSteve Block    ALOGV("______nFileA3D %u", (uint32_t) fileA3D);
794aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
795aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
796581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
797aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
798aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
799aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
800aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
801aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
802aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
803aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
804aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
805aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
806aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
8072e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
808aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
80971f2cf116aab893e224056c38ab146bd1538dd3eSteve Block    ALOGV("______nFileA3D %u", (uint32_t) fileA3D);
810581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
811aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
812aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
813d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
814d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
815d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
8169b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic int
817b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con,
818b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
8199b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
820b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
821e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromFile(con,
822e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
823e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
824b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
825b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
826b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
827b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
828b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
829b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con,
830b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                           jstring name, jfloat fontSize, jint dpi, jint native_asset)
831b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
832b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
833b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
834b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
835e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromMemory(con,
836e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
837e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
838b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
839b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
840b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
841b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
842b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
843b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path,
844b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
845b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
846b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
847b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
848b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
849b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
850b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
851b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
852b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
853b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
854b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
855b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
8569b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
857e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromMemory(con,
858e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
859e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
860b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
861b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
8629b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
8639b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
8649b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
865bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
866bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
867bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
8682e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
869d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
870d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
871bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
872d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
873d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
874d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8752e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
8764d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
877cfc04366998cd0c626594c9cf70336a11bdf5996Jason Sams    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
8784d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarI(con, (RsScript)script, slot, val);
8794d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8804d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
8814d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
8826f4cf0b8885403ead157ae00fd43cf1282331c23Jason SamsnScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
8836f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
8846f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
8856f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
8866f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
8876f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
8886f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
889031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen HinesnScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
890031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
891031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
892031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    rsScriptSetVarJ(con, (RsScript)script, slot, val);
893031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
894031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
895031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
8962e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
8974d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
898ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
8994d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarF(con, (RsScript)script, slot, val);
9004d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
9014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
9024d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
903ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen HinesnScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
904ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
905ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
906ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    rsScriptSetVarD(con, (RsScript)script, slot, val);
907ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
908ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
909ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
9102e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
9114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
9124d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
9134d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
9144d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
9154d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
9164d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
9174d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
9184d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
919d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
920d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9212e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
922584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
92307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
924584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
925584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
926584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
927584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
928584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
929bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
930584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
931584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
932584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
933584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
934584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
935584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
93622534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
9372e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
93822534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
9394d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
9404d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvoke(con, (RsScript)obj, slot);
94122534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
94222534176fb5c1257130ef4ee589739ca42766a32Jason Sams
943584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
9442e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
945be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
9464d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
9474d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
9484d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
9494d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
9504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
951be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
952be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
9536e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
9546e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason SamsnScriptForEach(JNIEnv *_env, jobject _this, RsContext con,
9556e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams               jint script, jint slot, jint ain, jint aout)
9566e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
9576e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
9586e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0);
9596e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
9606e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
9616e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason SamsnScriptForEachV(JNIEnv *_env, jobject _this, RsContext con,
9626e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams                jint script, jint slot, jint ain, jint aout, jbyteArray params)
9636e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
9646e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
9656e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jint len = _env->GetArrayLength(params);
9666e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
9676e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len);
9686e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
9696e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
9706e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams
971d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
972fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
973fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
974e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Samsstatic jint
975e4a06c5fc738bf219f2a495e12a637b2d0871651Jason SamsnScriptCCreate(JNIEnv *_env, jobject _this, RsContext con,
976e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
977e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
978d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
979e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    LOG_API("nScriptCCreate, con(%p)", con);
980e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
981e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
982e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
983e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    jint ret = 0;
9848451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    jbyte* script_ptr = NULL;
98543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
98643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
98743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
98843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
9898451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
99043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
99143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
99243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
99343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
9948451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
99543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
99643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
997e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
99843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
99943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
10008451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
10018451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
100243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
100343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1004e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
100543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
100643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
1007e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    //rsScriptCSetText(con, (const char *)script_ptr, length);
1008e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
1009e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    ret = (jint)rsScriptCCreate(con,
1010e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
1011e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
1012e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
101339ddc950c9064129ead5de04b200106c0659f937Jason Sams
101443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
1015e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
1016e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
101743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
101843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1019d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1020e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    return ret;
1021d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1022d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1023d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1024d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1025d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
1026331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason SamsnProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con,
1027331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
1028331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
1029331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
1030331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
1031d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
103254db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreCreate, con(%p)", con);
1033331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    return (jint)rsProgramStoreCreate(con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
1034331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1035331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
1036d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1037d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
10380011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
10390011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
10400011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
10412e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
10420011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
10430011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
10440011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
10450011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
104654c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
1047d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10482e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
104954c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
105068afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
105168afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
105254c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
105354c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
105454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
10552e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
1056d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
105768afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
105868afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1059d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1060d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
106168afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
1062d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
106368afd01ec9fd37774d8291192952a25e5605b6fbJason Samsstatic jint
10642123b46ba85adb2cfb78068f8368e830640118d3Alex SakhartchouknProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader,
10652123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                       jobjectArray texNames, jintArray params)
10667e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
1067b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
10687e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
10697e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
10707e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
10712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
10722123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
10732123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
10742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
10752123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
1076991040c8261237997915f8a4c899a6ea5012fb42Jason Sams    LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, paramLen);
10777e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
10782123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF.c_str(), shaderUTF.length(),
10792123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                             nameArray, texCount, sizeArray,
10802123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                             (uint32_t *)paramPtr, paramLen);
10812123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
10827e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
10837e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
10847e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
10857e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
10867e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
10871fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
10881fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
10890011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic jint
10902123b46ba85adb2cfb78068f8368e830640118d3Alex SakhartchouknProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader,
10912123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                     jobjectArray texNames, jintArray params)
10921fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
1093b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
10940011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
10950011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
10961fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1097991040c8261237997915f8a4c899a6ea5012fb42Jason Sams    LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", con, paramLen);
1098ee41112e1539de95596600fd2c6dada5d275217fJason Sams
10992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
11002123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
11012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
11022123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
11032123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
11042123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jint ret = (jint)rsProgramVertexCreate(con, shaderUTF.c_str(), shaderUTF.length(),
11052123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                           nameArray, texCount, sizeArray,
11062123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                           (uint32_t *)paramPtr, paramLen);
11072123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
11080011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
11090011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
11101fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
11111fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1112ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1113ebfb436a49673693b98469683451bd9ede797557Jason Sams
1114ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic jint
111594aaed38467c71a6c804f0e18b41346a4013c25bJason SamsnProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSprite, jint cull)
1116ebfb436a49673693b98469683451bd9ede797557Jason Sams{
111794aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", con, pointSprite, cull);
111894aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    return (jint)rsProgramRasterCreate(con, pointSprite, (RsCullMode)cull);
1119ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1120ebfb436a49673693b98469683451bd9ede797557Jason Sams
1121d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1122d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1123d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1124d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
11252e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
1126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1127d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
1128bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindRootScript(con, (RsScript)script);
1129d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1130d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1131d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
11322e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
1133d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
113454db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
113554db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsContextBindProgramStore(con, (RsProgramStore)pfs);
1136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1137d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1138d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
11392e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1140d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1141d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
1142bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramFragment(con, (RsProgramFragment)pf);
1143d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1144d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
11450826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
11462e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
11470826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
11480826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
1149bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramVertex(con, (RsProgramVertex)pf);
11500826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
11510826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1152d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
11532e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1154ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1155ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1156ebfb436a49673693b98469683451bd9ede797557Jason Sams    rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1157ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1158ebfb436a49673693b98469683451bd9ede797557Jason Sams
1159d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
116002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
116102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
116202fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic jint
1163a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex SakhartchouknSamplerCreate(JNIEnv *_env, jobject _this, RsContext con, jint magFilter, jint minFilter,
1164a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
116502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
1166bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    LOG_API("nSamplerCreate, con(%p)", con);
1167a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    return (jint)rsSamplerCreate(con,
1168a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)magFilter,
1169a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)minFilter,
1170a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapS,
1171a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapT,
1172a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapR,
1173a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 aniso);
117402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
117502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1176bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1177bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
1178f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams//native int  rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
1179f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Samsstatic jint
1180f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason SamsnPathCreate(JNIEnv *_env, jobject _this, RsContext con, jint prim, jboolean isStatic, jint _vtx, jint _loop, jfloat q) {
1181f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    LOG_API("nPathCreate, con(%p)", con);
1182f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
1183f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    int id = (int)rsPathCreate(con, (RsPathPrimitive)prim, isStatic,
1184f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams                               (RsAllocation)_vtx,
1185f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams                               (RsAllocation)_loop, q);
1186f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    return id;
1187f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams}
1188f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams
11891bada8cd6e4f340de93cff4a2439835fc3b1456cJason Samsstatic jint
119025999a08a6652ff5d7d0973f279f1e92e04b3506Alex SakhartchouknMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jintArray _vtx, jintArray _idx, jintArray _prim)
1191164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
119225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    LOG_API("nMeshCreate, con(%p)", con);
1193164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
119425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint vtxLen = _env->GetArrayLength(_vtx);
119525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *vtxPtr = _env->GetIntArrayElements(_vtx, NULL);
119625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint idxLen = _env->GetArrayLength(_idx);
119725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *idxPtr = _env->GetIntArrayElements(_idx, NULL);
119825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint primLen = _env->GetArrayLength(_prim);
119925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1200164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
120125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    int id = (int)rsMeshCreate(con,
120225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)vtxPtr, vtxLen,
120325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)idxPtr, idxLen,
120425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (uint32_t *)primPtr, primLen);
120580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
120625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_vtx, vtxPtr, 0);
120725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_idx, idxPtr, 0);
120825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_prim, primPtr, 0);
120925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    return id;
12109d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
12119d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
121280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
12132e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
121480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
121580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
121680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1217581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
121880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
121980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
122080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
122180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
12222e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
122380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
122480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
122580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1226581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
122780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
122880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
122980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
123080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
12312e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
123280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
123380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
123480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
123580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1236581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
123780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
123880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
123980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
124080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
124180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
124280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
124380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
124480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
124580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
12462e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
124780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
124880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
124980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
125080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
125180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
125280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1253581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
125480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
125580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
125680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
125780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
125880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
125980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
126080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
126180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1262164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1263164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1264164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1265164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1266d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
126794d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1268d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1269d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
12701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
12711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
12721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceCreate",                  "()I",                                     (void*)nDeviceCreate },
12731c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceDestroy",                 "(I)V",                                    (void*)nDeviceDestroy },
12741c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceSetConfig",               "(III)V",                                  (void*)nDeviceSetConfig },
1275edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams{"nContextGetUserMessage",         "(I[I)I",                                  (void*)nContextGetUserMessage },
12761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetErrorMessage",        "(I)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1277edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams{"nContextPeekMessage",            "(I[I)I",                                  (void*)nContextPeekMessage },
12781c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
12791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextInitToClient",           "(I)V",                                    (void*)nContextInitToClient },
12801c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextDeinitToClient",         "(I)V",                                    (void*)nContextDeinitToClient },
12812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
12844382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines{"rsnContextCreate",                 "(III)I",                                (void*)nContextCreate },
12854382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines{"rsnContextCreateGL",               "(IIIIIIIIIIIIIFI)I",                    (void*)nContextCreateGL },
12862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextFinish",                 "(I)V",                                  (void*)nContextFinish },
12872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetPriority",            "(II)V",                                 (void*)nContextSetPriority },
12882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetSurface",             "(IIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1289faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams{"rsnContextSetSurfaceTexture",      "(IIILandroid/graphics/SurfaceTexture;)V", (void*)nContextSetSurfaceTexture },
1290b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextDestroy",                "(I)V",                                  (void*)nContextDestroy },
12912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
12922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextPause",                  "(I)V",                                  (void*)nContextPause },
12932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextResume",                 "(I)V",                                  (void*)nContextResume },
12942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAssignName",                    "(II[B)V",                               (void*)nAssignName },
1295b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnGetName",                       "(II)Ljava/lang/String;",                (void*)nGetName },
12962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnObjDestroy",                    "(II)V",                                 (void*)nObjDestroy },
12972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1298b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFileA3DCreateFromFile",         "(ILjava/lang/String;)I",                (void*)nFileA3DCreateFromFile },
12992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DCreateFromAssetStream",  "(II)I",                                 (void*)nFileA3DCreateFromAssetStream },
1300b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFileA3DCreateFromAsset",        "(ILandroid/content/res/AssetManager;Ljava/lang/String;)I",            (void*)nFileA3DCreateFromAsset },
13012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetNumIndexEntries",     "(II)I",                                 (void*)nFileA3DGetNumIndexEntries },
1302b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnFileA3DGetIndexEntries",        "(III[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
13032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetEntryByIndex",        "(III)I",                                (void*)nFileA3DGetEntryByIndex },
13042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1305e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk{"rsnFontCreateFromFile",            "(ILjava/lang/String;FI)I",              (void*)nFontCreateFromFile },
1306b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFontCreateFromAssetStream",     "(ILjava/lang/String;FII)I",             (void*)nFontCreateFromAssetStream },
1307b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFontCreateFromAsset",        "(ILandroid/content/res/AssetManager;Ljava/lang/String;FI)I",            (void*)nFontCreateFromAsset },
13082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementCreate",                 "(IIIZI)I",                              (void*)nElementCreate },
131070d4e5024298f71edb3b04867e05568f5495b4ceJason Sams{"rsnElementCreate2",                "(I[I[Ljava/lang/String;[I)I",           (void*)nElementCreate2 },
13112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementGetNativeData",          "(II[I)V",                               (void*)nElementGetNativeData },
13127d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk{"rsnElementGetSubElements",         "(II[I[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
13132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1314bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams{"rsnTypeCreate",                    "(IIIIIZZ)I",                            (void*)nTypeCreate },
1315b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnTypeGetNativeData",             "(II[I)V",                               (void*)nTypeGetNativeData },
13162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1317857d0c7017da763a420e825fffa2f260eb982c97Jason Sams{"rsnAllocationCreateTyped",         "(IIIII)I",                               (void*)nAllocationCreateTyped },
13185476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCreateFromBitmap",    "(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCreateFromBitmap },
13195476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCubeCreateFromBitmap },
13205476b450e50939940dcf3f15c92335cee2fc572dJason Sams
13214ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyFromBitmap",      "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
13224ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyToBitmap",        "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
13234ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
13245476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationSyncAll",             "(III)V",                                (void*)nAllocationSyncAll },
1325615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{"rsnAllocationGetSurfaceTextureID", "(II)I",                                 (void*)nAllocationGetSurfaceTextureID },
132649a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[II)V",                           (void*)nAllocationData1D_i },
132749a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[SI)V",                           (void*)nAllocationData1D_s },
132849a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[BI)V",                           (void*)nAllocationData1D_b },
132949a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[FI)V",                           (void*)nAllocationData1D_f },
133049a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationElementData1D",       "(IIIII[BI)V",                           (void*)nAllocationElementData1D },
133149a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[II)V",                        (void*)nAllocationData2D_i },
1332fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[SI)V",                        (void*)nAllocationData2D_s },
1333fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[BI)V",                        (void*)nAllocationData2D_b },
133449a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[FI)V",                        (void*)nAllocationData2D_f },
1335304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{"rsnAllocationData2D",              "(IIIIIIIIIIIII)V",                      (void*)nAllocationData2D_alloc },
13362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[I)V",                               (void*)nAllocationRead_i },
1337fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationRead",                "(II[S)V",                               (void*)nAllocationRead_s },
1338fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationRead",                "(II[B)V",                               (void*)nAllocationRead_b },
13392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[F)V",                               (void*)nAllocationRead_f },
13402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationGetType",             "(II)I",                                 (void*)nAllocationGetType},
13415edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize1D",            "(III)V",                                (void*)nAllocationResize1D },
13425edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize2D",            "(IIII)V",                               (void*)nAllocationResize2D },
1343f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{"rsnAllocationGenerateMipmaps",     "(II)V",                                 (void*)nAllocationGenerateMipmaps },
13442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptBindAllocation",          "(IIII)V",                               (void*)nScriptBindAllocation },
13462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetTimeZone",             "(II[B)V",                               (void*)nScriptSetTimeZone },
13472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvoke",                  "(III)V",                                (void*)nScriptInvoke },
13482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvokeV",                 "(III[B)V",                              (void*)nScriptInvokeV },
13496e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{"rsnScriptForEach",                 "(IIIII)V",                              (void*)nScriptForEach },
13506e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{"rsnScriptForEach",                 "(IIIII[B)V",                            (void*)nScriptForEachV },
13512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarI",                 "(IIII)V",                               (void*)nScriptSetVarI },
1352031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{"rsnScriptSetVarJ",                 "(IIIJ)V",                               (void*)nScriptSetVarJ },
13532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarF",                 "(IIIF)V",                               (void*)nScriptSetVarF },
1354ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{"rsnScriptSetVarD",                 "(IIID)V",                               (void*)nScriptSetVarD },
13552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarV",                 "(III[B)V",                              (void*)nScriptSetVarV },
13566f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{"rsnScriptSetVarObj",               "(IIII)V",                               (void*)nScriptSetVarObj },
13572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1358e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams{"rsnScriptCCreate",                 "(ILjava/lang/String;Ljava/lang/String;[BI)I",  (void*)nScriptCCreate },
13592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1360331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams{"rsnProgramStoreCreate",            "(IZZZZZZIII)I",                         (void*)nProgramStoreCreate },
13612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindConstants",          "(IIII)V",                               (void*)nProgramBindConstants },
13632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindTexture",            "(IIII)V",                               (void*)nProgramBindTexture },
13642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindSampler",            "(IIII)V",                               (void*)nProgramBindSampler },
13652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13662123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk{"rsnProgramFragmentCreate",         "(ILjava/lang/String;[Ljava/lang/String;[I)I",              (void*)nProgramFragmentCreate },
136794aaed38467c71a6c804f0e18b41346a4013c25bJason Sams{"rsnProgramRasterCreate",           "(IZI)I",                                (void*)nProgramRasterCreate },
13682123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk{"rsnProgramVertexCreate",           "(ILjava/lang/String;[Ljava/lang/String;[I)I",              (void*)nProgramVertexCreate },
13692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindRootScript",         "(II)V",                                 (void*)nContextBindRootScript },
1371b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextBindProgramStore",       "(II)V",                                 (void*)nContextBindProgramStore },
13722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramFragment",    "(II)V",                                 (void*)nContextBindProgramFragment },
13732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramVertex",      "(II)V",                                 (void*)nContextBindProgramVertex },
13742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramRaster",      "(II)V",                                 (void*)nContextBindProgramRaster },
13752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1376a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk{"rsnSamplerCreate",                 "(IIIIIIF)I",                            (void*)nSamplerCreate },
13772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1378f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams{"rsnPathCreate",                    "(IIZIIF)I",                             (void*)nPathCreate },
137925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk{"rsnMeshCreate",                    "(I[I[I[I)I",                            (void*)nMeshCreate },
13802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetVertexBufferCount",      "(II)I",                                 (void*)nMeshGetVertexBufferCount },
13822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndexCount",             "(II)I",                                 (void*)nMeshGetIndexCount },
1383b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnMeshGetVertices",               "(II[II)V",                              (void*)nMeshGetVertices },
13842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndices",                "(II[I[II)V",                            (void*)nMeshGetIndices },
138580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1386d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1387d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1388d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1389d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1390d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1391d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1392d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1393d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1394d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1395d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1396d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1397d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1398d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    JNIEnv* env = NULL;
1399d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1400d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1401d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
14023762c311729fe9f3af085c14c5c1fb471d994c03Steve Block        ALOGE("ERROR: GetEnv failed\n");
1403d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1404d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1405d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    assert(env != NULL);
1406d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1407d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
14083762c311729fe9f3af085c14c5c1fb471d994c03Steve Block        ALOGE("ERROR: MediaPlayer native registration failed\n");
1409d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1410d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1411d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1412d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1413d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1414d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1415d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1416d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1417d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1418