android_renderscript_RenderScript.cpp revision e7c4a7565c7f8c8fc1ec92dc0692577fcc474750
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/*
2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2006 The Android Open Source Project
3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License.
6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at
7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software
11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and
14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License.
15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */
16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
17f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams#define LOG_TAG "libRS_jni"
18f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdlib.h>
20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdio.h>
21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <fcntl.h>
22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <unistd.h>
23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <math.h>
24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <utils/misc.h>
25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
26000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/Surface.h>
27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
28ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams#include <core/SkBitmap.h>
29650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkPixelRef.h>
30650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkStream.h>
31650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkTemplates.h>
32650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <images/SkImageDecoder.h>
33ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
34650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <utils/Asset.h>
35b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include <utils/AssetManager.h>
36650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <utils/ResourceTypes.h>
37f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h"
39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h"
40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h"
41ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h"
42b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h"
43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
44e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams#include <RenderScript.h>
45e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams#include <RenderScriptEnv.h>
46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams//#define LOG_API LOGE
48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define LOG_API(...)
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
50d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
52b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 {
53b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic:
54b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str)
55b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    {
56b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fCStr = env->GetStringUTFChars(str, NULL);
57b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fLength = env->GetStringUTFLength(str);
58b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
59b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    ~AutoJavaStringToUTF8()
60b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    {
61b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
62b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
63b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* c_str() const { return fCStr; }
64b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize length() const { return fLength; }
65b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
66b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate:
67b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    JNIEnv*     fEnv;
68b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jstring     fJStr;
69b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* fCStr;
70b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize       fLength;
71b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk};
72b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
75ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
76ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
7743ee06857bb7f99446d1d84f8789016c5d105558Jason Samsstatic jfieldID gTypeNativeCache = 0;
78d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
79d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
80d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
81d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    gContextId             = _env->GetFieldID(_this, "mContext", "I");
82ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
83ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
84ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
85d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
86d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
87d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
88d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
893eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
902e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextFinish(JNIEnv *_env, jobject _this, RsContext con)
9196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
9296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    LOG_API("nContextFinish, con(%p)", con);
9396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    rsContextFinish(con);
9496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
9596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
9696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
972e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
983eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
9907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
1003eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
1013eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
102bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAssignName(con, (void *)obj, (const char *)cptr, len);
1033eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
1043eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
1053eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
106fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
1072e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
108fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
109fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
110fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    const char *name = NULL;
111581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaGetName(con, (void *)obj, &name);
112581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    if(name == NULL || strlen(name) == 0) {
113581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk        return NULL;
114581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
115fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
116fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
117fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
1187ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
1192e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
1207ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
1217ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams    LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
1229c25aee52672f9c8908e062bde502341c189970eJason Sams    rsObjDestroy(con, (void *)obj);
1237ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
1247ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
1253eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
1263eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
127d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
128d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
129d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
130d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
131d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return (jint)rsDeviceCreate();
132d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
133d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
134d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
135d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
137d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
138d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
139d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
140d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
141ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
142ebfb436a49673693b98469683451bd9ede797557Jason SamsnDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
143ebfb436a49673693b98469683451bd9ede797557Jason Sams{
144ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
145ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
146ebfb436a49673693b98469683451bd9ede797557Jason Sams}
147ebfb436a49673693b98469683451bd9ede797557Jason Sams
148d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
149704ff64b099406bb328898a7443921f22dbffd6dJason SamsnContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
150d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
151d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
152704ff64b099406bb328898a7443921f22dbffd6dJason Sams    return (jint)rsContextCreate((RsDevice)dev, ver);
153704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
154704ff64b099406bb328898a7443921f22dbffd6dJason Sams
155704ff64b099406bb328898a7443921f22dbffd6dJason Samsstatic jint
15611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason SamsnContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
15711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
15811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
15911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
16011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1612c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ,
1622c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int dpi)
16311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
16411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
16511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
16611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
16711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
16811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
16911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
17011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
17111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
17211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
17311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
17411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
175704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
1762c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk    return (jint)rsContextCreateGL((RsDevice)dev, ver, sc, dpi);
177d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
178d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
179d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1802e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
1817d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
1827d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
1837d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    rsContextSetPriority(con, p);
1847d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
1857d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1867d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1877d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1887d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
1892e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
190efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
1913bc47d438171dce294e816366d53bc9eca772c5bJason Sams    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
192efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
193efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    Surface * window = NULL;
194efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    if (wnd == NULL) {
195efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
196efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
197ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller        window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
198efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
199efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
200e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsContextSetSurface(con, width, height, window, 1);
201efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
202efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
203efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
2042e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
205d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
2062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    LOG_API("nContextDestroy, con(%p)", con);
2072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    rsContextDestroy(con);
208d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
209d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
210715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
2112e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
212715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
213715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
214715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
215715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
216d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
217d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2182e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextPause(JNIEnv *_env, jobject _this, RsContext con)
21965e7aa56f56097418d617663683544c25b3988eaJason Sams{
22065e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextPause, con(%p)", con);
22165e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextPause(con);
22265e7aa56f56097418d617663683544c25b3988eaJason Sams}
22365e7aa56f56097418d617663683544c25b3988eaJason Sams
22465e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
2252e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextResume(JNIEnv *_env, jobject _this, RsContext con)
22665e7aa56f56097418d617663683544c25b3988eaJason Sams{
22765e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextResume, con(%p)", con);
22865e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextResume(con);
22965e7aa56f56097418d617663683544c25b3988eaJason Sams}
23065e7aa56f56097418d617663683544c25b3988eaJason Sams
2311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
2331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
2341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2351c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextGetErrorMessage, con(%p)", con);
2361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
2371c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextGetMessage(con, buf, &receiveLen, &subID, sizeof(buf), true);
2411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
2421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
2431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
2441c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
2451c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2471c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic void
2481c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
249516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
250516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
251516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
252516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
253516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
2541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2551c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextGetMessage(con, ptr, &receiveLen, &subID, len * 4, true);
256516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
2571d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
258516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
259516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
2601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
2631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData, jboolean wait)
2641c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2651c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextPeekMessage, con(%p)", con);
2661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
2671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextPeekMessage(con, &receiveLen, &subID, wait);
2701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
2711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
2721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
273516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    return id;
274516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
275516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
2762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
277516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
278516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextInitToClient, con(%p)", con);
279516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextInitToClient(con);
280516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
281516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
2822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
283516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
284516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextDeinitToClient, con(%p)", con);
285516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextDeinitToClient(con);
286516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
287516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
288516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
289718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
2902e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
291d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
292718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
293718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
294d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
295d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
296718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
29770d4e5024298f71edb3b04867e05568f5495b4ceJason SamsnElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
298d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
299718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
300704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nElementCreate2, con(%p)", con);
301718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
302718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    jint *ids = _env->GetIntArrayElements(_ids, NULL);
30370d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
304718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
305718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
306718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
307718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
308718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
309718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        nameArray[ct] = _env->GetStringUTFChars(s, NULL);
310718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        sizeArray[ct] = _env->GetStringUTFLength(s);
31143ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
312e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsElementCreate2(con,
313e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (RsElement *)ids, fieldCount,
314e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     nameArray, fieldCount,
315e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     sizeArray, fieldCount,
316e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
317718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
318718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
319718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        _env->ReleaseStringUTFChars(s, nameArray[ct]);
32043ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
321718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
32270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
323718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(nameArray);
324718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(sizeArray);
325718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)id;
326d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
327d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
328dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3292e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
330dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
331dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
332dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetNativeData, con(%p)", con);
333dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
334dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
335dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
336dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
337dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t elementData[5];
338581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
339dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
340dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
341dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
342dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
343dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
344dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
345dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
346dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3472e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
348dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
349dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_IDs);
350dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetSubElements, con(%p)", con);
351dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
352dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
353dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
354dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
355581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
356dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
35711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    for(jint i = 0; i < dataSize; i++) {
358dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
359dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
360dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
361dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
362dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
363dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
364dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
365dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
366d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
367d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
3683b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Samsstatic int
369bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason SamsnTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
370bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
371d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
372bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
373bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            con, eid, dimx, dimy, dimz, mips, faces);
3743b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
375bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    jint id = (jint)rsaTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
3763b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    return (jint)id;
377d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
378d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
379dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3802e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
381dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
382dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
383dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
384dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
385dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
386dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
387dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nTypeCreate, con(%p)", con);
388dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
389dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t typeData[6];
390581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
391dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
392dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
393dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
394dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
395dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
396dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
397d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
398d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
399d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
4005476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage)
401d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
402d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i)", con, (RsElement)type, mips, usage);
403d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    return (jint) rsaAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage);
404d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
405d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
406d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
4075476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
4085476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
4095476b450e50939940dcf3f15c92335cee2fc572dJason Sams    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
4105476b450e50939940dcf3f15c92335cee2fc572dJason Sams    rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
4115476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
4125476b450e50939940dcf3f15c92335cee2fc572dJason Sams
413f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Samsstatic void
414f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason SamsnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
415f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
416f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
417f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    rsAllocationGenerateMipmaps(con, (RsAllocation)alloc);
418f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
419f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
420fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Samsstatic int
4215476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
422fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
423ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
424ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
425ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
426fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
4275476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
4285476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
429d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    jint id = (jint)rsaAllocationCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
4305476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
4315476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
432ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
433fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
43467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchoukstatic int
4355476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
43667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
43767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
43867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
43967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
44067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
4415476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
4425476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
443d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    jint id = (jint)rsaAllocationCubeCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
4445476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
4455476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
44667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
44767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
44826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
4494ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
45026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
45126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
45226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
45326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
454f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
455f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
45626ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
4574ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
4584ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
459f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, 0, 0,
460f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams                       0, RS_ALLOCATION_CUBMAP_FACE_POSITVE_X,
461f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams                       w, h, ptr, bitmap.getSize());
4624ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
4638a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
4648a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4654ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
4664ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
4678a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
4684ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
4694ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
4704ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
4718a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4724ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
4734ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
4744ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
4754ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
4768a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
4778a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4784ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
479650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
4804ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
4814ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    nativeBitmap->unlockPixels();
482650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
483650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
4844ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
485d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
48649a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
487d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
488d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
48949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
490d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
49149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
492d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
493d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
494d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
495d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
49649a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
497d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
498d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
49949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
500768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
50149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
502768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
503d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
504d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
505d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
50649a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
507d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
508d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
50949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
510768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
51149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
512768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
513d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
514d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
515d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
51649a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
517d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
518d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
51949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
520d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
52149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
522d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
523d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
524d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
525d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
52649a05d7b82956009f03acbb92a064eed054eb031Jason Sams//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
52749a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
52849bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
52949bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
53049a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
53149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
53249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, compIdx, sizeBytes);
53349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
53449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
53549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
53649bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
537fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
538fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams                    jint w, jint h, jshortArray data, int sizeBytes)
539fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
540fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
541fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason 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);
542fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
543fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
544fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
545fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
546fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
547fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
548fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
549fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams                    jint w, jint h, jbyteArray data, int sizeBytes)
550fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
551fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
552fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason 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);
553fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
554fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
555fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
556fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
557fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
558fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
55949a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
56049a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jintArray data, int sizeBytes)
561d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
562d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
56349a05d7b82956009f03acbb92a064eed054eb031Jason 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);
564d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
56549a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
566d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
567d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
568d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
569d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
57049a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
57149a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jfloatArray data, int sizeBytes)
572d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
573d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
57449a05d7b82956009f03acbb92a064eed054eb031Jason 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);
575d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
57649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
577d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
578d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
579d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
58040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
5812e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
58240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
58340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
58440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
58540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
586e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
587e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
588ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseIntArrayElements(data, ptr, 0);
58940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
59040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
59140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
592fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
593fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
594fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
595fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
596fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
597e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
598e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
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);
608e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
609e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
610fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseByteArrayElements(data, ptr, 0);
611fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
612fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
613fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
6142e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
61540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
61640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
617a8f2acee39aae94f9d7148f775ca8e35344da4b4Joe Onorato    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
61840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
619e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
620e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
621ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseFloatArrayElements(data, ptr, 0);
62240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
623d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
624dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic jint
6252e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
626dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
627dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
628581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    return (jint) rsaAllocationGetType(con, (RsAllocation)a);
629dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
630dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
6315edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
6325edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
6335edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
6345edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
6355edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
6365edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
6375edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
6385edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
6395edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
6405edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
6415edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
6425edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
6435edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
6445edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
645aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
646aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
647aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
6482e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
649aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
650aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) native_asset);
651aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
652aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
653aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
654b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromMemory(con, asset->getBuffer(false), asset->getLength());
655b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
656b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
657b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
658b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
659b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path)
660b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
661b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
662b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
663b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
664b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
665b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
666b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
667b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
668b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
669b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
670b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
671b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
672b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromAsset(con, asset);
673b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
674b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
675b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
676b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
677b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFileA3DCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName)
678b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
679b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
680b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromFile(con, fileNameUTF.c_str());
681b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
682aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
683aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
684aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
685aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
6862e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
687aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
688aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
689581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
690aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return numEntries;
691aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
692aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
693aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
6942e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
695aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
696aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
697aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
698aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
699581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
700aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
701aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
702aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
703aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
704aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
705aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
706aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
707aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
708aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
709aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
7102e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
711aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
712aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
713581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
714aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
715aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
716d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
717d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
718d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
7199b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic int
720b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con,
721b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
7229b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
723b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
724e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromFile(con,
725e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
726e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
727b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
728b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
729b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
730b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
731b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
732b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con,
733b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                           jstring name, jfloat fontSize, jint dpi, jint native_asset)
734b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
735b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
736b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
737b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
738e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromMemory(con,
739e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
740e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
741b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
742b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
743b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
744b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
745b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
746b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path,
747b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
748b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
749b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
750b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
751b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
752b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
753b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
754b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
755b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
756b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
757b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
758b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
7599b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
760e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromMemory(con,
761e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
762e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
763b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
764b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
7659b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
7669b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
7679b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
768bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
769bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
770bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
7712e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
772d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
773d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
774bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
775d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
776d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
777d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7782e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
7794d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
780cfc04366998cd0c626594c9cf70336a11bdf5996Jason Sams    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
7814d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarI(con, (RsScript)script, slot, val);
7824d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
7834d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
7844d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
7856f4cf0b8885403ead157ae00fd43cf1282331c23Jason SamsnScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
7866f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
7876f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
7886f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
7896f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
7906f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
7916f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
792031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen HinesnScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
793031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
794031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
795031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    rsScriptSetVarJ(con, (RsScript)script, slot, val);
796031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
797031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
798031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
7992e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
8004d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
801ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
8024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarF(con, (RsScript)script, slot, val);
8034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
8054d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
806ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen HinesnScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
807ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
808ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
809ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    rsScriptSetVarD(con, (RsScript)script, slot, val);
810ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
811ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
812ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
8132e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
8144d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
8154d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
8164d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
8174d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
8184d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
8194d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
8204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
822d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
823d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8242e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
825584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
82607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
827584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
828584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
829584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
830584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
831584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
832bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
833584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
834584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
835584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
836584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
837584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
838584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
83922534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
8402e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
84122534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
8424d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
8434d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvoke(con, (RsScript)obj, slot);
84422534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
84522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
846584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
8472e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
848be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
8494d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
8504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
8514d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
8524d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
8534d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
854be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
855be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
856d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
857fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
858fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
859e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Samsstatic jint
860e4a06c5fc738bf219f2a495e12a637b2d0871651Jason SamsnScriptCCreate(JNIEnv *_env, jobject _this, RsContext con,
861e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
862e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
863d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
864e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    LOG_API("nScriptCCreate, con(%p)", con);
865e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
866e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
867e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
868e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    jint ret = 0;
8698451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    jbyte* script_ptr = NULL;
87043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
87143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
87243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
87343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
8748451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
87543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
87643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
87743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
87843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
8798451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
88043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
88143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
882e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
88343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
88443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
8858451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
8868451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
88743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
88843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
889e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
89043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
89143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
892e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    //rsScriptCSetText(con, (const char *)script_ptr, length);
893e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
894e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    ret = (jint)rsScriptCCreate(con,
895e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
896e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
897e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
89839ddc950c9064129ead5de04b200106c0659f937Jason Sams
89943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
900e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
901e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
90243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
90343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
904d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
905e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    return ret;
906d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
907d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
908d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
909d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
910d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
911331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason SamsnProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con,
912331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
913331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
914331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
915331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
916d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
91754db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreCreate, con(%p)", con);
918331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    return (jint)rsProgramStoreCreate(con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
919331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
920331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
921d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
922d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
9230011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
9240011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
9250011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
9262e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
9270011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
9280011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
9290011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
9300011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
93154c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
932d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9332e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
93454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
93568afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
93668afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
93754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
93854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
93954c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
9402e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
941d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
94268afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
94368afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
944d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
945d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
94668afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
947d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
94868afd01ec9fd37774d8291192952a25e5605b6fbJason Samsstatic jint
949b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
9507e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
951b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
9527e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
9537e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
9547e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
955991040c8261237997915f8a4c899a6ea5012fb42Jason Sams    LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, paramLen);
9567e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
957b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
9587e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
9597e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
9607e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
9617e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
9627e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
9631fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
9641fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
9650011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic jint
966b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
9671fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
968b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
9690011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
9700011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
9711fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
972991040c8261237997915f8a4c899a6ea5012fb42Jason Sams    LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", con, paramLen);
973ee41112e1539de95596600fd2c6dada5d275217fJason Sams
974b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint ret = (jint)rsProgramVertexCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
9750011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
9760011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
9771fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
9781fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
979ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
980ebfb436a49673693b98469683451bd9ede797557Jason Sams
981ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic jint
982331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason SamsnProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth,
983331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                     jboolean lineSmooth, jboolean pointSprite, jfloat lineWidth, jint cull)
984ebfb436a49673693b98469683451bd9ede797557Jason Sams{
98580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
98680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            con, pointSmooth, lineSmooth, pointSprite);
987331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite, lineWidth, (RsCullMode)cull);
988ebfb436a49673693b98469683451bd9ede797557Jason Sams}
989ebfb436a49673693b98469683451bd9ede797557Jason Sams
990d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
991d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
992d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
993d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9942e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
995d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
996d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
997bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindRootScript(con, (RsScript)script);
998d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
999d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1000d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10012e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
1002d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
100354db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
100454db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsContextBindProgramStore(con, (RsProgramStore)pfs);
1005d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1006d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1007d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10082e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1009d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1010d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
1011bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramFragment(con, (RsProgramFragment)pf);
1012d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1013d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
10140826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
10152e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
10160826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
10170826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
1018bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramVertex(con, (RsProgramVertex)pf);
10190826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
10200826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1021d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
10222e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1023ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1024ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1025ebfb436a49673693b98469683451bd9ede797557Jason Sams    rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1026ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1027ebfb436a49673693b98469683451bd9ede797557Jason Sams
1028d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
102902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
103002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
103102fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic void
10322e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
103302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
103402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    LOG_API("nSamplerBegin, con(%p)", con);
1035bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsSamplerBegin(con);
103602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
103702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
103802fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic void
10392e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
104002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
104102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
1042bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
104302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
104402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1045f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchoukstatic void
1046f5b3510c706ed1f7611760dff0c94f2111531c68Alex SakhartchouknSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1047f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk{
1048f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1049f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    rsSamplerSet2(con, (RsSamplerParam)p, v);
1050f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk}
1051f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk
105202fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic jint
10532e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
105402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
1055bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    LOG_API("nSamplerCreate, con(%p)", con);
1056bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    return (jint)rsSamplerCreate(con);
105702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
105802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1059bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1060bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
10611bada8cd6e4f340de93cff4a2439835fc3b1456cJason Samsstatic jint
10622e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
1063164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
1064164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1065164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1066164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    return id;
1067164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1068164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1069164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void
10702e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
1071164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
107280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
107380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1074164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1075164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1076164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void
10772e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
1078164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
107980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
108080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
108180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
108280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
10839d71e2180062931416092f26276a07e55b318f62Alex Sakhartchoukstatic void
10849d71e2180062931416092f26276a07e55b318f62Alex SakhartchouknMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
10859d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk{
10869d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
10879d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    rsMeshInitVertexAttribs(con, (RsMesh)mesh);
10889d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
10899d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
10909d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
109180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
10922e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
109380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
109480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
109580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1096581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
109780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
109880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
109980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
110080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
11012e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
110280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
110380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
110480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1105581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
110680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
110780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
110880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
110980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
11102e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
111180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
111280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
111380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
111480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1115581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
111680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
111780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
111880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
111980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
112080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
112180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
112280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
112380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
112480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
11252e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
112680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
112780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
112880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
112980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
113080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
113180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1132581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
113380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
113480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
113580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
113680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
113780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
113880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
113980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
114080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1141164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1142164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1143164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1144164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1145d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
114694d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1147d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1148d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
11491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
11501c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
11511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceCreate",                  "()I",                                     (void*)nDeviceCreate },
11521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceDestroy",                 "(I)V",                                    (void*)nDeviceDestroy },
11531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceSetConfig",               "(III)V",                                  (void*)nDeviceSetConfig },
11541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetUserMessage",         "(I[I)V",                                  (void*)nContextGetUserMessage },
11551c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetErrorMessage",        "(I)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
11561c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextPeekMessage",            "(I[IZ)I",                                 (void*)nContextPeekMessage },
11571c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
11581c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextInitToClient",           "(I)V",                                    (void*)nContextInitToClient },
11591c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextDeinitToClient",         "(I)V",                                    (void*)nContextDeinitToClient },
11602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
1163b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextCreate",                 "(II)I",                                 (void*)nContextCreate },
11642c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk{"rsnContextCreateGL",               "(IIIIIIIIIIIIFI)I",                     (void*)nContextCreateGL },
11652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextFinish",                 "(I)V",                                  (void*)nContextFinish },
11662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetPriority",            "(II)V",                                 (void*)nContextSetPriority },
11672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetSurface",             "(IIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1168b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextDestroy",                "(I)V",                                  (void*)nContextDestroy },
11692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
11702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextPause",                  "(I)V",                                  (void*)nContextPause },
11712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextResume",                 "(I)V",                                  (void*)nContextResume },
11722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAssignName",                    "(II[B)V",                               (void*)nAssignName },
1173b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnGetName",                       "(II)Ljava/lang/String;",                (void*)nGetName },
11742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnObjDestroy",                    "(II)V",                                 (void*)nObjDestroy },
11752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1176b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFileA3DCreateFromFile",         "(ILjava/lang/String;)I",                (void*)nFileA3DCreateFromFile },
11772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DCreateFromAssetStream",  "(II)I",                                 (void*)nFileA3DCreateFromAssetStream },
1178b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFileA3DCreateFromAsset",        "(ILandroid/content/res/AssetManager;Ljava/lang/String;)I",            (void*)nFileA3DCreateFromAsset },
11792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetNumIndexEntries",     "(II)I",                                 (void*)nFileA3DGetNumIndexEntries },
1180b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnFileA3DGetIndexEntries",        "(III[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
11812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetEntryByIndex",        "(III)I",                                (void*)nFileA3DGetEntryByIndex },
11822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1183e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk{"rsnFontCreateFromFile",            "(ILjava/lang/String;FI)I",              (void*)nFontCreateFromFile },
1184b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFontCreateFromAssetStream",     "(ILjava/lang/String;FII)I",             (void*)nFontCreateFromAssetStream },
1185b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFontCreateFromAsset",        "(ILandroid/content/res/AssetManager;Ljava/lang/String;FI)I",            (void*)nFontCreateFromAsset },
11862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementCreate",                 "(IIIZI)I",                              (void*)nElementCreate },
118870d4e5024298f71edb3b04867e05568f5495b4ceJason Sams{"rsnElementCreate2",                "(I[I[Ljava/lang/String;[I)I",           (void*)nElementCreate2 },
11892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementGetNativeData",          "(II[I)V",                               (void*)nElementGetNativeData },
1190b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnElementGetSubElements",         "(II[I[Ljava/lang/String;)V",            (void*)nElementGetSubElements },
11912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1192bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams{"rsnTypeCreate",                    "(IIIIIZZ)I",                            (void*)nTypeCreate },
1193b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnTypeGetNativeData",             "(II[I)V",                               (void*)nTypeGetNativeData },
11942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1195d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams{"rsnAllocationCreateTyped",         "(IIII)I",                               (void*)nAllocationCreateTyped },
11965476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCreateFromBitmap",    "(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCreateFromBitmap },
11975476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCubeCreateFromBitmap },
11985476b450e50939940dcf3f15c92335cee2fc572dJason Sams
11994ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyFromBitmap",      "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
12004ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyToBitmap",        "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
12014ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
12025476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationSyncAll",             "(III)V",                                (void*)nAllocationSyncAll },
120349a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[II)V",                           (void*)nAllocationData1D_i },
120449a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[SI)V",                           (void*)nAllocationData1D_s },
120549a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[BI)V",                           (void*)nAllocationData1D_b },
120649a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[FI)V",                           (void*)nAllocationData1D_f },
120749a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationElementData1D",       "(IIIII[BI)V",                           (void*)nAllocationElementData1D },
120849a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[II)V",                        (void*)nAllocationData2D_i },
1209fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[SI)V",                        (void*)nAllocationData2D_s },
1210fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[BI)V",                        (void*)nAllocationData2D_b },
121149a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[FI)V",                        (void*)nAllocationData2D_f },
12122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[I)V",                               (void*)nAllocationRead_i },
1213fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationRead",                "(II[S)V",                               (void*)nAllocationRead_s },
1214fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationRead",                "(II[B)V",                               (void*)nAllocationRead_b },
12152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[F)V",                               (void*)nAllocationRead_f },
12162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationGetType",             "(II)I",                                 (void*)nAllocationGetType},
12175edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize1D",            "(III)V",                                (void*)nAllocationResize1D },
12185edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize2D",            "(IIII)V",                               (void*)nAllocationResize2D },
1219f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{"rsnAllocationGenerateMipmaps",     "(II)V",                                 (void*)nAllocationGenerateMipmaps },
12202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptBindAllocation",          "(IIII)V",                               (void*)nScriptBindAllocation },
12222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetTimeZone",             "(II[B)V",                               (void*)nScriptSetTimeZone },
12232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvoke",                  "(III)V",                                (void*)nScriptInvoke },
12242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvokeV",                 "(III[B)V",                              (void*)nScriptInvokeV },
12252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarI",                 "(IIII)V",                               (void*)nScriptSetVarI },
1226031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{"rsnScriptSetVarJ",                 "(IIIJ)V",                               (void*)nScriptSetVarJ },
12272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarF",                 "(IIIF)V",                               (void*)nScriptSetVarF },
1228ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{"rsnScriptSetVarD",                 "(IIID)V",                               (void*)nScriptSetVarD },
12292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarV",                 "(III[B)V",                              (void*)nScriptSetVarV },
12306f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{"rsnScriptSetVarObj",               "(IIII)V",                               (void*)nScriptSetVarObj },
12312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1232e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams{"rsnScriptCCreate",                 "(ILjava/lang/String;Ljava/lang/String;[BI)I",  (void*)nScriptCCreate },
12332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1234331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams{"rsnProgramStoreCreate",            "(IZZZZZZIII)I",                         (void*)nProgramStoreCreate },
12352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindConstants",          "(IIII)V",                               (void*)nProgramBindConstants },
12372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindTexture",            "(IIII)V",                               (void*)nProgramBindTexture },
12382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindSampler",            "(IIII)V",                               (void*)nProgramBindSampler },
12392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
124049a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnProgramFragmentCreate",         "(ILjava/lang/String;[I)I",              (void*)nProgramFragmentCreate },
1241331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams{"rsnProgramRasterCreate",           "(IZZZFI)I",                             (void*)nProgramRasterCreate },
124249a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnProgramVertexCreate",           "(ILjava/lang/String;[I)I",              (void*)nProgramVertexCreate },
12432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindRootScript",         "(II)V",                                 (void*)nContextBindRootScript },
1245b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextBindProgramStore",       "(II)V",                                 (void*)nContextBindProgramStore },
12462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramFragment",    "(II)V",                                 (void*)nContextBindProgramFragment },
12472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramVertex",      "(II)V",                                 (void*)nContextBindProgramVertex },
12482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramRaster",      "(II)V",                                 (void*)nContextBindProgramRaster },
12492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerBegin",                  "(I)V",                                  (void*)nSamplerBegin },
12512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerSet",                    "(III)V",                                (void*)nSamplerSet },
1252f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk{"rsnSamplerSet2",                   "(IIF)V",                                (void*)nSamplerSet2 },
12532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerCreate",                 "(I)I",                                  (void*)nSamplerCreate },
12542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshCreate",                    "(III)I",                                (void*)nMeshCreate },
12562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshBindVertex",                "(IIII)V",                               (void*)nMeshBindVertex },
12572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshBindIndex",                 "(IIIII)V",                              (void*)nMeshBindIndex },
12589d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk{"rsnMeshInitVertexAttribs",         "(II)V",                                 (void*)nMeshInitVertexAttribs },
12592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetVertexBufferCount",      "(II)I",                                 (void*)nMeshGetVertexBufferCount },
12612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndexCount",             "(II)I",                                 (void*)nMeshGetIndexCount },
1262b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnMeshGetVertices",               "(II[II)V",                              (void*)nMeshGetVertices },
12632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndices",                "(II[I[II)V",                            (void*)nMeshGetIndices },
126480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1265d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1266d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1267d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1268d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1269d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1270d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1271d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1272d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1273d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1274d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1275d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1276d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1277d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    JNIEnv* env = NULL;
1278d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1279d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1280d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1281d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: GetEnv failed\n");
1282d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1283d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1284d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    assert(env != NULL);
1285d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1286d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
1287d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: MediaPlayer native registration failed\n");
1288d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1289d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1290d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1291d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1292d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1293d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1294d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1295d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1296d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1297