android_renderscript_RenderScript.cpp revision 67f2e442a31b8395e3c1951f8e91139ec7f2be99
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>
35650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <utils/ResourceTypes.h>
36f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h"
38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h"
39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h"
40ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h"
41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
42e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams#include <RenderScript.h>
43e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams#include <RenderScriptEnv.h>
44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
45d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams//#define LOG_API LOGE
46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define LOG_API(...)
47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
48d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
52d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
53d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
54d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jclass npeClazz = env->FindClass(exc);
55d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    env->ThrowNew(npeClazz, msg);
56d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
57d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
58ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
59ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
6043ee06857bb7f99446d1d84f8789016c5d105558Jason Samsstatic jfieldID gTypeNativeCache = 0;
61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
62ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Samsstatic RsElement g_A_8 = NULL;
63ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Samsstatic RsElement g_RGBA_4444 = NULL;
64ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Samsstatic RsElement g_RGBA_8888 = NULL;
65ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Samsstatic RsElement g_RGB_565 = NULL;
66ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams
67d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
68d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
69d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    gContextId             = _env->GetFieldID(_this, "mContext", "I");
70ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
71ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
72ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
75ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Samsstatic void nInitElements(JNIEnv *_env, jobject _this, jint a8, jint rgba4444, jint rgba8888, jint rgb565)
76ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams{
77ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    g_A_8 = reinterpret_cast<RsElement>(a8);
78ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    g_RGBA_4444 = reinterpret_cast<RsElement>(rgba4444);
79ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    g_RGBA_8888 = reinterpret_cast<RsElement>(rgba8888);
80ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    g_RGB_565 = reinterpret_cast<RsElement>(rgb565);
81ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams}
82d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
83d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
84d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
853eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
862e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextFinish(JNIEnv *_env, jobject _this, RsContext con)
8796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
8896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    LOG_API("nContextFinish, con(%p)", con);
8996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    rsContextFinish(con);
9096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
9196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
9296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
932e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
943eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
9507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
963eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
973eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
98bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAssignName(con, (void *)obj, (const char *)cptr, len);
993eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
1003eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
1013eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
102fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
1032e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
104fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
105fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
106fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    const char *name = NULL;
107581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaGetName(con, (void *)obj, &name);
108581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    if(name == NULL || strlen(name) == 0) {
109581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk        return NULL;
110581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
111fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
112fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
113fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
1147ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
1152e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
1167ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
1177ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams    LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
1189c25aee52672f9c8908e062bde502341c189970eJason Sams    rsObjDestroy(con, (void *)obj);
1197ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
1207ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
1213eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
1223eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
123d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
124d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
125d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
127d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return (jint)rsDeviceCreate();
128d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
129d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
130d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
131d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
132d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
133d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
134d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
135d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
137ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
138ebfb436a49673693b98469683451bd9ede797557Jason SamsnDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
139ebfb436a49673693b98469683451bd9ede797557Jason Sams{
140ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
141ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
142ebfb436a49673693b98469683451bd9ede797557Jason Sams}
143ebfb436a49673693b98469683451bd9ede797557Jason Sams
144d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
145704ff64b099406bb328898a7443921f22dbffd6dJason SamsnContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
146d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
147d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
148704ff64b099406bb328898a7443921f22dbffd6dJason Sams    return (jint)rsContextCreate((RsDevice)dev, ver);
149704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
150704ff64b099406bb328898a7443921f22dbffd6dJason Sams
151704ff64b099406bb328898a7443921f22dbffd6dJason Samsstatic jint
15211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason SamsnContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
15311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
15411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
15511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
15611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
15711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int samplesMin, int samplesPref, float samplesQ)
15811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
15911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
16011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
16111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
16211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
16311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
16411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
16511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
16611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
16711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
16811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
16911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
170704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
17111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    return (jint)rsContextCreateGL((RsDevice)dev, ver, sc);
172d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
173d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
174d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1752e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
1767d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
1777d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
1787d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    rsContextSetPriority(con, p);
1797d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
1807d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1817d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1827d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1837d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
1842e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
185efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
1863bc47d438171dce294e816366d53bc9eca772c5bJason Sams    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
187efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
188efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    Surface * window = NULL;
189efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    if (wnd == NULL) {
190efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
191efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
192ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller        window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
193efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
194efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
1953bc47d438171dce294e816366d53bc9eca772c5bJason Sams    rsContextSetSurface(con, width, height, window);
196efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
197efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
198efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
1992e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
200d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
2012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    LOG_API("nContextDestroy, con(%p)", con);
2022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    rsContextDestroy(con);
203d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
204d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
205715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
2062e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
207715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
208715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
209715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
210715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
211d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
212d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2132e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextPause(JNIEnv *_env, jobject _this, RsContext con)
21465e7aa56f56097418d617663683544c25b3988eaJason Sams{
21565e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextPause, con(%p)", con);
21665e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextPause(con);
21765e7aa56f56097418d617663683544c25b3988eaJason Sams}
21865e7aa56f56097418d617663683544c25b3988eaJason Sams
21965e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
2202e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextResume(JNIEnv *_env, jobject _this, RsContext con)
22165e7aa56f56097418d617663683544c25b3988eaJason Sams{
22265e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextResume, con(%p)", con);
22365e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextResume(con);
22465e7aa56f56097418d617663683544c25b3988eaJason Sams}
22565e7aa56f56097418d617663683544c25b3988eaJason Sams
2261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2271c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
2281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
2291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextGetErrorMessage, con(%p)", con);
2311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
2321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2351c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextGetMessage(con, buf, &receiveLen, &subID, sizeof(buf), true);
2361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
2371c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
2381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
2391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
2401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic void
2431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
244516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
245516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
246516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
247516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
248516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
2491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2501c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextGetMessage(con, ptr, &receiveLen, &subID, len * 4, true);
251516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
2521d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
253516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
254516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
2551c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2561c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2571c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
2581c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData, jboolean wait)
2591c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextPeekMessage, con(%p)", con);
2611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
2621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2641c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextPeekMessage(con, &receiveLen, &subID, wait);
2651c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
2661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
2671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
268516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    return id;
269516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
270516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
2712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
272516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
273516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextInitToClient, con(%p)", con);
274516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextInitToClient(con);
275516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
276516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
2772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
278516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
279516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextDeinitToClient, con(%p)", con);
280516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextDeinitToClient(con);
281516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
282516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
283516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
284718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
2852e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
286d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
287718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
288718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
289d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
290d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
291718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
29270d4e5024298f71edb3b04867e05568f5495b4ceJason SamsnElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
293d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
294718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
295704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nElementCreate2, con(%p)", con);
296718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
297718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    jint *ids = _env->GetIntArrayElements(_ids, NULL);
29870d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
299718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
300718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
301718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
302718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
303718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
304718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        nameArray[ct] = _env->GetStringUTFChars(s, NULL);
305718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        sizeArray[ct] = _env->GetStringUTFLength(s);
30643ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
30770d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
308718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
309718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
310718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        _env->ReleaseStringUTFChars(s, nameArray[ct]);
31143ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
312718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
31370d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
314718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(nameArray);
315718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(sizeArray);
316718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)id;
317d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
318d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
319dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3202e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
321dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
322dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
323dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetNativeData, con(%p)", con);
324dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
325dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
326dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
327dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
328dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t elementData[5];
329581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
330dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
331dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
332dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
333dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
334dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
335dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
336dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
337dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3382e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
339dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
340dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_IDs);
341dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetSubElements, con(%p)", con);
342dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
343dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
344dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
345dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
346581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
347dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
34811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    for(jint i = 0; i < dataSize; i++) {
349dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
350dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
351dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
352dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
353dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
354dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
355dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
356dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
357d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
358d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
3593b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Samsstatic int
3603b9c52ab8c1ab240d2299358d01a8efbe392d111Jason SamsnTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid, jintArray _dims, jintArray _dimValues)
361d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
3623b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    int count = _env->GetArrayLength(_dims);
3633b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    LOG_API("nTypeCreate, con(%p)", con);
364d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
3653b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    jint *dimPtr = _env->GetIntArrayElements(_dims, NULL);
3663b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    jint *dimValPtr = _env->GetIntArrayElements(_dimValues, NULL);
367d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
3683b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    jint id = (jint)rsaTypeCreate(con, (RsElement)eid, count,
3693b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams                                  (RsDimension *)dimPtr, (uint32_t *)dimValPtr);
3703b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
3713b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    _env->ReleaseIntArrayElements(_dims, dimPtr, JNI_ABORT);
3723b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    _env->ReleaseIntArrayElements(_dimValues, dimValPtr, JNI_ABORT);
3733b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    return (jint)id;
374d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
375d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
376dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3772e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
378dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
379dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
380dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
381dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
382dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
383dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
384dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nTypeCreate, con(%p)", con);
385dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
386dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t typeData[6];
387581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
388dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
389dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
390dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
391dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
392dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
393dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
394d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
395d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
396d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
3972e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint e)
398d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
399d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nAllocationCreateTyped, con(%p), e(%p)", con, (RsElement)e);
40031a7e42f4baa059352f0db119de38428e655eab2Jason Sams    return (jint) rsaAllocationCreateTyped(con, (RsElement)e);
401d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
402d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
403d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
4042e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationUploadToTexture(JNIEnv *_env, jobject _this, RsContext con, jint a, jboolean genMip, jint mip)
405d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
406c2908e60c9b021fb4bb69acff8d49981dd4dade8Jason Sams    LOG_API("nAllocationUploadToTexture, con(%p), a(%p), genMip(%i), mip(%i)", con, (RsAllocation)a, genMip, mip);
407c2908e60c9b021fb4bb69acff8d49981dd4dade8Jason Sams    rsAllocationUploadToTexture(con, (RsAllocation)a, genMip, mip);
408d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
409d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
41007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Samsstatic void
4112e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, RsContext con, jint a)
41207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams{
41307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
41407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    rsAllocationUploadToBufferObject(con, (RsAllocation)a);
41507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams}
41607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
417ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Samsstatic RsElement SkBitmapToPredefined(SkBitmap::Config cfg)
418ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams{
419ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    switch (cfg) {
420ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    case SkBitmap::kA8_Config:
421ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        return g_A_8;
422ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    case SkBitmap::kARGB_4444_Config:
423ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        return g_RGBA_4444;
424ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    case SkBitmap::kARGB_8888_Config:
425ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        return g_RGBA_8888;
426ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    case SkBitmap::kRGB_565_Config:
427ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        return g_RGB_565;
428ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
429ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    default:
430ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams        break;
431ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    }
432ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    // If we don't have a conversion mark it as a user type.
433ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    LOGE("Unsupported bitmap type");
434ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    return NULL;
435ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
436ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
437fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Samsstatic int
4382e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
439fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
440ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
441ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
442ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
443ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap::Config config = bitmap.getConfig();
444fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
445ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    RsElement e = SkBitmapToPredefined(config);
446ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    if (e) {
447ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams        bitmap.lockPixels();
448ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams        const int w = bitmap.width();
449ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams        const int h = bitmap.height();
450ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams        const void* ptr = bitmap.getPixels();
45131a7e42f4baa059352f0db119de38428e655eab2Jason Sams        jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
452ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams        bitmap.unlockPixels();
453ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams        return id;
454ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    }
455ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    return 0;
456ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
457fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
45867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchoukstatic int
45967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex SakhartchouknAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
46067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
46167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
46267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
46367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
46467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap::Config config = bitmap.getConfig();
46567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
46667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    RsElement e = SkBitmapToPredefined(config);
46767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    if (e) {
46867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk        bitmap.lockPixels();
46967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk        const int w = bitmap.width();
47067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk        const int h = bitmap.height();
47167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk        const void* ptr = bitmap.getPixels();
47267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk        jint id = (jint)rsaAllocationCubeCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
47367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk        bitmap.unlockPixels();
47467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk        return id;
47567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    }
47667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    return 0;
47767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
47867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
47926ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
48026ae3904e8050eae655722caf93ee5d3f0ab195aAlex SakhartchouknAllocationUpdateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
48126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
48226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
48326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
48426ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
48526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap::Config config = bitmap.getConfig();
48626ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
48726ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    RsElement e = SkBitmapToPredefined(config);
48826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    if (e) {
48926ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk        bitmap.lockPixels();
49026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk        const void* ptr = bitmap.getPixels();
49126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk        rsAllocationUpdateFromBitmap(con, (RsAllocation)alloc, e, ptr);
49226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk        bitmap.unlockPixels();
49326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    }
49426ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk}
49526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
4968a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
4978a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
4988a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
4998a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams    nativeBitmap->unlockPixels();
5008a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
5018a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
5028a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Samsstatic int
5032e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationCreateBitmapRef(JNIEnv *_env, jobject _this, RsContext con, jint type, jobject jbitmap)
5048a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
5058a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams    SkBitmap * nativeBitmap =
5068a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams            (SkBitmap *)_env->GetIntField(jbitmap, gNativeBitmapID);
5078a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
5088a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
5098a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams    nativeBitmap->lockPixels();
5108a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams    void* ptr = nativeBitmap->getPixels();
5118a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams    jint id = (jint)rsAllocationCreateBitmapRef(con, (RsType)type, ptr, nativeBitmap, ReleaseBitmapCallback);
5128a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams    return id;
5138a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
5148a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
515b0ec1b46d6f5b5612e33fe43a828abea79b87a00Jason Samsstatic int
5162e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jint native_asset)
517650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
518650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    Asset* asset = reinterpret_cast<Asset*>(native_asset);
519650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    SkBitmap bitmap;
520650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
521650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy            &bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
522650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
523650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    SkBitmap::Config config = bitmap.getConfig();
524650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
525ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    RsElement e = SkBitmapToPredefined(config);
526650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
527ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    if (e) {
528650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy        bitmap.lockPixels();
529650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy        const int w = bitmap.width();
530650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy        const int h = bitmap.height();
531650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy        const void* ptr = bitmap.getPixels();
53231a7e42f4baa059352f0db119de38428e655eab2Jason Sams        jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
533650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy        bitmap.unlockPixels();
534650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy        return id;
535650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    }
536650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    return 0;
537650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
538650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
539d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
5402e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
541d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
542d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
543768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    LOG_API("nAllocation1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
544d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
545768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
546d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
547d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
548d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
549d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
5502e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationSubData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jshortArray data, int sizeBytes)
551d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
552d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
553768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    LOG_API("nAllocation1DSubData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
554768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
555768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
556768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
557d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
558d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
559d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
5602e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationSubData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jbyteArray data, int sizeBytes)
561d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
562d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
563768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    LOG_API("nAllocation1DSubData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
564768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
56507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
566768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
567d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
568d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
569d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
5702e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationSubData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
571d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
572d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
573768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    LOG_API("nAllocation1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
574d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
57507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
576d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
577d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
578d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
579d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
58049bdaf0293408159df18a1d8540360f9623c40f7Jason Sams//    native void rsnAllocationSubElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
58149bdaf0293408159df18a1d8540360f9623c40f7Jason SamsnAllocationSubElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint compIdx, jbyteArray data, int sizeBytes)
58249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
58349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
58449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    LOG_API("nAllocationSubElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
58549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
58649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    rsAllocation1DSubElementData(con, (RsAllocation)alloc, offset, ptr, compIdx, sizeBytes);
58749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
58849bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
58949bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
59049bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
5912e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationSubData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint w, jint h, jintArray data, int sizeBytes)
592d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
593d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
594d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nAllocation2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
595d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
59607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
597d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
598d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
599d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
600d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
6012e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationSubData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint w, jint h, jfloatArray data, int sizeBytes)
602d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
603d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
604d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nAllocation2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
605d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
60607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
607d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
608d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
609d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
61040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
6112e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
61240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
61340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
61440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
61540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
616bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAllocationRead(con, (RsAllocation)alloc, ptr);
617ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseIntArrayElements(data, ptr, 0);
61840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
61940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
62040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
6212e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
62240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
62340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
624a8f2acee39aae94f9d7148f775ca8e35344da4b4Joe Onorato    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
62540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
626bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAllocationRead(con, (RsAllocation)alloc, ptr);
627ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseFloatArrayElements(data, ptr, 0);
62840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
629d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
630dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic jint
6312e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
632dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
633dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
634581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    return (jint) rsaAllocationGetType(con, (RsAllocation)a);
635dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
636dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
6375edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
6385edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
6395edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
6405edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
6415edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
6425edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
6435edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
6445edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
6455edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
6465edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
6475edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
6485edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
6495edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
6505edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
651aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
652aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
653aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
6542e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
655aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
656aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) native_asset);
657aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
658aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
659aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
660581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
661aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
662aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
663aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
664aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
6652e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
666aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
667aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
668581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
669aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return numEntries;
670aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
671aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
672aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
6732e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
674aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
675aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
676aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
677aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
678581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
679aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
680aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
681aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
682aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
683aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
684aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
685aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
686aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
687aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
688aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
6892e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
690aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
691aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
692581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
693aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
694aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
695d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
696d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
697d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
6989b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic int
6992e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jint fontSize, jint dpi)
7009b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
7019b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
7029b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
7039b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
7049b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
7059b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
7069b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
7079b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
7089b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk// -----------------------------------
7099b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
710d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7112e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter1DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
712d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
713d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
714bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
715d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
716d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
717d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7182e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter1DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
719d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
720d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
721bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
722d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
723d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
724d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7252e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter1DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
726d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
727d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
728d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
729d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
730bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
731d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
732d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
733d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
734d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7352e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter1DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jintArray data)
736d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
737d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
738d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
739d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
740bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
741d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
742d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
743d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
744d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7452e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter1DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
746d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
747d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
748d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
749d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
750bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
751d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
752d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
753d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
754d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7552e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter1DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jfloatArray data)
756d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
757d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
758d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
759d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
760bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
761d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
762d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
763d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
764d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
7652e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter1DCreate(JNIEnv *_env, jobject _this, RsContext con)
766d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
767d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nAdapter1DCreate, con(%p)", con);
768bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    return (jint)rsAdapter1DCreate(con);
769d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
770d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
771d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
772d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
773d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7742e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter2DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
775bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams{
776bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
777bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
778bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams}
779bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
780bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
7812e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter2DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
782bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams{
783bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
784bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
785bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams}
786bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
787bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
7882e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter2DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
789bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams{
790bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    jint len = _env->GetArrayLength(data);
791bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
792bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
793bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
794bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
795bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams}
796bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
797bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
7982e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter2DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
799bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams{
800bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    jint len = _env->GetArrayLength(data);
801bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
802bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
803bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
804bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
805bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams}
806bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
807bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
8082e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter2DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint xoff, jint yoff, jint w, jint h, jintArray data)
809bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams{
810bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    jint len = _env->GetArrayLength(data);
811bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
812bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams            con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
813bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
814bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
815bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
816bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams}
817bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
818bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
8192e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter2DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint xoff, jint yoff, jint w, jint h, jfloatArray data)
820bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams{
821bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    jint len = _env->GetArrayLength(data);
822bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
823bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams            con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
824bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
825bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
826bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
827bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams}
828bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
829bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic jint
8302e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAdapter2DCreate(JNIEnv *_env, jobject _this, RsContext con)
831bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams{
832bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    LOG_API("nAdapter2DCreate, con(%p)", con);
833bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    return (jint)rsAdapter2DCreate(con);
834bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams}
835bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
836bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
837bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
838bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
8392e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
840d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
841d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
842bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
843d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
844d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
845d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8462e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
8474d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
848cfc04366998cd0c626594c9cf70336a11bdf5996Jason Sams    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
8494d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarI(con, (RsScript)script, slot, val);
8504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8514d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
8524d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
8536f4cf0b8885403ead157ae00fd43cf1282331c23Jason SamsnScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
8546f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
8556f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
8566f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
8576f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
8586f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
8596f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
860031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen HinesnScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
861031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
862031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
863031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    rsScriptSetVarJ(con, (RsScript)script, slot, val);
864031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
865031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
866031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
8672e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
8684d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
869ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
8704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarF(con, (RsScript)script, slot, val);
8714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
8734d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
874ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen HinesnScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
875ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
876ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
877ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    rsScriptSetVarD(con, (RsScript)script, slot, val);
878ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
879ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
880ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
8812e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
8824d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
8834d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
8844d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
8854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
8864d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
8874d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
8884d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8894d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
890d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
891d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8922e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
893584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
89407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
895584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
896584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
897584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
898584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
899584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
900bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
901584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
902584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
903584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
904584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
905584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
906584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
90722534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
9082e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
90922534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
9104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
9114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvoke(con, (RsScript)obj, slot);
91222534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
91322534176fb5c1257130ef4ee589739ca42766a32Jason Sams
914584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
9152e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
916be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
9174d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
9184d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
9194d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
9204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
9214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
922be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
923be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
924d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
925fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
926fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
927d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9282e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
929d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
930fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams    LOG_API("nScriptCBegin, con(%p)", con);
931bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptCBegin(con);
932d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
933d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
934d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9352e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
93643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                  jint offset, jint length)
937d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
938d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("!!! nScriptCSetScript, con(%p)", con);
93943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
94043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
94143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jbyte* script_base = 0;
94243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jbyte* script_ptr;
94343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
94443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
94543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "script == null");
94643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
94743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
94843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (offset < 0) {
94943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
95043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "offset < 0");
95143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
95243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
95343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
95443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
95543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "length < 0");
95643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
95743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
95843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    remaining = _env->GetArrayLength(scriptRef) - offset;
95943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
96043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
96143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "length > script.length - offset");
96243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
96343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
96443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    script_base = (jbyte *)
96543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
96643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    script_ptr = script_base + offset;
96743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
968bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptCSetText(con, (const char *)script_ptr, length);
96939ddc950c9064129ead5de04b200106c0659f937Jason Sams
97043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
97143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (script_base) {
97243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
97343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
97443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
975d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
976d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
977d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
978a914f340ae5b267dc3ab36c1156c795b8fa18f5dShih-wei LiaonScriptCCreate(JNIEnv *_env, jobject _this, RsContext con, jstring resName)
979d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
980d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nScriptCCreate, con(%p)", con);
981a914f340ae5b267dc3ab36c1156c795b8fa18f5dShih-wei Liao    const char* resNameUTF = _env->GetStringUTFChars(resName, NULL);
982a914f340ae5b267dc3ab36c1156c795b8fa18f5dShih-wei Liao    return (jint)rsScriptCCreate(con, resNameUTF);
983d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
984d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
985d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
986d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
987d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9882e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
989d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
99054db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
99154db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
992d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
993d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
994d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9952e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
996d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
99754db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
99854db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
999d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1000d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1001d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10022e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
1003d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
100454db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
100554db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreDepthMask(con, enable);
1006d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1007d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1008d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10092e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
1010d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
101154db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
101254db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreColorMask(con, r, g, b, a);
1013d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1014d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1015d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10162e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
1017d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
101854db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
101954db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
1020d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1021d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1022d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10232e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
1024d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
102554db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
102654db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreDither(con, enable);
1027d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1028d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1029d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
10302e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
1031d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
103254db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreCreate, con(%p)", con);
103354db59c3594e887a412a24713fc3daa1c2404593Jason Sams    return (jint)rsProgramStoreCreate(con);
1034d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1035d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
10360011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
10370011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
10380011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
10392e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
10400011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
10410011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
10420011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
10430011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
104454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
1045d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10462e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
104754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
104868afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
104968afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
105054c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
105154c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
105254c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
10532e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
1054d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
105568afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
105668afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1057d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1058d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
105968afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
1060d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
106168afd01ec9fd37774d8291192952a25e5605b6fbJason Samsstatic jint
1062b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
10637e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
10647e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
10657e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint shaderLen = _env->GetStringUTFLength(shader);
10667e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
10677e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
10687e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
1069b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
10707e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
1071b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
10727e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    _env->ReleaseStringUTFChars(shader, shaderUTF);
10737e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
10747e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
10757e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
10767e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
10777e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
10781fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
10791fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
10800011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic jint
1081b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
10821fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
10830011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
10840011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint shaderLen = _env->GetStringUTFLength(shader);
10850011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
10860011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
10871fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1088b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
1089ee41112e1539de95596600fd2c6dada5d275217fJason Sams
1090b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
10910011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    _env->ReleaseStringUTFChars(shader, shaderUTF);
10920011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
10930011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
10941fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
10951fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1096ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1097ebfb436a49673693b98469683451bd9ede797557Jason Sams
1098ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic jint
10992e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
1100ebfb436a49673693b98469683451bd9ede797557Jason Sams{
110180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
110280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            con, pointSmooth, lineSmooth, pointSprite);
110380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
1104ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1105ebfb436a49673693b98469683451bd9ede797557Jason Sams
1106ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
11072e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
1108ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1109ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
111080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
111180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
111280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
111380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
11142e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
111580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
111680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
111780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
1118ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1119ebfb436a49673693b98469683451bd9ede797557Jason Sams
1120d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1121d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1122d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1123d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
11242e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
1125d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
1127bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindRootScript(con, (RsScript)script);
1128d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1129d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1130d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
11312e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
1132d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
113354db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
113454db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsContextBindProgramStore(con, (RsProgramStore)pfs);
1135d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1137d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
11382e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1139d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1140d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
1141bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramFragment(con, (RsProgramFragment)pf);
1142d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1143d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
11440826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
11452e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
11460826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
11470826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
1148bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramVertex(con, (RsProgramVertex)pf);
11490826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
11500826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1151d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
11522e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1153ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1154ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1155ebfb436a49673693b98469683451bd9ede797557Jason Sams    rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1156ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1157ebfb436a49673693b98469683451bd9ede797557Jason Sams
1158d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
115902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
116002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
116102fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic void
11622e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
116302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
116402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    LOG_API("nSamplerBegin, con(%p)", con);
1165bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsSamplerBegin(con);
116602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
116702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
116802fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic void
11692e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
117002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
117102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
1172bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
117302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
117402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1175f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchoukstatic void
1176f5b3510c706ed1f7611760dff0c94f2111531c68Alex SakhartchouknSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1177f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk{
1178f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1179f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    rsSamplerSet2(con, (RsSamplerParam)p, v);
1180f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk}
1181f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk
118202fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic jint
11832e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
118402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
1185bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    LOG_API("nSamplerCreate, con(%p)", con);
1186bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    return (jint)rsSamplerCreate(con);
118702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
118802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1189bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1190bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
11911bada8cd6e4f340de93cff4a2439835fc3b1456cJason Samsstatic jint
11922e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
1193164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
1194164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1195164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1196164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    return id;
1197164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1198164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1199164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void
12002e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
1201164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
120280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
120380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1204164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1205164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1206164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void
12072e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
1208164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
120980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
121080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
121180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
121280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
12139d71e2180062931416092f26276a07e55b318f62Alex Sakhartchoukstatic void
12149d71e2180062931416092f26276a07e55b318f62Alex SakhartchouknMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
12159d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk{
12169d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
12179d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    rsMeshInitVertexAttribs(con, (RsMesh)mesh);
12189d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
12199d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
12209d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
122180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
12222e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
122380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
122480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
122580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1226581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
122780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
122880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
122980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
123080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
12312e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
123280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
123380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
123480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1235581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
123680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
123780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
123880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
123980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
12402e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
124180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
124280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
124380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
124480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1245581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
124680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
124780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
124880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
124980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
125080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
125180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
125280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
125380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
125480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
12552e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
125680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
125780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
125880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
125980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
126080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
126180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1262581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
126380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
126480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
126580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
126680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
126780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
126880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
126980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
127080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1271164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1272164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1273164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1274164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1275d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
127694d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1277d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1278d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
12791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
12801c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nInitElements",                  "(IIII)V",                                 (void*)nInitElements },
12811c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
12821c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceCreate",                  "()I",                                     (void*)nDeviceCreate },
12831c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceDestroy",                 "(I)V",                                    (void*)nDeviceDestroy },
12841c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceSetConfig",               "(III)V",                                  (void*)nDeviceSetConfig },
12851c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetUserMessage",         "(I[I)V",                                  (void*)nContextGetUserMessage },
12861c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetErrorMessage",        "(I)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
12871c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextPeekMessage",            "(I[IZ)I",                                 (void*)nContextPeekMessage },
12881c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
12891c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextInitToClient",           "(I)V",                                    (void*)nContextInitToClient },
12901c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextDeinitToClient",         "(I)V",                                    (void*)nContextDeinitToClient },
12912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
1294b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextCreate",                 "(II)I",                                 (void*)nContextCreate },
129511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{"rsnContextCreateGL",               "(IIIIIIIIIIIIF)I",                      (void*)nContextCreateGL },
12962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextFinish",                 "(I)V",                                  (void*)nContextFinish },
12972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetPriority",            "(II)V",                                 (void*)nContextSetPriority },
12982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetSurface",             "(IIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1299b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextDestroy",                "(I)V",                                  (void*)nContextDestroy },
13002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
13012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextPause",                  "(I)V",                                  (void*)nContextPause },
13022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextResume",                 "(I)V",                                  (void*)nContextResume },
13032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAssignName",                    "(II[B)V",                               (void*)nAssignName },
1304b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnGetName",                       "(II)Ljava/lang/String;",                (void*)nGetName },
13052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnObjDestroy",                    "(II)V",                                 (void*)nObjDestroy },
13062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DCreateFromAssetStream",  "(II)I",                                 (void*)nFileA3DCreateFromAssetStream },
13082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetNumIndexEntries",     "(II)I",                                 (void*)nFileA3DGetNumIndexEntries },
1309b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnFileA3DGetIndexEntries",        "(III[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
13102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetEntryByIndex",        "(III)I",                                (void*)nFileA3DGetEntryByIndex },
13112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1312b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnFontCreateFromFile",            "(ILjava/lang/String;II)I",              (void*)nFontCreateFromFile },
13132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementCreate",                 "(IIIZI)I",                              (void*)nElementCreate },
131570d4e5024298f71edb3b04867e05568f5495b4ceJason Sams{"rsnElementCreate2",                "(I[I[Ljava/lang/String;[I)I",           (void*)nElementCreate2 },
13162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementGetNativeData",          "(II[I)V",                               (void*)nElementGetNativeData },
1317b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnElementGetSubElements",         "(II[I[Ljava/lang/String;)V",            (void*)nElementGetSubElements },
13182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13193b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams{"rsnTypeCreate",                    "(II[I[I)I",                             (void*)nTypeCreate },
1320b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnTypeGetNativeData",             "(II[I)V",                               (void*)nTypeGetNativeData },
13212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationCreateTyped",         "(II)I",                                 (void*)nAllocationCreateTyped },
132326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{"rsnAllocationUpdateFromBitmap",    "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationUpdateFromBitmap },
13242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationCreateFromBitmap",    "(IIZLandroid/graphics/Bitmap;)I",       (void*)nAllocationCreateFromBitmap },
132567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{"rsnAllocationCubeCreateFromBitmap","(IIZLandroid/graphics/Bitmap;)I",       (void*)nAllocationCubeCreateFromBitmap },
13262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationCreateBitmapRef",     "(IILandroid/graphics/Bitmap;)I",        (void*)nAllocationCreateBitmapRef },
13272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationCreateFromAssetStream","(IIZI)I",                              (void*)nAllocationCreateFromAssetStream },
13282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationUploadToTexture",     "(IIZI)V",                               (void*)nAllocationUploadToTexture },
13292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationUploadToBufferObject","(II)V",                                 (void*)nAllocationUploadToBufferObject },
13302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationSubData1D",           "(IIII[II)V",                            (void*)nAllocationSubData1D_i },
13312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationSubData1D",           "(IIII[SI)V",                            (void*)nAllocationSubData1D_s },
13322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationSubData1D",           "(IIII[BI)V",                            (void*)nAllocationSubData1D_b },
13332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationSubData1D",           "(IIII[FI)V",                            (void*)nAllocationSubData1D_f },
133449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{"rsnAllocationSubElementData1D",    "(IIII[BI)V",                            (void*)nAllocationSubElementData1D },
13352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationSubData2D",           "(IIIIII[II)V",                          (void*)nAllocationSubData2D_i },
13362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationSubData2D",           "(IIIIII[FI)V",                          (void*)nAllocationSubData2D_f },
13372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[I)V",                               (void*)nAllocationRead_i },
13382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[F)V",                               (void*)nAllocationRead_f },
13392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationGetType",             "(II)I",                                 (void*)nAllocationGetType},
13405edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize1D",            "(III)V",                                (void*)nAllocationResize1D },
13415edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize2D",            "(IIII)V",                               (void*)nAllocationResize2D },
13422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter1DBindAllocation",       "(III)V",                                (void*)nAdapter1DBindAllocation },
13442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter1DSetConstraint",        "(IIII)V",                               (void*)nAdapter1DSetConstraint },
13452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter1DData",                 "(II[I)V",                               (void*)nAdapter1DData_i },
13462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter1DData",                 "(II[F)V",                               (void*)nAdapter1DData_f },
13472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter1DSubData",              "(IIII[I)V",                             (void*)nAdapter1DSubData_i },
13482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter1DSubData",              "(IIII[F)V",                             (void*)nAdapter1DSubData_f },
13492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter1DCreate",               "(I)I",                                  (void*)nAdapter1DCreate },
13502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter2DBindAllocation",       "(III)V",                                (void*)nAdapter2DBindAllocation },
13522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter2DSetConstraint",        "(IIII)V",                               (void*)nAdapter2DSetConstraint },
13532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter2DData",                 "(II[I)V",                               (void*)nAdapter2DData_i },
13542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter2DData",                 "(II[F)V",                               (void*)nAdapter2DData_f },
13552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter2DSubData",              "(IIIIII[I)V",                           (void*)nAdapter2DSubData_i },
13562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter2DSubData",              "(IIIIII[F)V",                           (void*)nAdapter2DSubData_f },
13572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAdapter2DCreate",               "(I)I",                                  (void*)nAdapter2DCreate },
13582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptBindAllocation",          "(IIII)V",                               (void*)nScriptBindAllocation },
13602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetTimeZone",             "(II[B)V",                               (void*)nScriptSetTimeZone },
13612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvoke",                  "(III)V",                                (void*)nScriptInvoke },
13622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvokeV",                 "(III[B)V",                              (void*)nScriptInvokeV },
13632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarI",                 "(IIII)V",                               (void*)nScriptSetVarI },
1364031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{"rsnScriptSetVarJ",                 "(IIIJ)V",                               (void*)nScriptSetVarJ },
13652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarF",                 "(IIIF)V",                               (void*)nScriptSetVarF },
1366ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{"rsnScriptSetVarD",                 "(IIID)V",                               (void*)nScriptSetVarD },
13672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarV",                 "(III[B)V",                              (void*)nScriptSetVarV },
13686f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{"rsnScriptSetVarObj",               "(IIII)V",                               (void*)nScriptSetVarObj },
13692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptCBegin",                  "(I)V",                                  (void*)nScriptCBegin },
13712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptCSetScript",              "(I[BII)V",                              (void*)nScriptCSetScript },
1372a914f340ae5b267dc3ab36c1156c795b8fa18f5dShih-wei Liao{"rsnScriptCCreate",                 "(ILjava/lang/String;)I",                (void*)nScriptCCreate },
13732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreBegin",             "(III)V",                                (void*)nProgramStoreBegin },
13752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreDepthFunc",         "(II)V",                                 (void*)nProgramStoreDepthFunc },
13762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreDepthMask",         "(IZ)V",                                 (void*)nProgramStoreDepthMask },
13772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreColorMask",         "(IZZZZ)V",                              (void*)nProgramStoreColorMask },
13782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreBlendFunc",         "(III)V",                                (void*)nProgramStoreBlendFunc },
13792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreDither",            "(IZ)V",                                 (void*)nProgramStoreDither },
13802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreCreate",            "(I)I",                                  (void*)nProgramStoreCreate },
13812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindConstants",          "(IIII)V",                               (void*)nProgramBindConstants },
13832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindTexture",            "(IIII)V",                               (void*)nProgramBindTexture },
13842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindSampler",            "(IIII)V",                               (void*)nProgramBindSampler },
13852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1386b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnProgramFragmentCreate",        "(ILjava/lang/String;[I)I",               (void*)nProgramFragmentCreate },
13872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1388b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnProgramRasterCreate",           "(IZZZ)I",                               (void*)nProgramRasterCreate },
13892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramRasterSetLineWidth",     "(IIF)V",                                (void*)nProgramRasterSetLineWidth },
13902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramRasterSetCullMode",      "(III)V",                                (void*)nProgramRasterSetCullMode },
13912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1392b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnProgramVertexCreate",          "(ILjava/lang/String;[I)I",               (void*)nProgramVertexCreate },
13932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindRootScript",         "(II)V",                                 (void*)nContextBindRootScript },
1395b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextBindProgramStore",       "(II)V",                                 (void*)nContextBindProgramStore },
13962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramFragment",    "(II)V",                                 (void*)nContextBindProgramFragment },
13972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramVertex",      "(II)V",                                 (void*)nContextBindProgramVertex },
13982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramRaster",      "(II)V",                                 (void*)nContextBindProgramRaster },
13992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
14002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerBegin",                  "(I)V",                                  (void*)nSamplerBegin },
14012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerSet",                    "(III)V",                                (void*)nSamplerSet },
1402f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk{"rsnSamplerSet2",                   "(IIF)V",                                (void*)nSamplerSet2 },
14032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerCreate",                 "(I)I",                                  (void*)nSamplerCreate },
14042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
14052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshCreate",                    "(III)I",                                (void*)nMeshCreate },
14062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshBindVertex",                "(IIII)V",                               (void*)nMeshBindVertex },
14072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshBindIndex",                 "(IIIII)V",                              (void*)nMeshBindIndex },
14089d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk{"rsnMeshInitVertexAttribs",         "(II)V",                                 (void*)nMeshInitVertexAttribs },
14092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
14102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetVertexBufferCount",      "(II)I",                                 (void*)nMeshGetVertexBufferCount },
14112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndexCount",             "(II)I",                                 (void*)nMeshGetIndexCount },
1412b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnMeshGetVertices",               "(II[II)V",                              (void*)nMeshGetVertices },
14132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndices",                "(II[I[II)V",                            (void*)nMeshGetIndices },
141480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1415d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1416d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1417d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1418d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1419d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1420d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1421d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1422d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1423d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1424d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1425d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1426d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1427d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    JNIEnv* env = NULL;
1428d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1429d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1430d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1431d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: GetEnv failed\n");
1432d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1433d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1434d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    assert(env != NULL);
1435d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1436d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
1437d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: MediaPlayer native registration failed\n");
1438d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1439d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1440d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1441d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1442d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1443d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1444d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1445d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1446d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
144780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1448