android_renderscript_RenderScript.cpp revision 6e494d3ab606be8c06f8d4930fbec572bbfa15c2
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/*
2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2006 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>
46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams//#define LOG_API LOGE
48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define LOG_API(...)
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
50d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
52b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 {
53b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic:
54b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str)
55b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    {
56b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fCStr = env->GetStringUTFChars(str, NULL);
57b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fLength = env->GetStringUTFLength(str);
58b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
59b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    ~AutoJavaStringToUTF8()
60b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    {
61b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
62b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
63b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* c_str() const { return fCStr; }
64b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize length() const { return fLength; }
65b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
66b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate:
67b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    JNIEnv*     fEnv;
68b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jstring     fJStr;
69b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* fCStr;
70b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize       fLength;
71b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk};
72b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
75ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
76ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
7743ee06857bb7f99446d1d84f8789016c5d105558Jason Samsstatic jfieldID gTypeNativeCache = 0;
78d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
79d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
80d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
81d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    gContextId             = _env->GetFieldID(_this, "mContext", "I");
82ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
83ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
84ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
85d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
86d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
87d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
88d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
893eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
902e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextFinish(JNIEnv *_env, jobject _this, RsContext con)
9196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
9296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    LOG_API("nContextFinish, con(%p)", con);
9396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    rsContextFinish(con);
9496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
9596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
9696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
972e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
983eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
9907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
1003eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
1013eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
102bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAssignName(con, (void *)obj, (const char *)cptr, len);
1033eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
1043eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
1053eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
106fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
1072e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
108fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
109fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
110fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    const char *name = NULL;
111581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaGetName(con, (void *)obj, &name);
112581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    if(name == NULL || strlen(name) == 0) {
113581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk        return NULL;
114581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
115fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
116fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
117fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
1187ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
1192e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
1207ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
1217ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams    LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
1229c25aee52672f9c8908e062bde502341c189970eJason Sams    rsObjDestroy(con, (void *)obj);
1237ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
1247ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
1253eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
1263eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
127d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
128d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
129d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
130d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
131d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return (jint)rsDeviceCreate();
132d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
133d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
134d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
135d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
137d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
138d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
139d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
140d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
141ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
142ebfb436a49673693b98469683451bd9ede797557Jason SamsnDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
143ebfb436a49673693b98469683451bd9ede797557Jason Sams{
144ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
145ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
146ebfb436a49673693b98469683451bd9ede797557Jason Sams}
147ebfb436a49673693b98469683451bd9ede797557Jason Sams
148d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
149704ff64b099406bb328898a7443921f22dbffd6dJason SamsnContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
150d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
151d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
152704ff64b099406bb328898a7443921f22dbffd6dJason Sams    return (jint)rsContextCreate((RsDevice)dev, ver);
153704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
154704ff64b099406bb328898a7443921f22dbffd6dJason Sams
155704ff64b099406bb328898a7443921f22dbffd6dJason Samsstatic jint
15611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason SamsnContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
15711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
15811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
15911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
16011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1612c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ,
1622c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int dpi)
16311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
16411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
16511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
16611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
16711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
16811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
16911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
17011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
17111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
17211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
17311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
17411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
175704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
1762c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk    return (jint)rsContextCreateGL((RsDevice)dev, ver, sc, dpi);
177d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
178d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
179d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1802e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
1817d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
1827d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
1837d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    rsContextSetPriority(con, p);
1847d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
1857d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1867d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1877d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1887d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
1892e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
190efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
1913bc47d438171dce294e816366d53bc9eca772c5bJason Sams    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
192efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
193efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    Surface * window = NULL;
194efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    if (wnd == NULL) {
195efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
196efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
197ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller        window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
198efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
199efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
200e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsContextSetSurface(con, width, height, window, 1);
201efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
202efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
203efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
2042e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
205d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
2062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    LOG_API("nContextDestroy, con(%p)", con);
2072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    rsContextDestroy(con);
208d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
209d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
210715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
2112e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
212715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
213715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
214715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
215715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
216d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
217d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2182e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextPause(JNIEnv *_env, jobject _this, RsContext con)
21965e7aa56f56097418d617663683544c25b3988eaJason Sams{
22065e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextPause, con(%p)", con);
22165e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextPause(con);
22265e7aa56f56097418d617663683544c25b3988eaJason Sams}
22365e7aa56f56097418d617663683544c25b3988eaJason Sams
22465e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
2252e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextResume(JNIEnv *_env, jobject _this, RsContext con)
22665e7aa56f56097418d617663683544c25b3988eaJason Sams{
22765e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextResume, con(%p)", con);
22865e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextResume(con);
22965e7aa56f56097418d617663683544c25b3988eaJason Sams}
23065e7aa56f56097418d617663683544c25b3988eaJason Sams
2311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
2331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
2341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2351c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextGetErrorMessage, con(%p)", con);
2361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
2371c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
24065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    int id = rsContextGetMessage(con,
24165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 buf, sizeof(buf),
24265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
24365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &subID, sizeof(subID),
24465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 true);
2451c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
2461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
2471c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
2481c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
2491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2501c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic void
2521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
253516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
254516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
255516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
256516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
257516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
2581c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
25965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    int id = rsContextGetMessage(con,
26065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 ptr, len * 4,
26165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
26265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &subID, sizeof(subID),
26365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 true);
264516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
2651d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
266516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
267516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
2681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
2711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData, jboolean wait)
2721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2731c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextPeekMessage, con(%p)", con);
2741c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
2751c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
27765bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    int id = rsContextPeekMessage(con, &receiveLen, sizeof(receiveLen),
27865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                  &subID, sizeof(subID), wait);
2791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
2801c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
2811c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
282516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    return id;
283516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
284516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
2852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
286516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
287516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextInitToClient, con(%p)", con);
288516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextInitToClient(con);
289516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
290516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
2912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
292516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
293516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextDeinitToClient, con(%p)", con);
294516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextDeinitToClient(con);
295516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
296516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
297516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
298718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
2992e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
300d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
301718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
302718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
303d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
304d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
305718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
30670d4e5024298f71edb3b04867e05568f5495b4ceJason SamsnElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
307d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
308718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
309704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nElementCreate2, con(%p)", con);
310718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
311718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    jint *ids = _env->GetIntArrayElements(_ids, NULL);
31270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
313718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
314718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
315718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
316718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
317718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
318718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        nameArray[ct] = _env->GetStringUTFChars(s, NULL);
319718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        sizeArray[ct] = _env->GetStringUTFLength(s);
32043ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
321e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsElementCreate2(con,
322e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (RsElement *)ids, fieldCount,
323e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     nameArray, fieldCount,
324e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     sizeArray, fieldCount,
325e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
326718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
327718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
328718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        _env->ReleaseStringUTFChars(s, nameArray[ct]);
32943ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
330718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
33170d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
332718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(nameArray);
333718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(sizeArray);
334718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)id;
335d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
336d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
337dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3382e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
339dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
340dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
341dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetNativeData, con(%p)", con);
342dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
343dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
344dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
345dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
346dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t elementData[5];
347581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
348dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
349dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
350dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
351dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
352dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
353dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
354dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
355dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3562e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
357dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
358dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_IDs);
359dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetSubElements, con(%p)", con);
360dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
361dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
362dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
363dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
364581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
365dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
36611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    for(jint i = 0; i < dataSize; i++) {
367dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
368dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
369dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
370dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
371dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
372dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
373dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
374dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
375d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
376d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
3773b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Samsstatic int
378bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason SamsnTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
379bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
380d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
381bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
382bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            con, eid, dimx, dimy, dimz, mips, faces);
3833b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
384bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    jint id = (jint)rsaTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
3853b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    return (jint)id;
386d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
387d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
388dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3892e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
390dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
391dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
392dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
393dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
394dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
395dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
396dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nTypeCreate, con(%p)", con);
397dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
398dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t typeData[6];
399581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
400dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
401dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
402dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
403dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
404dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
405dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
406d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
407d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
408d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
4095476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage)
410d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
411d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i)", con, (RsElement)type, mips, usage);
412d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    return (jint) rsaAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage);
413d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
414d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
415d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
4165476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
4175476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
4185476b450e50939940dcf3f15c92335cee2fc572dJason Sams    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
4195476b450e50939940dcf3f15c92335cee2fc572dJason Sams    rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
4205476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
4215476b450e50939940dcf3f15c92335cee2fc572dJason Sams
422f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Samsstatic void
423f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason SamsnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
424f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
425f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
426f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    rsAllocationGenerateMipmaps(con, (RsAllocation)alloc);
427f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
428f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
429fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Samsstatic int
4305476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
431fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
432ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
433ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
434ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
435fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
4365476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
4375476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
43865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    jint id = (jint)rsaAllocationCreateFromBitmap(con,
43965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  (RsType)type, (RsAllocationMipmapControl)mip,
44065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  ptr, bitmap.getSize(), usage);
4415476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
4425476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
443ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
444fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
44567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchoukstatic int
4465476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
44767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
44867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
44967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
45067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
45167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
4525476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
4535476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
45465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    jint id = (jint)rsaAllocationCubeCreateFromBitmap(con,
45565bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      (RsType)type, (RsAllocationMipmapControl)mip,
45665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      ptr, bitmap.getSize(), usage);
4575476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
4585476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
45967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
46067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
46126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
4624ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
46326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
46426ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
46526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
46626ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
467f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
468f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
46926ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
4704ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
4714ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
472f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, 0, 0,
473f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams                       0, RS_ALLOCATION_CUBMAP_FACE_POSITVE_X,
474f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams                       w, h, ptr, bitmap.getSize());
4754ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
4768a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
4778a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4784ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
4794ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
4808a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
4814ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
4824ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
4834ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
4848a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4854ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
4864ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
4874ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
4884ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
4898a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
4908a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4914ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
492650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
4934ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
4944ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    nativeBitmap->unlockPixels();
495650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
496650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
4974ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
498d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
49949a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
500d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
501d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
50249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
503d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
50449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
505d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
506d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
507d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
508d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
50949a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
510d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
511d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
51249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
513768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
51449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
515768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
516d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
517d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
518d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
51949a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
520d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
521d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
52249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
523768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
52449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
525768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
526d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
527d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
528d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
52949a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
530d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
531d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
53249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
533d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
53449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
535d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
536d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
537d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
538d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
53949a05d7b82956009f03acbb92a064eed054eb031Jason Sams//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
54049a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
54149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
54249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
54349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
54449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
54549a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, compIdx, sizeBytes);
54649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
54749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
54849bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
54949bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
550fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
551fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams                    jint w, jint h, jshortArray data, int sizeBytes)
552fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
553fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
554fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason 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);
555fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
556fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
557fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
558fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
559fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
560fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
561fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
562fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams                    jint w, jint h, jbyteArray data, int sizeBytes)
563fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
564fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
565fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason 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);
566fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
567fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
568fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
569fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
570fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
571fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
57249a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
57349a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jintArray data, int sizeBytes)
574d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
575d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
57649a05d7b82956009f03acbb92a064eed054eb031Jason 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);
577d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
57849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
579d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
580d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
581d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
582d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
58349a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
58449a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jfloatArray data, int sizeBytes)
585d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
586d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
58749a05d7b82956009f03acbb92a064eed054eb031Jason 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);
588d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
58949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
590d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
591d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
592d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
59340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
5942e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
59540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
59640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
59740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
59840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
599e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
600e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
601ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseIntArrayElements(data, ptr, 0);
60240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
60340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
60440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
605fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
606fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
607fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
608fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
609fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
610e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
611e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
612fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseShortArrayElements(data, ptr, 0);
613fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
614fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
615fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
616fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
617fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
618fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
619fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
620fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
621e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
622e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
623fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseByteArrayElements(data, ptr, 0);
624fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
625fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
626fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
6272e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
62840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
62940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
630a8f2acee39aae94f9d7148f775ca8e35344da4b4Joe Onorato    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
63140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
632e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
633e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
634ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseFloatArrayElements(data, ptr, 0);
63540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
636d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
637dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic jint
6382e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
639dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
640dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
641581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    return (jint) rsaAllocationGetType(con, (RsAllocation)a);
642dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
643dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
6445edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
6455edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
6465edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
6475edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
6485edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
6495edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
6505edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
6515edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
6525edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
6535edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
6545edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
6555edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
6565edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
6575edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
658aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
659aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
660aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
6612e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
662aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
663aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) native_asset);
664aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
665aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
666aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
667b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromMemory(con, asset->getBuffer(false), asset->getLength());
668b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
669b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
670b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
671b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
672b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path)
673b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
674b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
675b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
676b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
677b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
678b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
679b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
680b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
681b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
682b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
683b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
684b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
685b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromAsset(con, asset);
686b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
687b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
688b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
689b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
690b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFileA3DCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName)
691b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
692b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
693b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromFile(con, fileNameUTF.c_str());
694b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
695aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
696aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
697aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
698aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
6992e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
700aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
701aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
702581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
703aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return numEntries;
704aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
705aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
706aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
7072e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
708aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
709aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
710aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
711aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
712581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
713aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
714aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
715aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
716aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
717aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
718aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
719aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
720aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
721aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
722aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
7232e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
724aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
725aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
726581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
727aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
728aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
729d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
730d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
731d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
7329b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic int
733b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con,
734b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
7359b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
736b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
737e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromFile(con,
738e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
739e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
740b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
741b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
742b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
743b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
744b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
745b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con,
746b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                           jstring name, jfloat fontSize, jint dpi, jint native_asset)
747b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
748b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
749b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
750b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
751e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromMemory(con,
752e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
753e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
754b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
755b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
756b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
757b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
758b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
759b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path,
760b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
761b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
762b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
763b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
764b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
765b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
766b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
767b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
768b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
769b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
770b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
771b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
7729b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
773e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromMemory(con,
774e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
775e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
776b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
777b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
7789b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
7799b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
7809b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
781bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
782bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
783bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
7842e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
785d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
786d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
787bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
788d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
789d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
790d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7912e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
7924d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
793cfc04366998cd0c626594c9cf70336a11bdf5996Jason Sams    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
7944d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarI(con, (RsScript)script, slot, val);
7954d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
7964d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
7974d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
7986f4cf0b8885403ead157ae00fd43cf1282331c23Jason SamsnScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
7996f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
8006f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
8016f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
8026f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
8036f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
8046f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
805031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen HinesnScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
806031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
807031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
808031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    rsScriptSetVarJ(con, (RsScript)script, slot, val);
809031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
810031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
811031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
8122e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
8134d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
814ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
8154d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarF(con, (RsScript)script, slot, val);
8164d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8174d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
8184d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
819ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen HinesnScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
820ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
821ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
822ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    rsScriptSetVarD(con, (RsScript)script, slot, val);
823ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
824ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
825ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
8262e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
8274d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
8284d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
8294d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
8304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
8314d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
8324d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
8334d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8344d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
835d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
836d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8372e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
838584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
83907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
840584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
841584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
842584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
843584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
844584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
845bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
846584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
847584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
848584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
849584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
850584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
851584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
85222534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
8532e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
85422534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
8554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
8564d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvoke(con, (RsScript)obj, slot);
85722534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
85822534176fb5c1257130ef4ee589739ca42766a32Jason Sams
859584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
8602e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
861be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
8624d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
8634d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
8644d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
8654d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
8664d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
867be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
868be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
8696e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
8706e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason SamsnScriptForEach(JNIEnv *_env, jobject _this, RsContext con,
8716e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams               jint script, jint slot, jint ain, jint aout)
8726e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
8736e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
8746e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0);
8756e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
8766e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
8776e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason SamsnScriptForEachV(JNIEnv *_env, jobject _this, RsContext con,
8786e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams                jint script, jint slot, jint ain, jint aout, jbyteArray params)
8796e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
8806e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
8816e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jint len = _env->GetArrayLength(params);
8826e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
8836e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len);
8846e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
8856e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
8866e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams
887d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
888fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
889fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
890e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Samsstatic jint
891e4a06c5fc738bf219f2a495e12a637b2d0871651Jason SamsnScriptCCreate(JNIEnv *_env, jobject _this, RsContext con,
892e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
893e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
894d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
895e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    LOG_API("nScriptCCreate, con(%p)", con);
896e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
897e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
898e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
899e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    jint ret = 0;
9008451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    jbyte* script_ptr = NULL;
90143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
90243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
90343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
90443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
9058451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
90643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
90743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
90843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
90943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
9108451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
91143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
91243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
913e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
91443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
91543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
9168451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
9178451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
91843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
91943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
920e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
92143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
92243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
923e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    //rsScriptCSetText(con, (const char *)script_ptr, length);
924e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
925e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    ret = (jint)rsScriptCCreate(con,
926e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
927e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
928e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
92939ddc950c9064129ead5de04b200106c0659f937Jason Sams
93043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
931e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
932e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
93343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
93443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
935d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
936e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    return ret;
937d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
938d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
939d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
940d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
941d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
942331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason SamsnProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con,
943331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
944331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
945331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
946331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
947d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
94854db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreCreate, con(%p)", con);
949331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    return (jint)rsProgramStoreCreate(con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
950331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
951331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
952d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
953d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
9540011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
9550011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
9560011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
9572e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
9580011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
9590011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
9600011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
9610011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
96254c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
963d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9642e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
96554c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
96668afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
96768afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
96854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
96954c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
97054c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
9712e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
972d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
97368afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
97468afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
975d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
976d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
97768afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
978d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
97968afd01ec9fd37774d8291192952a25e5605b6fbJason Samsstatic jint
980b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
9817e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
982b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
9837e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
9847e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
9857e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
986991040c8261237997915f8a4c899a6ea5012fb42Jason Sams    LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, paramLen);
9877e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
988b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
9897e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
9907e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
9917e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
9927e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
9937e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
9941fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
9951fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
9960011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic jint
997b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
9981fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
999b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
10000011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
10010011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
10021fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1003991040c8261237997915f8a4c899a6ea5012fb42Jason Sams    LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", con, paramLen);
1004ee41112e1539de95596600fd2c6dada5d275217fJason Sams
1005b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint ret = (jint)rsProgramVertexCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
10060011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
10070011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
10081fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
10091fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1010ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1011ebfb436a49673693b98469683451bd9ede797557Jason Sams
1012ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic jint
1013331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason SamsnProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth,
1014331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                     jboolean lineSmooth, jboolean pointSprite, jfloat lineWidth, jint cull)
1015ebfb436a49673693b98469683451bd9ede797557Jason Sams{
101680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
101780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            con, pointSmooth, lineSmooth, pointSprite);
1018331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite, lineWidth, (RsCullMode)cull);
1019ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1020ebfb436a49673693b98469683451bd9ede797557Jason Sams
1021d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1022d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1023d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1024d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10252e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
1026d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1027d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
1028bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindRootScript(con, (RsScript)script);
1029d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1030d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1031d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10322e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
1033d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
103454db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
103554db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsContextBindProgramStore(con, (RsProgramStore)pfs);
1036d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1037d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1038d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10392e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1040d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1041d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
1042bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramFragment(con, (RsProgramFragment)pf);
1043d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1044d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
10450826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
10462e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
10470826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
10480826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
1049bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramVertex(con, (RsProgramVertex)pf);
10500826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
10510826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1052d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
10532e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1054ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1055ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1056ebfb436a49673693b98469683451bd9ede797557Jason Sams    rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1057ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1058ebfb436a49673693b98469683451bd9ede797557Jason Sams
1059d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
106002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
106102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
106202fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic void
10632e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
106402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
106502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    LOG_API("nSamplerBegin, con(%p)", con);
1066bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsSamplerBegin(con);
106702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
106802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
106902fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic void
10702e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
107102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
107202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
1073bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
107402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
107502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1076f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchoukstatic void
1077f5b3510c706ed1f7611760dff0c94f2111531c68Alex SakhartchouknSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1078f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk{
1079f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1080f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    rsSamplerSet2(con, (RsSamplerParam)p, v);
1081f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk}
1082f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk
108302fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic jint
10842e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
108502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
1086bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    LOG_API("nSamplerCreate, con(%p)", con);
1087bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    return (jint)rsSamplerCreate(con);
108802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
108902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1090bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1091bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
10921bada8cd6e4f340de93cff4a2439835fc3b1456cJason Samsstatic jint
10932e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
1094164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
1095164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1096164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1097164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    return id;
1098164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1099164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1100164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void
11012e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
1102164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
110380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
110480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1105164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1106164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1107164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void
11082e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
1109164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
111080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
111180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
111280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
111380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
11149d71e2180062931416092f26276a07e55b318f62Alex Sakhartchoukstatic void
11159d71e2180062931416092f26276a07e55b318f62Alex SakhartchouknMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
11169d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk{
11179d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
11189d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    rsMeshInitVertexAttribs(con, (RsMesh)mesh);
11199d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
11209d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
11219d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
112280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
11232e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
112480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
112580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
112680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1127581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
112880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
112980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
113080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
113180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
11322e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
113380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
113480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
113580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1136581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
113780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
113880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
113980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
114080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
11412e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
114280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
114380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
114480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
114580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1146581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
114780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
114880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
114980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
115080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
115180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
115280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
115380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
115480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
115580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
11562e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
115780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
115880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
115980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
116080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
116180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
116280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1163581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
116480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
116580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
116680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
116780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
116880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
116980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
117080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
117180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1172164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1173164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1174164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1175164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1176d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
117794d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1178d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1179d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
11801c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
11811c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
11821c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceCreate",                  "()I",                                     (void*)nDeviceCreate },
11831c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceDestroy",                 "(I)V",                                    (void*)nDeviceDestroy },
11841c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceSetConfig",               "(III)V",                                  (void*)nDeviceSetConfig },
11851c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetUserMessage",         "(I[I)V",                                  (void*)nContextGetUserMessage },
11861c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetErrorMessage",        "(I)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
11871c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextPeekMessage",            "(I[IZ)I",                                 (void*)nContextPeekMessage },
11881c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
11891c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextInitToClient",           "(I)V",                                    (void*)nContextInitToClient },
11901c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextDeinitToClient",         "(I)V",                                    (void*)nContextDeinitToClient },
11912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
1194b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextCreate",                 "(II)I",                                 (void*)nContextCreate },
11952c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk{"rsnContextCreateGL",               "(IIIIIIIIIIIIFI)I",                     (void*)nContextCreateGL },
11962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextFinish",                 "(I)V",                                  (void*)nContextFinish },
11972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetPriority",            "(II)V",                                 (void*)nContextSetPriority },
11982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetSurface",             "(IIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1199b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextDestroy",                "(I)V",                                  (void*)nContextDestroy },
12002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
12012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextPause",                  "(I)V",                                  (void*)nContextPause },
12022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextResume",                 "(I)V",                                  (void*)nContextResume },
12032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAssignName",                    "(II[B)V",                               (void*)nAssignName },
1204b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnGetName",                       "(II)Ljava/lang/String;",                (void*)nGetName },
12052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnObjDestroy",                    "(II)V",                                 (void*)nObjDestroy },
12062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1207b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFileA3DCreateFromFile",         "(ILjava/lang/String;)I",                (void*)nFileA3DCreateFromFile },
12082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DCreateFromAssetStream",  "(II)I",                                 (void*)nFileA3DCreateFromAssetStream },
1209b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFileA3DCreateFromAsset",        "(ILandroid/content/res/AssetManager;Ljava/lang/String;)I",            (void*)nFileA3DCreateFromAsset },
12102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetNumIndexEntries",     "(II)I",                                 (void*)nFileA3DGetNumIndexEntries },
1211b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnFileA3DGetIndexEntries",        "(III[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
12122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetEntryByIndex",        "(III)I",                                (void*)nFileA3DGetEntryByIndex },
12132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1214e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk{"rsnFontCreateFromFile",            "(ILjava/lang/String;FI)I",              (void*)nFontCreateFromFile },
1215b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFontCreateFromAssetStream",     "(ILjava/lang/String;FII)I",             (void*)nFontCreateFromAssetStream },
1216b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFontCreateFromAsset",        "(ILandroid/content/res/AssetManager;Ljava/lang/String;FI)I",            (void*)nFontCreateFromAsset },
12172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementCreate",                 "(IIIZI)I",                              (void*)nElementCreate },
121970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams{"rsnElementCreate2",                "(I[I[Ljava/lang/String;[I)I",           (void*)nElementCreate2 },
12202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementGetNativeData",          "(II[I)V",                               (void*)nElementGetNativeData },
1221b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnElementGetSubElements",         "(II[I[Ljava/lang/String;)V",            (void*)nElementGetSubElements },
12222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1223bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams{"rsnTypeCreate",                    "(IIIIIZZ)I",                            (void*)nTypeCreate },
1224b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnTypeGetNativeData",             "(II[I)V",                               (void*)nTypeGetNativeData },
12252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1226d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams{"rsnAllocationCreateTyped",         "(IIII)I",                               (void*)nAllocationCreateTyped },
12275476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCreateFromBitmap",    "(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCreateFromBitmap },
12285476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCubeCreateFromBitmap },
12295476b450e50939940dcf3f15c92335cee2fc572dJason Sams
12304ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyFromBitmap",      "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
12314ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyToBitmap",        "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
12324ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
12335476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationSyncAll",             "(III)V",                                (void*)nAllocationSyncAll },
123449a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[II)V",                           (void*)nAllocationData1D_i },
123549a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[SI)V",                           (void*)nAllocationData1D_s },
123649a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[BI)V",                           (void*)nAllocationData1D_b },
123749a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[FI)V",                           (void*)nAllocationData1D_f },
123849a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationElementData1D",       "(IIIII[BI)V",                           (void*)nAllocationElementData1D },
123949a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[II)V",                        (void*)nAllocationData2D_i },
1240fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[SI)V",                        (void*)nAllocationData2D_s },
1241fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[BI)V",                        (void*)nAllocationData2D_b },
124249a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[FI)V",                        (void*)nAllocationData2D_f },
12432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[I)V",                               (void*)nAllocationRead_i },
1244fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationRead",                "(II[S)V",                               (void*)nAllocationRead_s },
1245fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationRead",                "(II[B)V",                               (void*)nAllocationRead_b },
12462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[F)V",                               (void*)nAllocationRead_f },
12472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationGetType",             "(II)I",                                 (void*)nAllocationGetType},
12485edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize1D",            "(III)V",                                (void*)nAllocationResize1D },
12495edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize2D",            "(IIII)V",                               (void*)nAllocationResize2D },
1250f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{"rsnAllocationGenerateMipmaps",     "(II)V",                                 (void*)nAllocationGenerateMipmaps },
12512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptBindAllocation",          "(IIII)V",                               (void*)nScriptBindAllocation },
12532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetTimeZone",             "(II[B)V",                               (void*)nScriptSetTimeZone },
12542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvoke",                  "(III)V",                                (void*)nScriptInvoke },
12552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvokeV",                 "(III[B)V",                              (void*)nScriptInvokeV },
12566e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{"rsnScriptForEach",                 "(IIIII)V",                              (void*)nScriptForEach },
12576e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{"rsnScriptForEach",                 "(IIIII[B)V",                            (void*)nScriptForEachV },
12582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarI",                 "(IIII)V",                               (void*)nScriptSetVarI },
1259031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{"rsnScriptSetVarJ",                 "(IIIJ)V",                               (void*)nScriptSetVarJ },
12602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarF",                 "(IIIF)V",                               (void*)nScriptSetVarF },
1261ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{"rsnScriptSetVarD",                 "(IIID)V",                               (void*)nScriptSetVarD },
12622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarV",                 "(III[B)V",                              (void*)nScriptSetVarV },
12636f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{"rsnScriptSetVarObj",               "(IIII)V",                               (void*)nScriptSetVarObj },
12642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1265e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams{"rsnScriptCCreate",                 "(ILjava/lang/String;Ljava/lang/String;[BI)I",  (void*)nScriptCCreate },
12662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1267331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams{"rsnProgramStoreCreate",            "(IZZZZZZIII)I",                         (void*)nProgramStoreCreate },
12682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindConstants",          "(IIII)V",                               (void*)nProgramBindConstants },
12702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindTexture",            "(IIII)V",                               (void*)nProgramBindTexture },
12712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindSampler",            "(IIII)V",                               (void*)nProgramBindSampler },
12722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
127349a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnProgramFragmentCreate",         "(ILjava/lang/String;[I)I",              (void*)nProgramFragmentCreate },
1274331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams{"rsnProgramRasterCreate",           "(IZZZFI)I",                             (void*)nProgramRasterCreate },
127549a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnProgramVertexCreate",           "(ILjava/lang/String;[I)I",              (void*)nProgramVertexCreate },
12762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindRootScript",         "(II)V",                                 (void*)nContextBindRootScript },
1278b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextBindProgramStore",       "(II)V",                                 (void*)nContextBindProgramStore },
12792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramFragment",    "(II)V",                                 (void*)nContextBindProgramFragment },
12802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramVertex",      "(II)V",                                 (void*)nContextBindProgramVertex },
12812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramRaster",      "(II)V",                                 (void*)nContextBindProgramRaster },
12822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerBegin",                  "(I)V",                                  (void*)nSamplerBegin },
12842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerSet",                    "(III)V",                                (void*)nSamplerSet },
1285f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk{"rsnSamplerSet2",                   "(IIF)V",                                (void*)nSamplerSet2 },
12862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerCreate",                 "(I)I",                                  (void*)nSamplerCreate },
12872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshCreate",                    "(III)I",                                (void*)nMeshCreate },
12892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshBindVertex",                "(IIII)V",                               (void*)nMeshBindVertex },
12902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshBindIndex",                 "(IIIII)V",                              (void*)nMeshBindIndex },
12919d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk{"rsnMeshInitVertexAttribs",         "(II)V",                                 (void*)nMeshInitVertexAttribs },
12922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetVertexBufferCount",      "(II)I",                                 (void*)nMeshGetVertexBufferCount },
12942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndexCount",             "(II)I",                                 (void*)nMeshGetIndexCount },
1295b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnMeshGetVertices",               "(II[II)V",                              (void*)nMeshGetVertices },
12962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndices",                "(II[I[II)V",                            (void*)nMeshGetIndices },
129780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1298d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1299d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1300d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1301d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1302d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1303d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1304d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1305d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1306d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1307d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1308d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1309d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1310d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    JNIEnv* env = NULL;
1311d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1312d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1313d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1314d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: GetEnv failed\n");
1315d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1316d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1317d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    assert(env != NULL);
1318d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1319d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
1320d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: MediaPlayer native registration failed\n");
1321d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1322d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1323d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1324d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1325d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1326d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1327d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1328d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1329d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1330