android_renderscript_RenderScript.cpp revision 2c74ad9aae29cc64fece926f353825a7925792c2
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
75d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
76d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
77d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jclass npeClazz = env->FindClass(exc);
78d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    env->ThrowNew(npeClazz, msg);
79d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
80d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
81ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
82ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
8343ee06857bb7f99446d1d84f8789016c5d105558Jason Samsstatic jfieldID gTypeNativeCache = 0;
84d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
85d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
86d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
87d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    gContextId             = _env->GetFieldID(_this, "mContext", "I");
88ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
89ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
90ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
91d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
92d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
93d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
94d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
953eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
962e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextFinish(JNIEnv *_env, jobject _this, RsContext con)
9796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
9896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    LOG_API("nContextFinish, con(%p)", con);
9996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    rsContextFinish(con);
10096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
10196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
10296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
1032e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
1043eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
10507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
1063eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
1073eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
108bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAssignName(con, (void *)obj, (const char *)cptr, len);
1093eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
1103eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
1113eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
112fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
1132e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
114fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
115fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
116fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    const char *name = NULL;
117581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaGetName(con, (void *)obj, &name);
118581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    if(name == NULL || strlen(name) == 0) {
119581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk        return NULL;
120581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
121fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
122fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
123fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
1247ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
1252e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
1267ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
1277ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams    LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
1289c25aee52672f9c8908e062bde502341c189970eJason Sams    rsObjDestroy(con, (void *)obj);
1297ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
1307ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
1313eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
1323eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
133d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
134d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
135d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
137d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return (jint)rsDeviceCreate();
138d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
139d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
140d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
141d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
142d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
143d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
144d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
145d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
146d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
147ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
148ebfb436a49673693b98469683451bd9ede797557Jason SamsnDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
149ebfb436a49673693b98469683451bd9ede797557Jason Sams{
150ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
151ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
152ebfb436a49673693b98469683451bd9ede797557Jason Sams}
153ebfb436a49673693b98469683451bd9ede797557Jason Sams
154d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
155704ff64b099406bb328898a7443921f22dbffd6dJason SamsnContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
156d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
157d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
158704ff64b099406bb328898a7443921f22dbffd6dJason Sams    return (jint)rsContextCreate((RsDevice)dev, ver);
159704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
160704ff64b099406bb328898a7443921f22dbffd6dJason Sams
161704ff64b099406bb328898a7443921f22dbffd6dJason Samsstatic jint
16211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason SamsnContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
16311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
16411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
16511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
16611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1672c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ,
1682c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int dpi)
16911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
17011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
17111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
17211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
17311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
17411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
17511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
17611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
17711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
17811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
17911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
18011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
181704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
1822c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk    return (jint)rsContextCreateGL((RsDevice)dev, ver, sc, dpi);
183d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
184d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
185d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1862e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
1877d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
1887d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
1897d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    rsContextSetPriority(con, p);
1907d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
1917d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1927d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1937d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1947d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
1952e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
196efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
1973bc47d438171dce294e816366d53bc9eca772c5bJason Sams    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
198efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
199efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    Surface * window = NULL;
200efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    if (wnd == NULL) {
201efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
202efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
203ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller        window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
204efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
205efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
2063bc47d438171dce294e816366d53bc9eca772c5bJason Sams    rsContextSetSurface(con, width, height, window);
207efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
208efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
209efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
2102e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
211d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
2122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    LOG_API("nContextDestroy, con(%p)", con);
2132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    rsContextDestroy(con);
214d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
215d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
216715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
2172e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
218715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
219715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
220715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
221715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
222d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
223d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2242e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextPause(JNIEnv *_env, jobject _this, RsContext con)
22565e7aa56f56097418d617663683544c25b3988eaJason Sams{
22665e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextPause, con(%p)", con);
22765e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextPause(con);
22865e7aa56f56097418d617663683544c25b3988eaJason Sams}
22965e7aa56f56097418d617663683544c25b3988eaJason Sams
23065e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
2312e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextResume(JNIEnv *_env, jobject _this, RsContext con)
23265e7aa56f56097418d617663683544c25b3988eaJason Sams{
23365e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextResume, con(%p)", con);
23465e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextResume(con);
23565e7aa56f56097418d617663683544c25b3988eaJason Sams}
23665e7aa56f56097418d617663683544c25b3988eaJason Sams
2371c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
2391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
2401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextGetErrorMessage, con(%p)", con);
2421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
2431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2441c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2451c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextGetMessage(con, buf, &receiveLen, &subID, sizeof(buf), true);
2471c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
2481c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
2491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
2501c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
2511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic void
2541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
255516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
256516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
257516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
258516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
259516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
2601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextGetMessage(con, ptr, &receiveLen, &subID, len * 4, true);
262516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
2631d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
264516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
265516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
2661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
2691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData, jboolean wait)
2701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextPeekMessage, con(%p)", con);
2721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
2731c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2741c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2751c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextPeekMessage(con, &receiveLen, &subID, wait);
2761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
2771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
2781c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
279516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    return id;
280516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
281516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
2822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
283516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
284516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextInitToClient, con(%p)", con);
285516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextInitToClient(con);
286516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
287516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
2882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
289516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
290516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextDeinitToClient, con(%p)", con);
291516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextDeinitToClient(con);
292516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
293516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
294516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
295718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
2962e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
297d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
298718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
299718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
300d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
301d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
302718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
30370d4e5024298f71edb3b04867e05568f5495b4ceJason SamsnElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
304d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
305718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
306704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nElementCreate2, con(%p)", con);
307718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
308718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    jint *ids = _env->GetIntArrayElements(_ids, NULL);
30970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
310718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
311718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
312718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
313718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
314718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
315718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        nameArray[ct] = _env->GetStringUTFChars(s, NULL);
316718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        sizeArray[ct] = _env->GetStringUTFLength(s);
31743ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
31870d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
319718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
320718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
321718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        _env->ReleaseStringUTFChars(s, nameArray[ct]);
32243ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
323718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
32470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
325718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(nameArray);
326718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(sizeArray);
327718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)id;
328d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
329d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
330dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3312e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
332dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
333dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
334dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetNativeData, con(%p)", con);
335dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
336dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
337dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
338dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
339dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t elementData[5];
340581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
341dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
342dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
343dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
344dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
345dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
346dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
347dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
348dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3492e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
350dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
351dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_IDs);
352dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetSubElements, con(%p)", con);
353dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
354dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
355dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
356dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
357581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
358dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
35911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    for(jint i = 0; i < dataSize; i++) {
360dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
361dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
362dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
363dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
364dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
365dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
366dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
367dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
368d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
369d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
3703b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Samsstatic int
371bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason SamsnTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
372bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
373d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
374bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
375bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            con, eid, dimx, dimy, dimz, mips, faces);
3763b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
377bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    jint id = (jint)rsaTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
3783b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    return (jint)id;
379d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
380d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
381dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3822e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
383dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
384dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
385dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
386dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
387dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
388dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
389dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nTypeCreate, con(%p)", con);
390dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
391dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t typeData[6];
392581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
393dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
394dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
395dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
396dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
397dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
398dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
399d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
400d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
401d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
4025476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage)
403d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
404d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i)", con, (RsElement)type, mips, usage);
405d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    return (jint) rsaAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage);
406d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
407d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
408d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
4095476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
4105476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
4115476b450e50939940dcf3f15c92335cee2fc572dJason Sams    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
4125476b450e50939940dcf3f15c92335cee2fc572dJason Sams    rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
4135476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
4145476b450e50939940dcf3f15c92335cee2fc572dJason Sams
415f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Samsstatic void
416f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason SamsnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
417f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
418f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
419f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    rsAllocationGenerateMipmaps(con, (RsAllocation)alloc);
420f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
421f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
422fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Samsstatic int
4235476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
424fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
425ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
426ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
427ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
428fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
4295476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
4305476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
431d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    jint id = (jint)rsaAllocationCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
4325476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
4335476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
434ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
435fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
43667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchoukstatic int
4375476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
43867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
43967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
44067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
44167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
44267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
4435476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
4445476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
445d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    jint id = (jint)rsaAllocationCubeCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
4465476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
4475476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
44867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
44967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
45026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
4514ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
45226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
45326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
45426ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
45526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
456f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
457f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
45826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
4594ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
4604ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
461f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, 0, 0,
462f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams                       0, RS_ALLOCATION_CUBMAP_FACE_POSITVE_X,
463f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams                       w, h, ptr, bitmap.getSize());
4644ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
4658a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
4668a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4674ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
4684ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
4698a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
4704ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
4714ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
4724ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
4738a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4744ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
4754ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
4764ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
4774ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
4788a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
4798a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4804ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
481650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
4824ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
4834ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    nativeBitmap->unlockPixels();
484650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
485650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
4864ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
487d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
48849a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
489d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
490d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
49149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
492d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
49349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
494d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
495d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
496d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
497d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
49849a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
499d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
500d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
50149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
502768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
50349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
504768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
505d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
506d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
507d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
50849a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
509d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
510d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
51149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
512768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
51349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
514768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
515d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
516d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
517d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
51849a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
519d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
520d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
52149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
522d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
52349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
524d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
525d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
526d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
527d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
52849a05d7b82956009f03acbb92a064eed054eb031Jason Sams//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
52949a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
53049bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
53149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
53249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
53349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
53449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, compIdx, sizeBytes);
53549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
53649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
53749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
53849bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
539fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
540fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams                    jint w, jint h, jshortArray data, int sizeBytes)
541fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
542fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
543fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason 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);
544fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
545fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
546fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
547fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
548fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
549fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
550fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
551fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams                    jint w, jint h, jbyteArray data, int sizeBytes)
552fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
553fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
554fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason 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);
555fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
556fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
557fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
558fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
559fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
560fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
56149a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
56249a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jintArray data, int sizeBytes)
563d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
564d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
56549a05d7b82956009f03acbb92a064eed054eb031Jason 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);
566d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
56749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
568d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
569d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
570d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
571d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
57249a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
57349a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jfloatArray 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    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
57849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
579d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
580d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
581d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
58240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
5832e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
58440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
58540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
58640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
58740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
588bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAllocationRead(con, (RsAllocation)alloc, ptr);
589ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseIntArrayElements(data, ptr, 0);
59040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
59140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
59240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
593fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
594fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
595fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
596fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
597fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
598fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocationRead(con, (RsAllocation)alloc, ptr);
599fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseShortArrayElements(data, ptr, 0);
600fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
601fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
602fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
603fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
604fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
605fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
606fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
607fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
608fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocationRead(con, (RsAllocation)alloc, ptr);
609fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseByteArrayElements(data, ptr, 0);
610fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
611fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
612fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
6132e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
61440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
61540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
616a8f2acee39aae94f9d7148f775ca8e35344da4b4Joe Onorato    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
61740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
618bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAllocationRead(con, (RsAllocation)alloc, ptr);
619ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseFloatArrayElements(data, ptr, 0);
62040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
621d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
622dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic jint
6232e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
624dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
625dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
626581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    return (jint) rsaAllocationGetType(con, (RsAllocation)a);
627dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
628dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
6295edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
6305edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
6315edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
6325edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
6335edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
6345edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
6355edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
6365edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
6375edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
6385edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
6395edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
6405edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
6415edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
6425edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
643aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
644aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
645aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
6462e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
647aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
648aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) native_asset);
649aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
650aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
651aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
652b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromMemory(con, asset->getBuffer(false), asset->getLength());
653b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
654b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
655b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
656b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
657b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path)
658b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
659b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
660b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
661b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
662b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
663b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
664b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
665b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
666b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
667b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
668b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
669b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
670b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromAsset(con, asset);
671b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
672b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
673b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
674b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
675b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFileA3DCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName)
676b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
677b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
678b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromFile(con, fileNameUTF.c_str());
679b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
680aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
681aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
682aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
683aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
6842e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
685aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
686aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
687581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
688aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return numEntries;
689aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
690aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
691aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
6922e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
693aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
694aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
695aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
696aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
697581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
698aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
699aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
700aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
701aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
702aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
703aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
704aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
705aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
706aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
707aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
7082e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
709aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
710aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
711581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
712aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
713aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
714d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
715d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
716d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
7179b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic int
718b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con,
719b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
7209b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
721b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
722b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsFontCreateFromFile(con, fileNameUTF.c_str(), fontSize, dpi);
723b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
724b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
725b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
726b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
727b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
728b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con,
729b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                           jstring name, jfloat fontSize, jint dpi, jint native_asset)
730b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
731b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
732b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
733b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
734b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsFontCreateFromMemory(con, nameUTF.c_str(), fontSize, dpi,
735b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
736b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
737b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
738b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
739b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
740b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path,
741b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
742b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
743b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
744b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
745b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
746b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
747b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
748b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
749b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
750b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
751b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
752b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
7539b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
754b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsFontCreateFromMemory(con, str.c_str(), fontSize, dpi,
755b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
756b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
7579b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
7589b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
7599b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
760bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
761bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
762bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
7632e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
764d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
765d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
766bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
767d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
768d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
769d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7702e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
7714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
772cfc04366998cd0c626594c9cf70336a11bdf5996Jason Sams    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
7734d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarI(con, (RsScript)script, slot, val);
7744d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
7754d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
7764d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
7776f4cf0b8885403ead157ae00fd43cf1282331c23Jason SamsnScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
7786f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
7796f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
7806f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
7816f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
7826f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
7836f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
784031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen HinesnScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
785031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
786031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
787031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    rsScriptSetVarJ(con, (RsScript)script, slot, val);
788031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
789031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
790031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
7912e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
7924d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
793ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
7944d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarF(con, (RsScript)script, slot, val);
7954d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
7964d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
7974d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
798ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen HinesnScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
799ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
800ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
801ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    rsScriptSetVarD(con, (RsScript)script, slot, val);
802ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
803ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
804ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
8052e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
8064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
8074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
8084d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
8094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
8104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
8114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
8124d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8134d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
814d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
815d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8162e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
817584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
81807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
819584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
820584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
821584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
822584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
823584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
824bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
825584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
826584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
827584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
828584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
829584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
830584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
83122534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
8322e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
83322534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
8344d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
8354d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvoke(con, (RsScript)obj, slot);
83622534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
83722534176fb5c1257130ef4ee589739ca42766a32Jason Sams
838584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
8392e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
840be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
8414d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
8424d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
8434d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
8444d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
8454d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
846be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
847be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
848d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
849fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
850fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
851d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8522e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
853d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
854fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams    LOG_API("nScriptCBegin, con(%p)", con);
855bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptCBegin(con);
856d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
857d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
858d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8592e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
86043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                  jint offset, jint length)
861d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
862d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("!!! nScriptCSetScript, con(%p)", con);
86343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
86443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
86543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jbyte* script_base = 0;
86643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jbyte* script_ptr;
86743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
86843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
86943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "script == null");
87043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
87143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
87243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (offset < 0) {
87343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
87443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "offset < 0");
87543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
87643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
87743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
87843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
87943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "length < 0");
88043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
88143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
88243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    remaining = _env->GetArrayLength(scriptRef) - offset;
88343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
88443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
88543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "length > script.length - offset");
88643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
88743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
88843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    script_base = (jbyte *)
88943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
89043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    script_ptr = script_base + offset;
89143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
892bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptCSetText(con, (const char *)script_ptr, length);
89339ddc950c9064129ead5de04b200106c0659f937Jason Sams
89443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
89543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (script_base) {
89643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
89743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
89843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
899d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
900d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
901d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
902eeca435dc6134a285b9bbb832cd6a1a88f34e85fShih-wei LiaonScriptCCreate(JNIEnv *_env, jobject _this, RsContext con, jstring packageName, jstring resName, jstring cacheDir)
903d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
904d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nScriptCCreate, con(%p)", con);
905b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 packageNameUTF(_env, packageName);
906b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 resNameUTF(_env, resName);
907b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
908b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint i = (jint)rsScriptCCreate(con, packageNameUTF.c_str(), resNameUTF.c_str(), cacheDirUTF.c_str());
9096b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    return i;
910d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
911d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
912d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
913d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
914d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9152e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
916d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
91754db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
91854db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
919d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
920d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
921d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9222e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
923d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
92454db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
92554db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
926d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
927d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
928d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9292e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
930d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
93154db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
93254db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreDepthMask(con, enable);
933d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
934d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
935d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9362e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
937d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
93854db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
93954db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreColorMask(con, r, g, b, a);
940d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
941d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
942d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9432e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
944d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
94554db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
94654db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
947d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
948d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
949d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9502e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
951d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
95254db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
95354db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreDither(con, enable);
954d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
955d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
956d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
9572e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
958d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
95954db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreCreate, con(%p)", con);
96054db59c3594e887a412a24713fc3daa1c2404593Jason Sams    return (jint)rsProgramStoreCreate(con);
961d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
962d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
9630011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
9640011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
9650011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
9662e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
9670011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
9680011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
9690011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
9700011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
97154c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
972d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9732e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
97454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
97568afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
97668afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
97754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
97854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
97954c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
9802e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
981d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
98268afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
98368afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
984d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
985d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
98668afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
987d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
98868afd01ec9fd37774d8291192952a25e5605b6fbJason Samsstatic jint
989b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
9907e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
991b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
9927e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
9937e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
9947e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
995991040c8261237997915f8a4c899a6ea5012fb42Jason Sams    LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, paramLen);
9967e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
997b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
9987e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
9997e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
10007e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
10017e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
10027e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
10031fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
10041fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
10050011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic jint
1006b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
10071fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
1008b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
10090011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
10100011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
10111fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1012991040c8261237997915f8a4c899a6ea5012fb42Jason Sams    LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", con, paramLen);
1013ee41112e1539de95596600fd2c6dada5d275217fJason Sams
1014b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint ret = (jint)rsProgramVertexCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
10150011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
10160011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
10171fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
10181fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1019ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1020ebfb436a49673693b98469683451bd9ede797557Jason Sams
1021ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic jint
10222e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
1023ebfb436a49673693b98469683451bd9ede797557Jason Sams{
102480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
102580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            con, pointSmooth, lineSmooth, pointSprite);
102680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
1027ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1028ebfb436a49673693b98469683451bd9ede797557Jason Sams
1029ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
10302e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
1031ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1032ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
103380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
103480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
103580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
103680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
10372e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
103880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
103980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
104080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
1041ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1042ebfb436a49673693b98469683451bd9ede797557Jason Sams
1043d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1044d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1045d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1046d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10472e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
1048d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1049d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
1050bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindRootScript(con, (RsScript)script);
1051d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1052d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1053d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10542e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
1055d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
105654db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
105754db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsContextBindProgramStore(con, (RsProgramStore)pfs);
1058d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1059d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1060d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10612e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1062d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1063d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
1064bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramFragment(con, (RsProgramFragment)pf);
1065d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1066d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
10670826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
10682e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
10690826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
10700826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
1071bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramVertex(con, (RsProgramVertex)pf);
10720826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
10730826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1074d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
10752e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1076ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1077ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1078ebfb436a49673693b98469683451bd9ede797557Jason Sams    rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1079ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1080ebfb436a49673693b98469683451bd9ede797557Jason Sams
1081d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
108202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
108302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
108402fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic void
10852e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
108602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
108702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    LOG_API("nSamplerBegin, con(%p)", con);
1088bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsSamplerBegin(con);
108902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
109002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
109102fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic void
10922e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
109302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
109402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
1095bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
109602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
109702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1098f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchoukstatic void
1099f5b3510c706ed1f7611760dff0c94f2111531c68Alex SakhartchouknSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1100f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk{
1101f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1102f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    rsSamplerSet2(con, (RsSamplerParam)p, v);
1103f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk}
1104f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk
110502fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic jint
11062e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
110702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
1108bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    LOG_API("nSamplerCreate, con(%p)", con);
1109bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    return (jint)rsSamplerCreate(con);
111002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
111102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1112bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1113bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
11141bada8cd6e4f340de93cff4a2439835fc3b1456cJason Samsstatic jint
11152e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
1116164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
1117164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1118164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1119164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    return id;
1120164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1121164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1122164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void
11232e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
1124164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
112580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
112680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1127164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1128164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1129164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void
11302e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
1131164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
113280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
113380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
113480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
113580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
11369d71e2180062931416092f26276a07e55b318f62Alex Sakhartchoukstatic void
11379d71e2180062931416092f26276a07e55b318f62Alex SakhartchouknMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
11389d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk{
11399d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
11409d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    rsMeshInitVertexAttribs(con, (RsMesh)mesh);
11419d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
11429d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
11439d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
114480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
11452e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
114680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
114780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
114880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1149581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
115080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
115180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
115280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
115380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
11542e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
115580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
115680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
115780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1158581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
115980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
116080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
116180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
116280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
11632e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
116480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
116580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
116680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
116780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1168581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
116980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
117080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
117180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
117280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
117380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
117480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
117580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
117680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
117780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
11782e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
117980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
118080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
118180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
118280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
118380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
118480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1185581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
118680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
118780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
118880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
118980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
119080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
119180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
119280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
119380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1194164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1195164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1196164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1197164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1198d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
119994d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1200d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1201d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
12021c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
12031c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
12041c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceCreate",                  "()I",                                     (void*)nDeviceCreate },
12051c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceDestroy",                 "(I)V",                                    (void*)nDeviceDestroy },
12061c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceSetConfig",               "(III)V",                                  (void*)nDeviceSetConfig },
12071c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetUserMessage",         "(I[I)V",                                  (void*)nContextGetUserMessage },
12081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetErrorMessage",        "(I)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
12091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextPeekMessage",            "(I[IZ)I",                                 (void*)nContextPeekMessage },
12101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
12111c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextInitToClient",           "(I)V",                                    (void*)nContextInitToClient },
12121c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextDeinitToClient",         "(I)V",                                    (void*)nContextDeinitToClient },
12132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
1216b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextCreate",                 "(II)I",                                 (void*)nContextCreate },
12172c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk{"rsnContextCreateGL",               "(IIIIIIIIIIIIFI)I",                     (void*)nContextCreateGL },
12182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextFinish",                 "(I)V",                                  (void*)nContextFinish },
12192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetPriority",            "(II)V",                                 (void*)nContextSetPriority },
12202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetSurface",             "(IIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1221b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextDestroy",                "(I)V",                                  (void*)nContextDestroy },
12222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
12232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextPause",                  "(I)V",                                  (void*)nContextPause },
12242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextResume",                 "(I)V",                                  (void*)nContextResume },
12252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAssignName",                    "(II[B)V",                               (void*)nAssignName },
1226b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnGetName",                       "(II)Ljava/lang/String;",                (void*)nGetName },
12272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnObjDestroy",                    "(II)V",                                 (void*)nObjDestroy },
12282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1229b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFileA3DCreateFromFile",         "(ILjava/lang/String;)I",                (void*)nFileA3DCreateFromFile },
12302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DCreateFromAssetStream",  "(II)I",                                 (void*)nFileA3DCreateFromAssetStream },
1231b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFileA3DCreateFromAsset",        "(ILandroid/content/res/AssetManager;Ljava/lang/String;)I",            (void*)nFileA3DCreateFromAsset },
12322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetNumIndexEntries",     "(II)I",                                 (void*)nFileA3DGetNumIndexEntries },
1233b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnFileA3DGetIndexEntries",        "(III[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
12342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetEntryByIndex",        "(III)I",                                (void*)nFileA3DGetEntryByIndex },
12352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1236e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk{"rsnFontCreateFromFile",            "(ILjava/lang/String;FI)I",              (void*)nFontCreateFromFile },
1237b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFontCreateFromAssetStream",     "(ILjava/lang/String;FII)I",             (void*)nFontCreateFromAssetStream },
1238b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFontCreateFromAsset",        "(ILandroid/content/res/AssetManager;Ljava/lang/String;FI)I",            (void*)nFontCreateFromAsset },
12392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementCreate",                 "(IIIZI)I",                              (void*)nElementCreate },
124170d4e5024298f71edb3b04867e05568f5495b4ceJason Sams{"rsnElementCreate2",                "(I[I[Ljava/lang/String;[I)I",           (void*)nElementCreate2 },
12422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementGetNativeData",          "(II[I)V",                               (void*)nElementGetNativeData },
1243b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnElementGetSubElements",         "(II[I[Ljava/lang/String;)V",            (void*)nElementGetSubElements },
12442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1245bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams{"rsnTypeCreate",                    "(IIIIIZZ)I",                            (void*)nTypeCreate },
1246b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnTypeGetNativeData",             "(II[I)V",                               (void*)nTypeGetNativeData },
12472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1248d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams{"rsnAllocationCreateTyped",         "(IIII)I",                               (void*)nAllocationCreateTyped },
12495476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCreateFromBitmap",    "(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCreateFromBitmap },
12505476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCubeCreateFromBitmap },
12515476b450e50939940dcf3f15c92335cee2fc572dJason Sams
12524ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyFromBitmap",      "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
12534ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyToBitmap",        "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
12544ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
12555476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationSyncAll",             "(III)V",                                (void*)nAllocationSyncAll },
125649a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[II)V",                           (void*)nAllocationData1D_i },
125749a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[SI)V",                           (void*)nAllocationData1D_s },
125849a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[BI)V",                           (void*)nAllocationData1D_b },
125949a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[FI)V",                           (void*)nAllocationData1D_f },
126049a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationElementData1D",       "(IIIII[BI)V",                           (void*)nAllocationElementData1D },
126149a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[II)V",                        (void*)nAllocationData2D_i },
1262fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[SI)V",                        (void*)nAllocationData2D_s },
1263fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[BI)V",                        (void*)nAllocationData2D_b },
126449a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[FI)V",                        (void*)nAllocationData2D_f },
12652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[I)V",                               (void*)nAllocationRead_i },
1266fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationRead",                "(II[S)V",                               (void*)nAllocationRead_s },
1267fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationRead",                "(II[B)V",                               (void*)nAllocationRead_b },
12682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[F)V",                               (void*)nAllocationRead_f },
12692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationGetType",             "(II)I",                                 (void*)nAllocationGetType},
12705edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize1D",            "(III)V",                                (void*)nAllocationResize1D },
12715edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize2D",            "(IIII)V",                               (void*)nAllocationResize2D },
1272f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{"rsnAllocationGenerateMipmaps",     "(II)V",                                 (void*)nAllocationGenerateMipmaps },
12732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptBindAllocation",          "(IIII)V",                               (void*)nScriptBindAllocation },
12752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetTimeZone",             "(II[B)V",                               (void*)nScriptSetTimeZone },
12762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvoke",                  "(III)V",                                (void*)nScriptInvoke },
12772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvokeV",                 "(III[B)V",                              (void*)nScriptInvokeV },
12782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarI",                 "(IIII)V",                               (void*)nScriptSetVarI },
1279031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{"rsnScriptSetVarJ",                 "(IIIJ)V",                               (void*)nScriptSetVarJ },
12802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarF",                 "(IIIF)V",                               (void*)nScriptSetVarF },
1281ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{"rsnScriptSetVarD",                 "(IIID)V",                               (void*)nScriptSetVarD },
12822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarV",                 "(III[B)V",                              (void*)nScriptSetVarV },
12836f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{"rsnScriptSetVarObj",               "(IIII)V",                               (void*)nScriptSetVarObj },
12842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptCBegin",                  "(I)V",                                  (void*)nScriptCBegin },
12862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptCSetScript",              "(I[BII)V",                              (void*)nScriptCSetScript },
1287eeca435dc6134a285b9bbb832cd6a1a88f34e85fShih-wei Liao{"rsnScriptCCreate",                 "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",  (void*)nScriptCCreate },
12882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreBegin",             "(III)V",                                (void*)nProgramStoreBegin },
12902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreDepthFunc",         "(II)V",                                 (void*)nProgramStoreDepthFunc },
12912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreDepthMask",         "(IZ)V",                                 (void*)nProgramStoreDepthMask },
12922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreColorMask",         "(IZZZZ)V",                              (void*)nProgramStoreColorMask },
12932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreBlendFunc",         "(III)V",                                (void*)nProgramStoreBlendFunc },
12942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreDither",            "(IZ)V",                                 (void*)nProgramStoreDither },
12952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreCreate",            "(I)I",                                  (void*)nProgramStoreCreate },
12962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindConstants",          "(IIII)V",                               (void*)nProgramBindConstants },
12982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindTexture",            "(IIII)V",                               (void*)nProgramBindTexture },
12992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindSampler",            "(IIII)V",                               (void*)nProgramBindSampler },
13002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
130149a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnProgramFragmentCreate",         "(ILjava/lang/String;[I)I",              (void*)nProgramFragmentCreate },
13022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1303b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnProgramRasterCreate",           "(IZZZ)I",                               (void*)nProgramRasterCreate },
13042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramRasterSetLineWidth",     "(IIF)V",                                (void*)nProgramRasterSetLineWidth },
13052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramRasterSetCullMode",      "(III)V",                                (void*)nProgramRasterSetCullMode },
13062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
130749a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnProgramVertexCreate",           "(ILjava/lang/String;[I)I",              (void*)nProgramVertexCreate },
13082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindRootScript",         "(II)V",                                 (void*)nContextBindRootScript },
1310b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextBindProgramStore",       "(II)V",                                 (void*)nContextBindProgramStore },
13112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramFragment",    "(II)V",                                 (void*)nContextBindProgramFragment },
13122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramVertex",      "(II)V",                                 (void*)nContextBindProgramVertex },
13132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramRaster",      "(II)V",                                 (void*)nContextBindProgramRaster },
13142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerBegin",                  "(I)V",                                  (void*)nSamplerBegin },
13162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerSet",                    "(III)V",                                (void*)nSamplerSet },
1317f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk{"rsnSamplerSet2",                   "(IIF)V",                                (void*)nSamplerSet2 },
13182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerCreate",                 "(I)I",                                  (void*)nSamplerCreate },
13192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshCreate",                    "(III)I",                                (void*)nMeshCreate },
13212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshBindVertex",                "(IIII)V",                               (void*)nMeshBindVertex },
13222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshBindIndex",                 "(IIIII)V",                              (void*)nMeshBindIndex },
13239d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk{"rsnMeshInitVertexAttribs",         "(II)V",                                 (void*)nMeshInitVertexAttribs },
13242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetVertexBufferCount",      "(II)I",                                 (void*)nMeshGetVertexBufferCount },
13262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndexCount",             "(II)I",                                 (void*)nMeshGetIndexCount },
1327b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnMeshGetVertices",               "(II[II)V",                              (void*)nMeshGetVertices },
13282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndices",                "(II[I[II)V",                            (void*)nMeshGetIndices },
132980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1330d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1331d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1332d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1333d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1334d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1335d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1336d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1337d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1338d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1339d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1340d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1341d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1342d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    JNIEnv* env = NULL;
1343d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1344d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1345d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1346d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: GetEnv failed\n");
1347d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1348d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1349d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    assert(env != NULL);
1350d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1351d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
1352d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: MediaPlayer native registration failed\n");
1353d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1354d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1355d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1356d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1357d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1358d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1359d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1360d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1361d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1362