android_renderscript_RenderScript.cpp revision 49a05d7b82956009f03acbb92a064eed054eb031
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
62d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
63d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    gContextId             = _env->GetFieldID(_this, "mContext", "I");
65ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
66ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
67ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
68d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
69d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
70d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
71d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
723eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
732e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextFinish(JNIEnv *_env, jobject _this, RsContext con)
7496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
7596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    LOG_API("nContextFinish, con(%p)", con);
7696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    rsContextFinish(con);
7796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
7896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
7996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
802e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
813eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
8207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
833eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
843eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
85bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAssignName(con, (void *)obj, (const char *)cptr, len);
863eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
873eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
883eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
89fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
902e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
91fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
92fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
93fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    const char *name = NULL;
94581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaGetName(con, (void *)obj, &name);
95581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    if(name == NULL || strlen(name) == 0) {
96581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk        return NULL;
97581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
98fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
99fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
100fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
1017ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
1022e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
1037ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
1047ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams    LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
1059c25aee52672f9c8908e062bde502341c189970eJason Sams    rsObjDestroy(con, (void *)obj);
1067ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
1077ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
1083eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
1093eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
110d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
111d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
112d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
113d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
114d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return (jint)rsDeviceCreate();
115d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
116d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
117d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
118d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
119d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
120d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
121d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
122d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
123d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
124ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
125ebfb436a49673693b98469683451bd9ede797557Jason SamsnDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
126ebfb436a49673693b98469683451bd9ede797557Jason Sams{
127ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
128ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
129ebfb436a49673693b98469683451bd9ede797557Jason Sams}
130ebfb436a49673693b98469683451bd9ede797557Jason Sams
131d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
132704ff64b099406bb328898a7443921f22dbffd6dJason SamsnContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
133d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
134d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
135704ff64b099406bb328898a7443921f22dbffd6dJason Sams    return (jint)rsContextCreate((RsDevice)dev, ver);
136704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
137704ff64b099406bb328898a7443921f22dbffd6dJason Sams
138704ff64b099406bb328898a7443921f22dbffd6dJason Samsstatic jint
13911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason SamsnContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
14011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
14111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
14211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
14311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
14411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int samplesMin, int samplesPref, float samplesQ)
14511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
14611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
14711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
14811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
14911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
15011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
15111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
15211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
15311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
15411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
15511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
15611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
157704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
15811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    return (jint)rsContextCreateGL((RsDevice)dev, ver, sc);
159d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
160d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
161d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1622e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
1637d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
1647d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
1657d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    rsContextSetPriority(con, p);
1667d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
1677d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1687d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1697d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1707d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
1712e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
172efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
1733bc47d438171dce294e816366d53bc9eca772c5bJason Sams    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
174efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
175efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    Surface * window = NULL;
176efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    if (wnd == NULL) {
177efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
178efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
179ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller        window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
180efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
181efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
1823bc47d438171dce294e816366d53bc9eca772c5bJason Sams    rsContextSetSurface(con, width, height, window);
183efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
184efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
185efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
1862e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
187d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    LOG_API("nContextDestroy, con(%p)", con);
1892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    rsContextDestroy(con);
190d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
191d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
192715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
1932e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
194715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
195715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
196715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
197715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
198d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
199d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2002e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextPause(JNIEnv *_env, jobject _this, RsContext con)
20165e7aa56f56097418d617663683544c25b3988eaJason Sams{
20265e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextPause, con(%p)", con);
20365e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextPause(con);
20465e7aa56f56097418d617663683544c25b3988eaJason Sams}
20565e7aa56f56097418d617663683544c25b3988eaJason Sams
20665e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
2072e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextResume(JNIEnv *_env, jobject _this, RsContext con)
20865e7aa56f56097418d617663683544c25b3988eaJason Sams{
20965e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextResume, con(%p)", con);
21065e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextResume(con);
21165e7aa56f56097418d617663683544c25b3988eaJason Sams}
21265e7aa56f56097418d617663683544c25b3988eaJason Sams
2131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2141c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
2151c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
2161c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2171c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextGetErrorMessage, con(%p)", con);
2181c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
2191c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2201c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextGetMessage(con, buf, &receiveLen, &subID, sizeof(buf), true);
2231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
2241c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
2251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
2261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
2271c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic void
2301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
231516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
232516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
233516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
234516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
235516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
2361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2371c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextGetMessage(con, ptr, &receiveLen, &subID, len * 4, true);
238516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
2391d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
240516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
241516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
2421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2441c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
2451c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData, jboolean wait)
2461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2471c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextPeekMessage, con(%p)", con);
2481c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
2491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2501c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
2511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    int id = rsContextPeekMessage(con, &receiveLen, &subID, wait);
2521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
2531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
2541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
255516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    return id;
256516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
257516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
2582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
259516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
260516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextInitToClient, con(%p)", con);
261516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextInitToClient(con);
262516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
263516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
2642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
265516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
266516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextDeinitToClient, con(%p)", con);
267516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextDeinitToClient(con);
268516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
269516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
270516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
271718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
2722e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
273d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
274718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
275718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
276d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
277d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
278718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
27970d4e5024298f71edb3b04867e05568f5495b4ceJason SamsnElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
280d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
281718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
282704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nElementCreate2, con(%p)", con);
283718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
284718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    jint *ids = _env->GetIntArrayElements(_ids, NULL);
28570d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
286718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
287718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
288718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
289718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
290718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
291718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        nameArray[ct] = _env->GetStringUTFChars(s, NULL);
292718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        sizeArray[ct] = _env->GetStringUTFLength(s);
29343ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
29470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
295718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
296718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
297718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        _env->ReleaseStringUTFChars(s, nameArray[ct]);
29843ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
299718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
30070d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
301718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(nameArray);
302718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(sizeArray);
303718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)id;
304d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
305d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
306dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3072e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
308dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
309dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
310dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetNativeData, con(%p)", con);
311dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
312dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
313dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
314dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
315dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t elementData[5];
316581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
317dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
318dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
319dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
320dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
321dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
322dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
323dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
324dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3252e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
326dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
327dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_IDs);
328dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetSubElements, con(%p)", con);
329dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
330dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
331dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
332dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
333581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
334dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
33511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    for(jint i = 0; i < dataSize; i++) {
336dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
337dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
338dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
339dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
340dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
341dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
342dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
343dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
344d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
345d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
3463b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Samsstatic int
347bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason SamsnTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
348bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
349d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
350bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
351bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            con, eid, dimx, dimy, dimz, mips, faces);
3523b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
353bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    jint id = (jint)rsaTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
3543b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    return (jint)id;
355d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
356d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
357dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3582e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
359dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
360dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
361dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
362dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
363dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
364dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
365dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nTypeCreate, con(%p)", con);
366dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
367dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t typeData[6];
368581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
369dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
370dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
371dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
372dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
373dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
374dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
375d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
376d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
377d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
3785476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage)
379d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
380d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i)", con, (RsElement)type, mips, usage);
381d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    return (jint) rsaAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage);
382d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
383d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
384d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
3855476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
3865476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
3875476b450e50939940dcf3f15c92335cee2fc572dJason Sams    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
3885476b450e50939940dcf3f15c92335cee2fc572dJason Sams    rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
3895476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
3905476b450e50939940dcf3f15c92335cee2fc572dJason Sams
391fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Samsstatic int
3925476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
393fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
394ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
395ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
396ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
397fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
3985476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
3995476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
400d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    jint id = (jint)rsaAllocationCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
4015476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
4025476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
403ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
404fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
40567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchoukstatic int
4065476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
40767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
40867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
40967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
41067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
41167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
4125476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
4135476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
414d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    jint id = (jint)rsaAllocationCubeCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
4155476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
4165476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
41767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
41867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
41926ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
4204ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
42126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
42226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
42326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
42426ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
42526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
4264ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
4274ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
4284ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    rsAllocationCopyFromBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
4294ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
4308a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
4318a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4324ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
4334ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
4348a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
4354ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
4364ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
4374ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
4388a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4394ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
4404ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
4414ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
4424ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
4438a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
4448a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
4454ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
446650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
4474ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
4484ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    nativeBitmap->unlockPixels();
449650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
450650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
4514ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
452d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
45349a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
454d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
455d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
45649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
457d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
45849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
459d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
460d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
461d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
462d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
46349a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
464d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
465d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
46649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
467768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
46849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
469768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
470d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
471d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
472d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
47349a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
474d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
475d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
47649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
477768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
47849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
479768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
480d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
481d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
482d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
48349a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
484d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
485d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
48649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
487d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
48849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
489d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
490d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
491d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
492d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
49349a05d7b82956009f03acbb92a064eed054eb031Jason Sams//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
49449a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
49549bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
49649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
49749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
49849bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
49949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, compIdx, sizeBytes);
50049bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
50149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
50249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
50349bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
50449a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
50549a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jintArray data, int sizeBytes)
506d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
507d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
50849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
509d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
51049a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
511d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
512d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
513d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
514d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
51549a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
51649a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jfloatArray data, int sizeBytes)
517d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
518d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
51949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
520d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
52149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
522d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
523d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
524d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
52540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
5262e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
52740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
52840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
52940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
53040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
531bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAllocationRead(con, (RsAllocation)alloc, ptr);
532ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseIntArrayElements(data, ptr, 0);
53340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
53440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
53540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
5362e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
53740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
53840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
539a8f2acee39aae94f9d7148f775ca8e35344da4b4Joe Onorato    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
54040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
541bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAllocationRead(con, (RsAllocation)alloc, ptr);
542ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseFloatArrayElements(data, ptr, 0);
54340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
544d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
545dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic jint
5462e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
547dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
548dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
549581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    return (jint) rsaAllocationGetType(con, (RsAllocation)a);
550dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
551dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
5525edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
5535edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
5545edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
5555edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
5565edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
5575edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
5585edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
5595edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
5605edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
5615edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
5625edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
5635edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
5645edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
5655edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
566aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
567aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
568aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
5692e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
570aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
571aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) native_asset);
572aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
573aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
574aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
575581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
576aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
577aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
578aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
579aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
5802e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
581aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
582aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
583581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
584aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return numEntries;
585aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
586aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
587aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
5882e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
589aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
590aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
591aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
592aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
593581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
594aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
595aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
596aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
597aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
598aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
599aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
600aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
601aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
602aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
603aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
6042e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
605aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
606aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
607581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
608aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
609aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
610d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
611d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
612d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
6139b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic int
614e27cdeeecba5b445e307d653d9cb7da007adfac3Alex SakhartchouknFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jfloat fontSize, jint dpi)
6159b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
6169b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
6179b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
6189b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
6199b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
6209b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
6219b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
622bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
623bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
624bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
6252e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
626d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
627d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
628bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
629d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
630d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
631d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
6322e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
6334d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
634cfc04366998cd0c626594c9cf70336a11bdf5996Jason Sams    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
6354d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarI(con, (RsScript)script, slot, val);
6364d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
6374d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
6384d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
6396f4cf0b8885403ead157ae00fd43cf1282331c23Jason SamsnScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
6406f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
6416f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
6426f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
6436f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
6446f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
6456f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
646031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen HinesnScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
647031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
648031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
649031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    rsScriptSetVarJ(con, (RsScript)script, slot, val);
650031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
651031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
652031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
6532e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
6544d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
655ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
6564d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarF(con, (RsScript)script, slot, val);
6574d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
6584d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
6594d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
660ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen HinesnScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
661ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
662ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
663ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    rsScriptSetVarD(con, (RsScript)script, slot, val);
664ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
665ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
666ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
6672e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
6684d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
6694d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
6704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
6714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
6724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
6734d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
6744d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
6754d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
676d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
677d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
6782e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
679584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
68007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
681584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
682584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
683584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
684584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
685584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
686bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
687584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
688584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
689584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
690584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
691584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
692584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
69322534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
6942e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
69522534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
6964d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
6974d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvoke(con, (RsScript)obj, slot);
69822534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
69922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
700584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
7012e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
702be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
7034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
7044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
7054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
7064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
7074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
708be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
709be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
710d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
711fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
712fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
713d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7142e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
715d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
716fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams    LOG_API("nScriptCBegin, con(%p)", con);
717bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptCBegin(con);
718d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
719d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
720d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7212e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
72243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                  jint offset, jint length)
723d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
724d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("!!! nScriptCSetScript, con(%p)", con);
72543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
72643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
72743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jbyte* script_base = 0;
72843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jbyte* script_ptr;
72943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
73043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
73143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "script == null");
73243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
73343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
73443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (offset < 0) {
73543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
73643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "offset < 0");
73743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
73843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
73943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
74043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
74143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "length < 0");
74243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
74343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
74443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    remaining = _env->GetArrayLength(scriptRef) - offset;
74543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
74643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
74743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        //_env->ThrowNew(IAEClass, "length > script.length - offset");
74843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
74943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
75043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    script_base = (jbyte *)
75143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
75243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    script_ptr = script_base + offset;
75343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
754bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptCSetText(con, (const char *)script_ptr, length);
75539ddc950c9064129ead5de04b200106c0659f937Jason Sams
75643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
75743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (script_base) {
75843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
75943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
76043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
761d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
762d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
763d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
764eeca435dc6134a285b9bbb832cd6a1a88f34e85fShih-wei LiaonScriptCCreate(JNIEnv *_env, jobject _this, RsContext con, jstring packageName, jstring resName, jstring cacheDir)
765d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
766d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nScriptCCreate, con(%p)", con);
767eeca435dc6134a285b9bbb832cd6a1a88f34e85fShih-wei Liao    const char* packageNameUTF = _env->GetStringUTFChars(packageName, NULL);
768a914f340ae5b267dc3ab36c1156c795b8fa18f5dShih-wei Liao    const char* resNameUTF = _env->GetStringUTFChars(resName, NULL);
7696b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    const char* cacheDirUTF = _env->GetStringUTFChars(cacheDir, NULL);
770eeca435dc6134a285b9bbb832cd6a1a88f34e85fShih-wei Liao    jint i = (jint)rsScriptCCreate(con, packageNameUTF, resNameUTF, cacheDirUTF);
771eeca435dc6134a285b9bbb832cd6a1a88f34e85fShih-wei Liao    _env->ReleaseStringUTFChars(packageName, packageNameUTF);
7726b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    _env->ReleaseStringUTFChars(resName, resNameUTF);
7736b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    _env->ReleaseStringUTFChars(cacheDir, cacheDirUTF);
7746b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    return i;
775d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
776d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
777d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
778d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
779d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7802e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
781d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
78254db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
78354db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
784d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
785d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
786d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7872e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
788d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
78954db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
79054db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
791d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
792d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
793d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
7942e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
795d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
79654db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
79754db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreDepthMask(con, enable);
798d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
799d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
800d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8012e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
802d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
80354db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
80454db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreColorMask(con, r, g, b, a);
805d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
806d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
807d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8082e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
809d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
81054db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
81154db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
812d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
813d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
814d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8152e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
816d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
81754db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
81854db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsProgramStoreDither(con, enable);
819d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
820d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
821d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
8222e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
823d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
82454db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreCreate, con(%p)", con);
82554db59c3594e887a412a24713fc3daa1c2404593Jason Sams    return (jint)rsProgramStoreCreate(con);
826d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
827d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
8280011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
8290011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
8300011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
8312e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
8320011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
8330011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
8340011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
8350011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
83654c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
837d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8382e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
83954c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
84068afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
84168afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
84254c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
84354c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
84454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
8452e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
846d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
84768afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
84868afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
849d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
850d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
85168afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
852d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
85368afd01ec9fd37774d8291192952a25e5605b6fbJason Samsstatic jint
854b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
8557e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
8567e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
8577e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint shaderLen = _env->GetStringUTFLength(shader);
8587e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
8597e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
8607e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
861b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
8627e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
863b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
8647e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    _env->ReleaseStringUTFChars(shader, shaderUTF);
8657e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
8667e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
8677e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
8687e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
8697e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
8701fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
8711fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
8720011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic jint
873b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
8741fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
8750011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
8760011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint shaderLen = _env->GetStringUTFLength(shader);
8770011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
8780011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
8791fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
880b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
881ee41112e1539de95596600fd2c6dada5d275217fJason Sams
882b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
8830011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    _env->ReleaseStringUTFChars(shader, shaderUTF);
8840011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
8850011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
8861fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
8871fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
888ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
889ebfb436a49673693b98469683451bd9ede797557Jason Sams
890ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic jint
8912e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
892ebfb436a49673693b98469683451bd9ede797557Jason Sams{
89380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
89480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            con, pointSmooth, lineSmooth, pointSprite);
89580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
896ebfb436a49673693b98469683451bd9ede797557Jason Sams}
897ebfb436a49673693b98469683451bd9ede797557Jason Sams
898ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
8992e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
900ebfb436a49673693b98469683451bd9ede797557Jason Sams{
901ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
90280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
90380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
90480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
90580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
9062e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
90780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
90880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
90980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
910ebfb436a49673693b98469683451bd9ede797557Jason Sams}
911ebfb436a49673693b98469683451bd9ede797557Jason Sams
912d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
913d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
914d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
915d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9162e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
917d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
918d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
919bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindRootScript(con, (RsScript)script);
920d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
921d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
922d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9232e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
924d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
92554db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
92654db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsContextBindProgramStore(con, (RsProgramStore)pfs);
927d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
928d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
929d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
9302e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
931d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
932d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
933bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramFragment(con, (RsProgramFragment)pf);
934d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
935d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
9360826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
9372e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
9380826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
9390826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
940bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramVertex(con, (RsProgramVertex)pf);
9410826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
9420826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
943d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
9442e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
945ebfb436a49673693b98469683451bd9ede797557Jason Sams{
946ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
947ebfb436a49673693b98469683451bd9ede797557Jason Sams    rsContextBindProgramRaster(con, (RsProgramRaster)pf);
948ebfb436a49673693b98469683451bd9ede797557Jason Sams}
949ebfb436a49673693b98469683451bd9ede797557Jason Sams
950d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
95102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
95202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
95302fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic void
9542e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
95502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
95602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    LOG_API("nSamplerBegin, con(%p)", con);
957bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsSamplerBegin(con);
95802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
95902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
96002fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic void
9612e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
96202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
96302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
964bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
96502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
96602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
967f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchoukstatic void
968f5b3510c706ed1f7611760dff0c94f2111531c68Alex SakhartchouknSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
969f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk{
970f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
971f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    rsSamplerSet2(con, (RsSamplerParam)p, v);
972f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk}
973f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk
97402fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic jint
9752e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
97602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
977bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    LOG_API("nSamplerCreate, con(%p)", con);
978bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    return (jint)rsSamplerCreate(con);
97902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
98002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
981bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
982bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
9831bada8cd6e4f340de93cff4a2439835fc3b1456cJason Samsstatic jint
9842e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
985164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
986164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
987164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    int id = (int)rsMeshCreate(con, vtxCount, idxCount);
988164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    return id;
989164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
990164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
991164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void
9922e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
993164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
99480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
99580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
996164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
997164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
998164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void
9992e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
1000164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
100180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
100280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
100380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
100480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
10059d71e2180062931416092f26276a07e55b318f62Alex Sakhartchoukstatic void
10069d71e2180062931416092f26276a07e55b318f62Alex SakhartchouknMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
10079d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk{
10089d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
10099d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    rsMeshInitVertexAttribs(con, (RsMesh)mesh);
10109d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
10119d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
10129d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
101380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
10142e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
101580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
101680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
101780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1018581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
101980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
102080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
102180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
102280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
10232e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
102480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
102580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
102680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1027581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
102880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
102980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
103080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
103180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
10322e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
103380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
103480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
103580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
103680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1037581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
103880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
103980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
104080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
104180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
104280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
104380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
104480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
104580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
104680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
10472e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
104880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
104980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
105080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
105180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
105280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
105380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1054581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
105580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
105680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
105780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
105880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
105980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
106080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
106180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
106280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1063164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1064164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1065164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1066164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1067d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
106894d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1069d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1070d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
10711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
10721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
10731c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceCreate",                  "()I",                                     (void*)nDeviceCreate },
10741c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceDestroy",                 "(I)V",                                    (void*)nDeviceDestroy },
10751c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceSetConfig",               "(III)V",                                  (void*)nDeviceSetConfig },
10761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetUserMessage",         "(I[I)V",                                  (void*)nContextGetUserMessage },
10771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetErrorMessage",        "(I)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
10781c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextPeekMessage",            "(I[IZ)I",                                 (void*)nContextPeekMessage },
10791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
10801c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextInitToClient",           "(I)V",                                    (void*)nContextInitToClient },
10811c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextDeinitToClient",         "(I)V",                                    (void*)nContextDeinitToClient },
10822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
10832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
10842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
1085b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextCreate",                 "(II)I",                                 (void*)nContextCreate },
108611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{"rsnContextCreateGL",               "(IIIIIIIIIIIIF)I",                      (void*)nContextCreateGL },
10872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextFinish",                 "(I)V",                                  (void*)nContextFinish },
10882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetPriority",            "(II)V",                                 (void*)nContextSetPriority },
10892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetSurface",             "(IIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1090b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextDestroy",                "(I)V",                                  (void*)nContextDestroy },
10912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
10922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextPause",                  "(I)V",                                  (void*)nContextPause },
10932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextResume",                 "(I)V",                                  (void*)nContextResume },
10942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAssignName",                    "(II[B)V",                               (void*)nAssignName },
1095b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnGetName",                       "(II)Ljava/lang/String;",                (void*)nGetName },
10962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnObjDestroy",                    "(II)V",                                 (void*)nObjDestroy },
10972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
10982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DCreateFromAssetStream",  "(II)I",                                 (void*)nFileA3DCreateFromAssetStream },
10992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetNumIndexEntries",     "(II)I",                                 (void*)nFileA3DGetNumIndexEntries },
1100b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnFileA3DGetIndexEntries",        "(III[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
11012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetEntryByIndex",        "(III)I",                                (void*)nFileA3DGetEntryByIndex },
11022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1103e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk{"rsnFontCreateFromFile",            "(ILjava/lang/String;FI)I",              (void*)nFontCreateFromFile },
11042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementCreate",                 "(IIIZI)I",                              (void*)nElementCreate },
110670d4e5024298f71edb3b04867e05568f5495b4ceJason Sams{"rsnElementCreate2",                "(I[I[Ljava/lang/String;[I)I",           (void*)nElementCreate2 },
11072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementGetNativeData",          "(II[I)V",                               (void*)nElementGetNativeData },
1108b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnElementGetSubElements",         "(II[I[Ljava/lang/String;)V",            (void*)nElementGetSubElements },
11092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1110bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams{"rsnTypeCreate",                    "(IIIIIZZ)I",                            (void*)nTypeCreate },
1111b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnTypeGetNativeData",             "(II[I)V",                               (void*)nTypeGetNativeData },
11122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1113d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams{"rsnAllocationCreateTyped",         "(IIII)I",                               (void*)nAllocationCreateTyped },
11145476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCreateFromBitmap",    "(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCreateFromBitmap },
11155476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCubeCreateFromBitmap },
11165476b450e50939940dcf3f15c92335cee2fc572dJason Sams
11174ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyFromBitmap",      "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
11184ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyToBitmap",        "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
11194ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
11205476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationSyncAll",             "(III)V",                                (void*)nAllocationSyncAll },
112149a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[II)V",                           (void*)nAllocationData1D_i },
112249a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[SI)V",                           (void*)nAllocationData1D_s },
112349a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[BI)V",                           (void*)nAllocationData1D_b },
112449a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[FI)V",                           (void*)nAllocationData1D_f },
112549a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationElementData1D",       "(IIIII[BI)V",                           (void*)nAllocationElementData1D },
112649a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[II)V",                        (void*)nAllocationData2D_i },
112749a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[FI)V",                        (void*)nAllocationData2D_f },
11282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[I)V",                               (void*)nAllocationRead_i },
11292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[F)V",                               (void*)nAllocationRead_f },
11302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationGetType",             "(II)I",                                 (void*)nAllocationGetType},
11315edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize1D",            "(III)V",                                (void*)nAllocationResize1D },
11325edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize2D",            "(IIII)V",                               (void*)nAllocationResize2D },
11332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptBindAllocation",          "(IIII)V",                               (void*)nScriptBindAllocation },
11352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetTimeZone",             "(II[B)V",                               (void*)nScriptSetTimeZone },
11362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvoke",                  "(III)V",                                (void*)nScriptInvoke },
11372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvokeV",                 "(III[B)V",                              (void*)nScriptInvokeV },
11382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarI",                 "(IIII)V",                               (void*)nScriptSetVarI },
1139031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{"rsnScriptSetVarJ",                 "(IIIJ)V",                               (void*)nScriptSetVarJ },
11402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarF",                 "(IIIF)V",                               (void*)nScriptSetVarF },
1141ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{"rsnScriptSetVarD",                 "(IIID)V",                               (void*)nScriptSetVarD },
11422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarV",                 "(III[B)V",                              (void*)nScriptSetVarV },
11436f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{"rsnScriptSetVarObj",               "(IIII)V",                               (void*)nScriptSetVarObj },
11442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptCBegin",                  "(I)V",                                  (void*)nScriptCBegin },
11462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptCSetScript",              "(I[BII)V",                              (void*)nScriptCSetScript },
1147eeca435dc6134a285b9bbb832cd6a1a88f34e85fShih-wei Liao{"rsnScriptCCreate",                 "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",  (void*)nScriptCCreate },
11482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreBegin",             "(III)V",                                (void*)nProgramStoreBegin },
11502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreDepthFunc",         "(II)V",                                 (void*)nProgramStoreDepthFunc },
11512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreDepthMask",         "(IZ)V",                                 (void*)nProgramStoreDepthMask },
11522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreColorMask",         "(IZZZZ)V",                              (void*)nProgramStoreColorMask },
11532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreBlendFunc",         "(III)V",                                (void*)nProgramStoreBlendFunc },
11542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreDither",            "(IZ)V",                                 (void*)nProgramStoreDither },
11552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramStoreCreate",            "(I)I",                                  (void*)nProgramStoreCreate },
11562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindConstants",          "(IIII)V",                               (void*)nProgramBindConstants },
11582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindTexture",            "(IIII)V",                               (void*)nProgramBindTexture },
11592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindSampler",            "(IIII)V",                               (void*)nProgramBindSampler },
11602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
116149a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnProgramFragmentCreate",         "(ILjava/lang/String;[I)I",              (void*)nProgramFragmentCreate },
11622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1163b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnProgramRasterCreate",           "(IZZZ)I",                               (void*)nProgramRasterCreate },
11642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramRasterSetLineWidth",     "(IIF)V",                                (void*)nProgramRasterSetLineWidth },
11652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramRasterSetCullMode",      "(III)V",                                (void*)nProgramRasterSetCullMode },
11662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
116749a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnProgramVertexCreate",           "(ILjava/lang/String;[I)I",              (void*)nProgramVertexCreate },
11682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindRootScript",         "(II)V",                                 (void*)nContextBindRootScript },
1170b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextBindProgramStore",       "(II)V",                                 (void*)nContextBindProgramStore },
11712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramFragment",    "(II)V",                                 (void*)nContextBindProgramFragment },
11722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramVertex",      "(II)V",                                 (void*)nContextBindProgramVertex },
11732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramRaster",      "(II)V",                                 (void*)nContextBindProgramRaster },
11742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerBegin",                  "(I)V",                                  (void*)nSamplerBegin },
11762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerSet",                    "(III)V",                                (void*)nSamplerSet },
1177f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk{"rsnSamplerSet2",                   "(IIF)V",                                (void*)nSamplerSet2 },
11782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnSamplerCreate",                 "(I)I",                                  (void*)nSamplerCreate },
11792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshCreate",                    "(III)I",                                (void*)nMeshCreate },
11812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshBindVertex",                "(IIII)V",                               (void*)nMeshBindVertex },
11822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshBindIndex",                 "(IIIII)V",                              (void*)nMeshBindIndex },
11839d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk{"rsnMeshInitVertexAttribs",         "(II)V",                                 (void*)nMeshInitVertexAttribs },
11842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
11852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetVertexBufferCount",      "(II)I",                                 (void*)nMeshGetVertexBufferCount },
11862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndexCount",             "(II)I",                                 (void*)nMeshGetIndexCount },
1187b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnMeshGetVertices",               "(II[II)V",                              (void*)nMeshGetVertices },
11882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndices",                "(II[I[II)V",                            (void*)nMeshGetIndices },
118980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1190d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1191d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1192d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1193d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1194d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1195d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1196d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1197d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1198d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1199d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1200d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1201d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1202d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    JNIEnv* env = NULL;
1203d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1204d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1205d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1206d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: GetEnv failed\n");
1207d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1208d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1209d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    assert(env != NULL);
1210d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1211d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
1212d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: MediaPlayer native registration failed\n");
1213d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1214d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1215d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1216d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1217d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1218d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1219d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1220d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1221d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1222