android_renderscript_RenderScript.cpp revision 470b3b5b70ec71042d30004747c625ca76c4007a
1c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main/*
2c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Copyright (C) 2011-2012 The Android Open Source Project
3c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main *
4c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Licensed under the Apache License, Version 2.0 (the "License");
5c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * you may not use this file except in compliance with the License.
6c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * You may obtain a copy of the License at
7c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main *
8c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main *      http://www.apache.org/licenses/LICENSE-2.0
9c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main *
10c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * Unless required by applicable law or agreed to in writing, software
11c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * distributed under the License is distributed on an "AS IS" BASIS,
12c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * See the License for the specific language governing permissions and
14c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main * limitations under the License.
15c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main */
16c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
17c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_TAG "libRS_jni"
18c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
19c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <stdlib.h>
20c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <stdio.h>
21c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <fcntl.h>
22c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <unistd.h>
23c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <math.h>
24c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <android/bitmap.h>
25257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#include <android/log.h>
26c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include "jni.h"
27c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <rs.h>
28c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#include <rsEnv.h>
29c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
30470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang#include "rsDispatch.h"
31470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang#include <dlfcn.h>
32470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
33c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//#define LOG_API ALOG
34c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main#define LOG_API(...)
35c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
36257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines#define NELEM(m) (sizeof(m) / sizeof((m)[0]))
37c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
38c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringToUTF8 {
39c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic:
40c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
41c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fCStr = env->GetStringUTFChars(str, NULL);
42c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fLength = env->GetStringUTFLength(str);
43c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
44c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    ~AutoJavaStringToUTF8() {
45c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
46c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
47c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char* c_str() const { return fCStr; }
48c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length() const { return fLength; }
49c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
50c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate:
51c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv*     fEnv;
52c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jstring     fJStr;
53c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char* fCStr;
54c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize       fLength;
55c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
56c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
57c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainclass AutoJavaStringArrayToUTF8 {
58c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainpublic:
59c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
60c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
61c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        mCStrings = NULL;
62c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        mSizeArray = NULL;
63c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        if (stringsLength > 0) {
64c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
65c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
66c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            for (jsize ct = 0; ct < stringsLength; ct ++) {
67c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
68c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                mCStrings[ct] = mEnv->GetStringUTFChars(s, NULL);
69c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
70c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            }
71c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        }
72c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
73c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    ~AutoJavaStringArrayToUTF8() {
74c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        for (jsize ct=0; ct < mStringsLength; ct++) {
75c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
76c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
77c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        }
78c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        free(mCStrings);
79c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        free(mSizeArray);
80c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
81c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **c_str() const { return mCStrings; }
82c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t *c_str_len() const { return mSizeArray; }
83c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length() const { return mStringsLength; }
84c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
85c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainprivate:
86c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv      *mEnv;
87c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jobjectArray mStrings;
88c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **mCStrings;
89c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t      *mSizeArray;
90c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize        mStringsLength;
91c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
92c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
93470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
94470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang// ---------------------------------------------------------------------------
95470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
96470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic dispatchTable dispatchTab;
97470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
98470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic bool loadSymbols(void* handle) {
99470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
100470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationGetType = (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType");
101470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationGetType == NULL) {
102470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationGetType");
103470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
104470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
105470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.TypeGetNativeData = (TypeGetNativeDataFnPtr)dlsym(handle, "rsaTypeGetNativeData");
106470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.TypeGetNativeData == NULL) {
107470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.TypeGetNativeData");
108470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
109470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
110470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ElementGetNativeData = (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData");
111470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ElementGetNativeData == NULL) {
112470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ElementGetNativeData");
113470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
114470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
115470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(handle, "rsaElementGetSubElements");
116470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ElementGetSubElements == NULL) {
117470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ElementGetSubElements");
118470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
119470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
120470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.DeviceCreate = (DeviceCreateFnPtr)dlsym(handle, "rsDeviceCreate");
121470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.DeviceCreate == NULL) {
122470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.DeviceCreate");
123470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
124470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
125470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.DeviceDestroy = (DeviceDestroyFnPtr)dlsym(handle, "rsDeviceDestroy");
126470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.DeviceDestroy == NULL) {
127470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.DeviceDestroy");
128470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
129470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
130470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.DeviceSetConfig = (DeviceSetConfigFnPtr)dlsym(handle, "rsDeviceSetConfig");
131470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.DeviceSetConfig == NULL) {
132470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.DeviceSetConfig");
133470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
134470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
135470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextCreate = (ContextCreateFnPtr)dlsym(handle, "rsContextCreate");;
136470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ContextCreate == NULL) {
137470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ContextCreate");
138470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
139470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
140470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.GetName = (GetNameFnPtr)dlsym(handle, "rsaGetName");;
141470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.GetName == NULL) {
142470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.GetName");
143470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
144470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
145470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextDestroy = (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy");
146470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ContextDestroy == NULL) {
147470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ContextDestroy");
148470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
149470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
150470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextGetMessage = (ContextGetMessageFnPtr)dlsym(handle, "rsContextGetMessage");
151470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ContextGetMessage == NULL) {
152470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ContextGetMessage");
153470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
154470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
155470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextPeekMessage = (ContextPeekMessageFnPtr)dlsym(handle, "rsContextPeekMessage");
156470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ContextPeekMessage == NULL) {
157470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ContextPeekMessage");
158470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
159470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
160470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextSendMessage = (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage");
161470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ContextSendMessage == NULL) {
162470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ContextSendMessage");
163470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
164470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
165470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextInitToClient = (ContextInitToClientFnPtr)dlsym(handle, "rsContextInitToClient");
166470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ContextInitToClient == NULL) {
167470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ContextInitToClient");
168470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
169470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
170470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(handle, "rsContextDeinitToClient");
171470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ContextDeinitToClient == NULL) {
172470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ContextDeinitToClient");
173470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
174470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
175470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.TypeCreate = (TypeCreateFnPtr)dlsym(handle, "rsTypeCreate");
176470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.TypeCreate == NULL) {
177470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.TypeCreate");
178470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
179470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
180470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(handle, "rsAllocationCreateTyped");
181470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationCreateTyped == NULL) {
182470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCreateTyped");
183470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
184470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
185470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCreateFromBitmap");
186470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationCreateFromBitmap == NULL) {
187470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCreateFromBitmap");
188470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
189470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
190470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationCubeCreateFromBitmap = (AllocationCubeCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCubeCreateFromBitmap");
191470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationCubeCreateFromBitmap == NULL) {
192470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCubeCreateFromBitmap");
193470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
194470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
195470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationGetSurface = (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface");
196470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationGetSurface == NULL) {
197470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationGetSurface");
198470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
199470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
200470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationSetSurface = (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface");
201470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationSetSurface == NULL) {
202470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationSetSurface");
203470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
204470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
205470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextFinish = (ContextFinishFnPtr)dlsym(handle, "rsContextFinish");
206470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ContextFinish == NULL) {
207470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ContextFinish");
208470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
209470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
210470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextDump = (ContextDumpFnPtr)dlsym(handle, "rsContextDump");
211470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ContextDump == NULL) {
212470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ContextDump");
213470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
214470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
215470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextSetPriority = (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority");
216470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ContextSetPriority == NULL) {
217470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ContextSetPriority");
218470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
219470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
220470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AssignName = (AssignNameFnPtr)dlsym(handle, "rsAssignName");
221470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AssignName == NULL) {
222470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AssignName");
223470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
224470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
225470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ObjDestroy = (ObjDestroyFnPtr)dlsym(handle, "rsObjDestroy");
226470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ObjDestroy == NULL) {
227470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ObjDestroy");
228470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
229470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
230470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ElementCreate = (ElementCreateFnPtr)dlsym(handle, "rsElementCreate");
231470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ElementCreate == NULL) {
232470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ElementCreate");
233470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
234470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
235470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ElementCreate2 = (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2");
236470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ElementCreate2 == NULL) {
237470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ElementCreate2");
238470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
239470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
240470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(handle, "rsAllocationCopyToBitmap");
241470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationCopyToBitmap == NULL) {
242470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCopyToBitmap");
243470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
244470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
245470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation1DData = (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData");
246470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.Allocation1DData == NULL) {
247470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation1DData");
248470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
249470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
250470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation1DElementData = (Allocation1DElementDataFnPtr)dlsym(handle, "rsAllocation1DElementData");
251470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.Allocation1DElementData == NULL) {
252470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation1DElementData");
253470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
254470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
255470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation2DData = (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData");
256470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.Allocation2DData == NULL) {
257470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation2DData");
258470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
259470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
260470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation3DData = (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData");
261470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.Allocation3DData == NULL) {
262470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation3DData");
263470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
264470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
265470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(handle, "rsAllocationGenerateMipmaps");
266470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationGenerateMipmaps == NULL) {
267470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationGenerateMipmaps");
268470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
269470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
270470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationRead = (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead");
271470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationRead == NULL) {
272470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationRead");
273470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
274470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
275470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation1DRead = (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead");
276470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.Allocation1DRead == NULL) {
277470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation1DRead");
278470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
279470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
280470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation2DRead = (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead");
281470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.Allocation2DRead == NULL) {
282470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation2DRead");
283470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
284470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
285470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationSyncAll = (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll");
286470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationSyncAll == NULL) {
287470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationSyncAll");
288470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
289470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
290470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationResize1D = (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D");
291470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationResize1D == NULL) {
292470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationResize1D");
293470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
294470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
295470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(handle, "rsAllocationCopy2DRange");
296470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationCopy2DRange == NULL) {
297470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCopy2DRange");
298470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
299470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
300470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(handle, "rsAllocationCopy3DRange");
301470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationCopy3DRange == NULL) {
302470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCopy3DRange");
303470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
304470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
305470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.SamplerCreate = (SamplerCreateFnPtr)dlsym(handle, "rsSamplerCreate");
306470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.SamplerCreate == NULL) {
307470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.SamplerCreate");
308470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
309470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
310470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptBindAllocation = (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation");
311470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptBindAllocation == NULL) {
312470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptBindAllocation");
313470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
314470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
315470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetTimeZone = (ScriptSetTimeZoneFnPtr)dlsym(handle, "rsScriptSetTimeZone");
316470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptSetTimeZone == NULL) {
317470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetTimeZone");
318470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
319470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
320470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptInvoke = (ScriptInvokeFnPtr)dlsym(handle, "rsScriptInvoke");
321470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptInvoke == NULL) {
322470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptInvoke");
323470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
324470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
325470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptInvokeV = (ScriptInvokeVFnPtr)dlsym(handle, "rsScriptInvokeV");
326470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptInvokeV == NULL) {
327470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptInvokeV");
328470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
329470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
330470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptForEach = (ScriptForEachFnPtr)dlsym(handle, "rsScriptForEach");
331470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptForEach == NULL) {
332470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptForEach");
333470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
334470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
335470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarI = (ScriptSetVarIFnPtr)dlsym(handle, "rsScriptSetVarI");
336470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptSetVarI == NULL) {
337470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarI");
338470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
339470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
340470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarObj = (ScriptSetVarObjFnPtr)dlsym(handle, "rsScriptSetVarObj");
341470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptSetVarObj == NULL) {
342470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarObj");
343470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
344470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
345470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarJ = (ScriptSetVarJFnPtr)dlsym(handle, "rsScriptSetVarJ");
346470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptSetVarJ == NULL) {
347470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarJ");
348470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
349470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
350470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarF = (ScriptSetVarFFnPtr)dlsym(handle, "rsScriptSetVarF");
351470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptSetVarF == NULL) {
352470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarF");
353470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
354470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
355470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarD = (ScriptSetVarDFnPtr)dlsym(handle, "rsScriptSetVarD");
356470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptSetVarD == NULL) {
357470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarD");
358470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
359470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
360470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarV = (ScriptSetVarVFnPtr)dlsym(handle, "rsScriptSetVarV");
361470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptSetVarV == NULL) {
362470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarV");
363470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
364470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
365470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptGetVarV = (ScriptGetVarVFnPtr)dlsym(handle, "rsScriptGetVarV");
366470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptGetVarV == NULL) {
367470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptGetVarV");
368470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
369470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
370470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarVE = (ScriptSetVarVEFnPtr)dlsym(handle, "rsScriptSetVarVE");
371470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptSetVarVE == NULL) {
372470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarVE");
373470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
374470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
375470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptCCreate = (ScriptCCreateFnPtr)dlsym(handle, "rsScriptCCreate");
376470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptCCreate == NULL) {
377470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptCCreate");
378470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
379470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
380470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(handle, "rsScriptIntrinsicCreate");
381470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptIntrinsicCreate == NULL) {
382470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptIntrinsicCreate");
383470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
384470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
385470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptKernelIDCreate = (ScriptKernelIDCreateFnPtr)dlsym(handle, "rsScriptKernelIDCreate");
386470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptKernelIDCreate == NULL) {
387470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptKernelIDCreate");
388470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
389470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
390470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptFieldIDCreate = (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate");
391470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptFieldIDCreate == NULL) {
392470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptFieldIDCreate");
393470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
394470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
395470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptGroupCreate = (ScriptGroupCreateFnPtr)dlsym(handle, "rsScriptGroupCreate");
396470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptGroupCreate == NULL) {
397470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptGroupCreate");
398470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
399470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
400470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptGroupSetOutput = (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput");
401470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptGroupSetOutput == NULL) {
402470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptGroupSetOutput");
403470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
404470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
405470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptGroupSetInput = (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput");
406470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptGroupSetInput == NULL) {
407470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptGroupSetInput");
408470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
409470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
410470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptGroupExecute = (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute");
411470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.ScriptGroupExecute == NULL) {
412470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptGroupExecute");
413470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
414470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
415470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationIoSend = (AllocationIoSendFnPtr)dlsym(handle, "rsAllocationIoSend");
416470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationIoSend == NULL) {
417470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationIoSend");
418470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
419470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
420470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationIoReceive = (AllocationIoReceiveFnPtr)dlsym(handle, "rsAllocationIoReceive");
421470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationIoReceive == NULL) {
422470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationIoReceive");
423470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
424470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
425470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationGetPointer = (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer");
426470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (dispatchTab.AllocationGetPointer == NULL) {
427470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationGetPointer");
428470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
429470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
430470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
431470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return true;
432470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang}
433470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
434470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
435470b3b5b70ec71042d30004747c625ca76c4007aMiao Wangstatic jboolean nLoadSO(JNIEnv *_env, jobject _this, jboolean useNative) {
436470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    void* handle = NULL;
437470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (useNative) {
438470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        handle = dlopen("libRS.so", RTLD_LAZY | RTLD_LOCAL);
439470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    } else {
440470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        handle = dlopen("libRSSupport.so", RTLD_LAZY | RTLD_LOCAL);
441470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
442470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (handle == NULL) {
443470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("couldn't dlopen %s, %s", filename, dlerror());
444470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
445470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
446470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
447470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    if (loadSymbols(handle) == false) {
448470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        LOG_API("%s init failed!", filename);
449470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        return false;
450470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    }
451470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    LOG_API("Successfully loaded %s", filename);
452470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return true;
453470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang}
454470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang
455c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
456c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
457c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
458c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextFinish(JNIEnv *_env, jobject _this, RsContext con)
459c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
460c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextFinish, con(%p)", con);
461470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextFinish(con);
462c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
463c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
464c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
465c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
466c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
467c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
468470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ObjDestroy(con, (void *)obj);
469c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
470c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
471c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
472c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
473c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceCreate(JNIEnv *_env, jobject _this)
475c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
476c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceCreate");
477470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return (jint)dispatchTab.DeviceCreate();
478c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
479c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
480c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
481c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
482c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
483c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceDestroy");
484470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return dispatchTab.DeviceDestroy((RsDevice)dev);
485c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
486c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
487c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
488c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
489c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
490c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
491470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return dispatchTab.DeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
492c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
493c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
494c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
495c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer, jint ct)
496c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
497c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextCreate");
498470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return (jint)dispatchTab.ContextCreate((RsDevice)dev, ver, sdkVer, (RsContextType)ct, 0);
499c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
500c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
501c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
502c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
503c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
504c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
505c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
506470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextSetPriority(con, p);
507c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
508c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
509c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
510c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
511c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
512c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
513c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
514c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextDestroy, con(%p)", con);
515470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextDestroy(con);
516c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
517c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
518c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
519c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
520c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
521c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
522470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextDump((RsContext)con, bits);
523c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
524c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
525c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
526c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jstring
527c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
528c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
529c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextGetErrorMessage, con(%p)", con);
530c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    char buf[1024];
531c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
532c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
533c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
534470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    int id = dispatchTab.ContextGetMessage(con,
535c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 buf, sizeof(buf),
536c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &receiveLen, sizeof(receiveLen),
537c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &subID, sizeof(subID));
538c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!id && receiveLen) {
539184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,
540184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "message receive buffer too small.  %zu", receiveLen);
541c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
542c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return _env->NewStringUTF(buf);
543c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
544c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
545c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
546c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
547c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
548c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
549c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
550c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
551c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
552c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
553470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    int id = dispatchTab.ContextGetMessage(con,
554c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 ptr, len * 4,
555c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &receiveLen, sizeof(receiveLen),
556c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 &subID, sizeof(subID));
557c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!id && receiveLen) {
558184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,
559184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "message receive buffer too small.  %zu", receiveLen);
560c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
561c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, 0);
562c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
563c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
564c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
565c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
566c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData)
567c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
568c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextPeekMessage, con(%p)", con);
569c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
570c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t receiveLen;
571c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t subID;
572470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    int id = dispatchTab.ContextPeekMessage(con, &receiveLen, sizeof(receiveLen),
573c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                  &subID, sizeof(subID));
574c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    auxDataPtr[0] = (jint)subID;
575c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    auxDataPtr[1] = (jint)receiveLen;
576c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
577c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
578c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
579c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
580c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
581c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
582c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextInitToClient, con(%p)", con);
583470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextInitToClient(con);
584c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
585c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
586c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
587c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
588c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextDeinitToClient, con(%p)", con);
589470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextDeinitToClient(con);
590c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
591c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
592c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
593c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnContextSendMessage(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray data)
594c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
595c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = NULL;
596c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = 0;
597c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (data) {
598c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        len = _env->GetArrayLength(data);
599c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        jint *ptr = _env->GetIntArrayElements(data, NULL);
600c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
601c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", con, id, len);
602470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ContextSendMessage(con, id, (const uint8_t *)ptr, len * sizeof(int));
603c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (data) {
604c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
605c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
606c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
607c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
608c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
609c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
610c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
611c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
612c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
613c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
614470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return (jint)dispatchTab.ElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
615c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
616c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
617c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
618c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnElementCreate2(JNIEnv *_env, jobject _this, RsContext con,
619c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                jintArray _ids, jobjectArray _names, jintArray _arraySizes)
620c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
621c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    int fieldCount = _env->GetArrayLength(_ids);
622c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nElementCreate2, con(%p)", con);
623c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
624c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ids = _env->GetIntArrayElements(_ids, NULL);
625c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
626c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
627c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
628c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
629c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **nameArray = names.c_str();
630c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t *sizeArray = names.c_str_len();
631c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
632470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    jint id = (jint)dispatchTab.ElementCreate2(con,
633c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     (RsElement *)ids, fieldCount,
634c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
635c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                     (const uint32_t *)arraySizes, fieldCount);
636c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
637c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
638c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
639c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)id;
640c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
641c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
642c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
643c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
644c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
645c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id,
646c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jintArray _IDs,
647c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jobjectArray _names,
648c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jintArray _arraySizes)
649c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
650c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    int dataSize = _env->GetArrayLength(_IDs);
651c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nElementGetSubElements, con(%p)", con);
652c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
653c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
654c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
655c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
656c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
657470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ElementGetSubElements(con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
658c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
659c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    for(jint i = 0; i < dataSize; i++) {
660c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
661c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
662c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->SetIntArrayRegion(_arraySizes, i, 1, (const jint*)&arraySizes[i]);
663c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
664c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
665c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(ids);
666c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(names);
667c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    free(arraySizes);
668c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
669c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
670c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
671c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
672c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic int
673c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
674c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
675c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
676c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
677c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            con, eid, dimx, dimy, dimz, mips, faces, yuv);
678c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
679470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    jint id = (jint)dispatchTab.TypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces, yuv);
680c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return (jint)id;
681c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
682c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
683c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
684c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
685c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
686c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage, jint pointer)
687c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
688c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", con, (RsElement)type, mips, usage, (void *)pointer);
689470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return (jint) dispatchTab.AllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uint32_t)pointer);
690c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
691c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
692c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
693c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
694c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
695c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
696470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
697c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
698c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
699c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
700c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
701c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
702c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
703470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationGenerateMipmaps(con, (RsAllocation)alloc);
704c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
705c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
706c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic size_t GetBitmapSize(JNIEnv *env, jobject jbitmap) {
707c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
708c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
709c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(env, jbitmap, &info);
710c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    size_t s = info.width * info.height;
711c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    switch (info.format) {
712c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGBA_8888: s *= 4; break;
713c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGB_565: s *= 2; break;
714c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        case ANDROID_BITMAP_FORMAT_RGBA_4444: s *= 2; break;
715c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
716c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return s;
717c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
718c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
719c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic int
720c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
721c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
722257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    jint id = 0;
723257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    void *pixels = NULL;
724257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
725c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
726257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (pixels != NULL) {
727470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        id = (jint)dispatchTab.AllocationCreateFromBitmap(con,
728257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines                                                (RsType)type, (RsAllocationMipmapControl)mip,
729257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines                                                pixels, GetBitmapSize(_env, jbitmap), usage);
730257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        AndroidBitmap_unlockPixels(_env, jbitmap);
731257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
732c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
733c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
734c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
735c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic int
736c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
737c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
738257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    jint id = 0;
739257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    void *pixels = NULL;
740257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
741c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
742257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (pixels != NULL) {
743470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        id = (jint)dispatchTab.AllocationCreateTyped(con,
744257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines                                          (RsType)type, (RsAllocationMipmapControl)mip,
745257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines                                          (uint32_t)usage, (uintptr_t)pixels);
746257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        AndroidBitmap_unlockPixels(_env, jbitmap);
747257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
748c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
749c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
750c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
751c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic int
752c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
753c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
754c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
755c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
756c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
757c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint id = 0;
758c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
759470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        id = (jint)dispatchTab.AllocationCubeCreateFromBitmap(con,
760c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                                    (RsType)type, (RsAllocationMipmapControl)mip,
761c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                                    pixels, GetBitmapSize(_env, jbitmap), usage);
762c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
763c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
764c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
765c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
766c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
767c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
768c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
769c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
770c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
771c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
772c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(_env, jbitmap, &info);
773c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
774c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
775c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
776c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
777c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
778470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        dispatchTab.Allocation2DData(con, (RsAllocation)alloc, 0, 0,
779c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                           0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
780c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                           info.width, info.height, pixels, GetBitmapSize(_env, jbitmap), 0);
781c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
782c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
783c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
784c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
785c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
786c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
787c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
788c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmapInfo info;
789c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    memset(&info, 0, sizeof(info));
790c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_getInfo(_env, jbitmap, &info);
791c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
792c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    void *pixels = NULL;
793c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AndroidBitmap_lockPixels(_env, jbitmap, &pixels);
794c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
795c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (pixels != NULL) {
796470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang        dispatchTab.AllocationCopyToBitmap(con, (RsAllocation)alloc, pixels, GetBitmapSize(_env, jbitmap));
797c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        AndroidBitmap_unlockPixels(_env, jbitmap);
798c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
799c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    //bitmap.notifyPixelsChanged();
800c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
801c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
802c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
803c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
804c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
805c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
806c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
807c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
808c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
809470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
810c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
811c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
812c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
813c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
814c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
815c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
816c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
817c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
818c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
819470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
820c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
821c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
822c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
823c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
824c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
825c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
826c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
827c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
828c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
829470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
830c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
831c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
832c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
833c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
834c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
835c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
836c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
837c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
838c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
839470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
840c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
841c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
842c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
843c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
844c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
845c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
846c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
847c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
848c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
849c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
850470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx);
851c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
852c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
853c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
854c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
855c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
856c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jshortArray data, int sizeBytes)
857c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
858c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
859c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation2DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
860c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
861470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
862c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
863c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
864c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
865c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
866c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
867c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jbyteArray data, int sizeBytes)
868c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
869c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
870c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation2DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
871c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
872470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
873c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
874c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
875c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
876c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
877c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
878c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jintArray data, int sizeBytes)
879c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
880c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
881c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    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);
882c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
883470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
884c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
885c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
886c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
887c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
888c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
889c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jfloatArray data, int sizeBytes)
890c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
891c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
892c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    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);
893c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
894470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes, 0);
895c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
896c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
897c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
898c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
899c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData2D_alloc(JNIEnv *_env, jobject _this, RsContext con,
900c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstAlloc, jint dstXoff, jint dstYoff,
901c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstMip, jint dstFace,
902c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint width, jint height,
903c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcAlloc, jint srcXoff, jint srcYoff,
904c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcMip, jint srcFace)
905c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
906c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
907c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " dstMip(%i), dstFace(%i), width(%i), height(%i),"
908c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
909c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
910c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
911c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
912470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationCopy2DRange(con,
913c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            (RsAllocation)dstAlloc,
914c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            dstXoff, dstYoff,
915c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            dstMip, dstFace,
916c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            width, height,
917c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            (RsAllocation)srcAlloc,
918c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            srcXoff, srcYoff,
919c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            srcMip, srcFace);
920c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
921c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
922c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
923c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData3D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod,
924c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jint d, jshortArray data, int sizeBytes)
925c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
926c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
927c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation3DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
928c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
929470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
930c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
931c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
932c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
933c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
934c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData3D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod,
935c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jint d, jbyteArray data, int sizeBytes)
936c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
937c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
938c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation3DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
939c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
940470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
941c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
942c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
943c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
944c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
945c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData3D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod,
946c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jint d, jintArray data, int sizeBytes)
947c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
948c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
949c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation3DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
950c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
951470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
952c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
953c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
954c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
955c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
956c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData3D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod,
957c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                    jint w, jint h, jint d, jfloatArray data, int sizeBytes)
958c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
959c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
960c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocation3DData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len);
961c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
962470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.Allocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
963c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
964c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
965c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
966c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
967c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationData3D_alloc(JNIEnv *_env, jobject _this, RsContext con,
968c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
969c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint dstMip,
970c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint width, jint height, jint depth,
971c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
972c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                        jint srcMip)
973c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
974c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
975c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " dstMip(%i), width(%i), height(%i),"
976c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
977c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
978c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
979c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
980470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationCopy3DRange(con,
981c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            (RsAllocation)dstAlloc,
982c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            dstXoff, dstYoff, dstZoff, dstMip,
983c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            width, height, depth,
984c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            (RsAllocation)srcAlloc,
985c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                            srcXoff, srcYoff, srcZoff, srcMip);
986c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
987c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
988c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
989c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
990c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
991c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
992c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
993c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *ptr = _env->GetIntArrayElements(data, NULL);
994c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
995470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(int));
996c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(data, ptr, 0);
997c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
998c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
999c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1000c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
1001c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1002c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
1003c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
1004c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jshort *ptr = _env->GetShortArrayElements(data, NULL);
1005c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
1006470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(short));
1007c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseShortArrayElements(data, ptr, 0);
1008c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1009c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1010c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1011c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
1012c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1013c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
1014c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
1015c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1016c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
1017470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(char));
1018c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, 0);
1019c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1020c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1021c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1022c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
1023c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1024c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
1025c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
1026c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
1027c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jsize length = _env->GetArrayLength(data);
1028470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(float));
1029c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseFloatArrayElements(data, ptr, 0);
1030c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1031c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1032c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
1033c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
1034c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1035c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
1036470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return (jint) dispatchTab.AllocationGetType(con, (RsAllocation)a);
1037c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1038c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1039c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1040c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
1041c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1042c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
1043470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.AllocationResize1D(con, (RsAllocation)alloc, dimX);
1044c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1045c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1046c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
1047c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1048c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1049c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
1050c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1051c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
1052470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
1053c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1054c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1055c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1056c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
1057c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1058c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
1059470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarI(con, (RsScript)script, slot, val);
1060c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1061c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1062c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1063c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
1064c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1065c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
1066470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
1067c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1068c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1069c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1070c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
1071c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1072c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
1073470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarJ(con, (RsScript)script, slot, val);
1074c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1075c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1076c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1077c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
1078c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1079c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
1080470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarF(con, (RsScript)script, slot, val);
1081c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1082c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1083c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1084c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
1085c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1086c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
1087470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarD(con, (RsScript)script, slot, val);
1088c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1089c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1090c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1091c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
1092c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1093c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
1094c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
1095c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1096470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarV(con, (RsScript)script, slot, ptr, len);
1097c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1098c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1099c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1100c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1101c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetVarVE(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data, jint elem, jintArray dims)
1102c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1103c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
1104c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
1105c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1106c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1107c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
1108470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetVarVE(con, (RsScript)script, slot, ptr, len, (RsElement)elem,
11091bb70c5cd78ab10ee54376f76d78b61c8352baddStephen Hines                     (const uint32_t *)dimsPtr, dimsLen);
1110c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1111c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1112c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1113c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1114c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1115c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1116c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
1117c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1118c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
1119c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1120c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint length = _env->GetArrayLength(timeZone);
1121c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte* timeZone_ptr;
1122c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1123c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1124470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
1125c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1126c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (timeZone_ptr) {
1127c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1128c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1129c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1130c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1131c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1132c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
1133c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1134c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
1135470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptInvoke(con, (RsScript)obj, slot);
1136c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1137c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1138c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1139c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
1140c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1141c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
1142c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(data);
1143c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
1144470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptInvokeV(con, (RsScript)script, slot, ptr, len);
1145c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1146c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1147c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1148c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1149c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptForEach(JNIEnv *_env, jobject _this, RsContext con,
1150c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jint script, jint slot, jint ain, jint aout)
1151c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1152c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
1153470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, NULL, 0);
1154c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1155c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1156c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptForEachV(JNIEnv *_env, jobject _this, RsContext con,
1157c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                jint script, jint slot, jint ain, jint aout, jbyteArray params)
1158c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1159c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
1160c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(params);
1161c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1162470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, NULL, 0);
1163c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1164c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1165c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1166c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1167c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptForEachClipped(JNIEnv *_env, jobject _this, RsContext con,
1168c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                      jint script, jint slot, jint ain, jint aout,
1169c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                      jint xstart, jint xend,
1170c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                      jint ystart, jint yend, jint zstart, jint zend)
1171c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1172c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
1173c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    RsScriptCall sc;
1174c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xStart = xstart;
1175c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xEnd = xend;
1176c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yStart = ystart;
1177c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yEnd = yend;
1178c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zStart = zstart;
1179c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zEnd = zend;
1180c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1181c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayStart = 0;
1182c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayEnd = 0;
1183470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0, &sc, sizeof(sc));
1184c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1185c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1186c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1187c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptForEachClippedV(JNIEnv *_env, jobject _this, RsContext con,
1188c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jint script, jint slot, jint ain, jint aout,
1189c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jbyteArray params, jint xstart, jint xend,
1190c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                       jint ystart, jint yend, jint zstart, jint zend)
1191c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1192c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptForEachClipped, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
1193c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint len = _env->GetArrayLength(params);
1194c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
1195c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    RsScriptCall sc;
1196c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xStart = xstart;
1197c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.xEnd = xend;
1198c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yStart = ystart;
1199c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.yEnd = yend;
1200c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zStart = zstart;
1201c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.zEnd = zend;
1202c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
1203c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayStart = 0;
1204c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    sc.arrayEnd = 0;
1205470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len, &sc, sizeof(sc));
1206c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
1207c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1208c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1209c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// -----------------------------------
1210c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1211c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
1212c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptCCreate(JNIEnv *_env, jobject _this, RsContext con,
1213c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jstring resName, jstring cacheDir,
1214c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jbyteArray scriptRef, jint length)
1215c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1216c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptCCreate, con(%p)", con);
1217c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1218c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8 resNameUTF(_env, resName);
1219c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
1220c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint ret = 0;
1221c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jbyte* script_ptr = NULL;
1222c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint _exception = 0;
1223c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint remaining;
1224c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (!scriptRef) {
1225c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
1226c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
1227c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
1228c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1229c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (length < 0) {
1230c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
1231c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
1232c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
1233c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1234c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    remaining = _env->GetArrayLength(scriptRef);
1235c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (remaining < length) {
1236c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _exception = 1;
1237c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //jniThrowException(_env, "java/lang/IllegalArgumentException",
1238c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        //        "length > script.length - offset");
1239c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto exit;
1240c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1241c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    script_ptr = (jbyte *)
1242c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
1243c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1244c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    //rsScriptCSetText(con, (const char *)script_ptr, length);
1245c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1246470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    ret = (jint)dispatchTab.ScriptCCreate(con,
1247c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                resNameUTF.c_str(), resNameUTF.length(),
1248c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                cacheDirUTF.c_str(), cacheDirUTF.length(),
1249c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                (const char *)script_ptr, length);
1250c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1251c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainexit:
1252c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (script_ptr) {
1253c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
1254c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                _exception ? JNI_ABORT: 0);
1255c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1256c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1257c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return ret;
1258c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1259c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1260c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
1261c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptIntrinsicCreate(JNIEnv *_env, jobject _this, RsContext con, jint id, jint eid)
1262c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1263c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", con, id, (void *)eid);
1264470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return (jint)dispatchTab.ScriptIntrinsicCreate(con, id, (RsElement)eid);
1265c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1266c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1267c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
1268c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptKernelIDCreate(JNIEnv *_env, jobject _this, RsContext con, jint sid, jint slot, jint sig)
1269c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1270c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con, (void *)sid, slot, sig);
1271470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return (jint)dispatchTab.ScriptKernelIDCreate(con, (RsScript)sid, slot, sig);
1272c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1273c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1274c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
1275c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptFieldIDCreate(JNIEnv *_env, jobject _this, RsContext con, jint sid, jint slot)
1276c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1277c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", con, (void *)sid, slot);
1278470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return (jint)dispatchTab.ScriptFieldIDCreate(con, (RsScript)sid, slot);
1279c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1280c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1281c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
1282c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptGroupCreate(JNIEnv *_env, jobject _this, RsContext con, jintArray _kernels, jintArray _src,
1283c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jintArray _dstk, jintArray _dstf, jintArray _types)
1284c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1285c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptGroupCreate, con(%p)", con);
1286c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1287c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint kernelsLen = _env->GetArrayLength(_kernels) * sizeof(int);
1288c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *kernelsPtr = _env->GetIntArrayElements(_kernels, NULL);
1289c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint srcLen = _env->GetArrayLength(_src) * sizeof(int);
1290c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *srcPtr = _env->GetIntArrayElements(_src, NULL);
1291c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint dstkLen = _env->GetArrayLength(_dstk) * sizeof(int);
1292c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *dstkPtr = _env->GetIntArrayElements(_dstk, NULL);
1293c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint dstfLen = _env->GetArrayLength(_dstf) * sizeof(int);
1294c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *dstfPtr = _env->GetIntArrayElements(_dstf, NULL);
1295c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint typesLen = _env->GetArrayLength(_types) * sizeof(int);
1296c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint *typesPtr = _env->GetIntArrayElements(_types, NULL);
1297c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1298470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    int id = (int)dispatchTab.ScriptGroupCreate(con,
1299c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                               (RsScriptKernelID *)kernelsPtr, kernelsLen,
1300c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                               (RsScriptKernelID *)srcPtr, srcLen,
1301c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                               (RsScriptKernelID *)dstkPtr, dstkLen,
1302c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                               (RsScriptFieldID *)dstfPtr, dstfLen,
1303c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                               (RsType *)typesPtr, typesLen);
1304c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1305c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_kernels, kernelsPtr, 0);
1306c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_src, srcPtr, 0);
1307c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_dstk, dstkPtr, 0);
1308c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_dstf, dstfPtr, 0);
1309c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    _env->ReleaseIntArrayElements(_types, typesPtr, 0);
1310c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return id;
1311c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1312c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1313c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1314c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptGroupSetInput(JNIEnv *_env, jobject _this, RsContext con, jint gid, jint kid, jint alloc)
1315c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1316c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", con,
1317c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        (void *)gid, (void *)kid, (void *)alloc);
1318470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptGroupSetInput(con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
1319c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1320c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1321c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1322c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptGroupSetOutput(JNIEnv *_env, jobject _this, RsContext con, jint gid, jint kid, jint alloc)
1323c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1324c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", con,
1325c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        (void *)gid, (void *)kid, (void *)alloc);
1326470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptGroupSetOutput(con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
1327c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1328c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1329c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic void
1330c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnScriptGroupExecute(JNIEnv *_env, jobject _this, RsContext con, jint gid)
1331c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1332c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", con, (void *)gid);
1333470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    dispatchTab.ScriptGroupExecute(con, (RsScriptGroup)gid);
1334c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1335c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1336c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1337c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1338c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic jint
1339c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott MainnSamplerCreate(JNIEnv *_env, jobject _this, RsContext con, jint magFilter, jint minFilter,
1340c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
1341c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1342c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    LOG_API("nSamplerCreate, con(%p)", con);
1343470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang    return (jint)dispatchTab.SamplerCreate(con,
1344c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 (RsSamplerValue)magFilter,
1345c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 (RsSamplerValue)minFilter,
1346c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 (RsSamplerValue)wrapS,
1347c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 (RsSamplerValue)wrapT,
1348c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 (RsSamplerValue)wrapR,
1349c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main                                 aniso);
1350c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1351c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1352c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1353c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1354c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1355c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic const char *classPathName = "android/support/v8/renderscript/RenderScript";
1356c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1357c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainstatic JNINativeMethod methods[] = {
1358470b3b5b70ec71042d30004747c625ca76c4007aMiao Wang{"nLoadSO",                        "(Z)Z",                                    (bool*)nLoadSO },
1359c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nDeviceCreate",                  "()I",                                     (void*)nDeviceCreate },
1360c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nDeviceDestroy",                 "(I)V",                                    (void*)nDeviceDestroy },
1361c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nDeviceSetConfig",               "(III)V",                                  (void*)nDeviceSetConfig },
1362c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nContextGetUserMessage",         "(I[I)I",                                  (void*)nContextGetUserMessage },
1363c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nContextGetErrorMessage",        "(I)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1364c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nContextPeekMessage",            "(I[I)I",                                  (void*)nContextPeekMessage },
1365c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1366c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nContextInitToClient",           "(I)V",                                    (void*)nContextInitToClient },
1367c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"nContextDeinitToClient",         "(I)V",                                    (void*)nContextDeinitToClient },
1368c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1369c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1370c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// All methods below are thread protected in java.
1371c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextCreate",                 "(IIII)I",                               (void*)nContextCreate },
1372c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextFinish",                 "(I)V",                                  (void*)nContextFinish },
1373c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextSetPriority",            "(II)V",                                 (void*)nContextSetPriority },
1374c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextDestroy",                "(I)V",                                  (void*)nContextDestroy },
1375c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
1376c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnContextSendMessage",            "(II[I)V",                               (void*)nContextSendMessage },
1377c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnObjDestroy",                    "(II)V",                                 (void*)nObjDestroy },
1378c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1379c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnElementCreate",                 "(IIIZI)I",                              (void*)nElementCreate },
1380c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnElementCreate2",                "(I[I[Ljava/lang/String;[I)I",           (void*)nElementCreate2 },
1381c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnElementGetSubElements",         "(II[I[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
1382c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1383c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnTypeCreate",                    "(IIIIIZZI)I",                           (void*)nTypeCreate },
1384c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1385c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCreateTyped",         "(IIIII)I",                               (void*)nAllocationCreateTyped },
1386c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCreateFromBitmap",    "(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCreateFromBitmap },
1387c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCreateBitmapBackedAllocation",    "(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCreateBitmapBackedAllocation },
1388c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCubeCreateFromBitmap },
1389c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1390c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCopyFromBitmap",      "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
1391c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationCopyToBitmap",        "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
1392c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1393c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationSyncAll",             "(III)V",                                (void*)nAllocationSyncAll },
1394c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData1D",              "(IIIII[II)V",                           (void*)nAllocationData1D_i },
1395c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData1D",              "(IIIII[SI)V",                           (void*)nAllocationData1D_s },
1396c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData1D",              "(IIIII[BI)V",                           (void*)nAllocationData1D_b },
1397c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData1D",              "(IIIII[FI)V",                           (void*)nAllocationData1D_f },
1398c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationElementData1D",       "(IIIII[BI)V",                           (void*)nAllocationElementData1D },
1399c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData2D",              "(IIIIIIII[II)V",                        (void*)nAllocationData2D_i },
1400c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData2D",              "(IIIIIIII[SI)V",                        (void*)nAllocationData2D_s },
1401c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData2D",              "(IIIIIIII[BI)V",                        (void*)nAllocationData2D_b },
1402c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData2D",              "(IIIIIIII[FI)V",                        (void*)nAllocationData2D_f },
1403c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData2D",              "(IIIIIIIIIIIII)V",                      (void*)nAllocationData2D_alloc },
1404c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData3D",              "(IIIIIIIII[II)V",                       (void*)nAllocationData3D_i },
1405c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData3D",              "(IIIIIIIII[SI)V",                       (void*)nAllocationData3D_s },
1406c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData3D",              "(IIIIIIIII[BI)V",                       (void*)nAllocationData3D_b },
1407c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData3D",              "(IIIIIIIII[FI)V",                       (void*)nAllocationData3D_f },
1408c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationData3D",              "(IIIIIIIIIIIIII)V",                     (void*)nAllocationData3D_alloc },
1409c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationRead",                "(II[I)V",                               (void*)nAllocationRead_i },
1410c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationRead",                "(II[S)V",                               (void*)nAllocationRead_s },
1411c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationRead",                "(II[B)V",                               (void*)nAllocationRead_b },
1412c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationRead",                "(II[F)V",                               (void*)nAllocationRead_f },
1413c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationGetType",             "(II)I",                                 (void*)nAllocationGetType},
1414c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationResize1D",            "(III)V",                                (void*)nAllocationResize1D },
1415c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnAllocationGenerateMipmaps",     "(II)V",                                 (void*)nAllocationGenerateMipmaps },
1416c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1417c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptBindAllocation",          "(IIII)V",                               (void*)nScriptBindAllocation },
1418c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetTimeZone",             "(II[B)V",                               (void*)nScriptSetTimeZone },
1419c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptInvoke",                  "(III)V",                                (void*)nScriptInvoke },
1420c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptInvokeV",                 "(III[B)V",                              (void*)nScriptInvokeV },
1421c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptForEach",                 "(IIIII)V",                              (void*)nScriptForEach },
1422c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptForEach",                 "(IIIII[B)V",                            (void*)nScriptForEachV },
1423c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptForEachClipped",          "(IIIIIIIIIII)V",                        (void*)nScriptForEachClipped },
1424c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptForEachClipped",          "(IIIII[BIIIIII)V",                      (void*)nScriptForEachClippedV },
1425c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarI",                 "(IIII)V",                               (void*)nScriptSetVarI },
1426c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarJ",                 "(IIIJ)V",                               (void*)nScriptSetVarJ },
1427c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarF",                 "(IIIF)V",                               (void*)nScriptSetVarF },
1428c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarD",                 "(IIID)V",                               (void*)nScriptSetVarD },
1429c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarV",                 "(III[B)V",                              (void*)nScriptSetVarV },
1430c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarVE",                "(III[BI[I)V",                           (void*)nScriptSetVarVE },
1431c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptSetVarObj",               "(IIII)V",                               (void*)nScriptSetVarObj },
1432c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1433c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptCCreate",                 "(ILjava/lang/String;Ljava/lang/String;[BI)I",  (void*)nScriptCCreate },
1434c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptIntrinsicCreate",         "(III)I",                                (void*)nScriptIntrinsicCreate },
1435c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptKernelIDCreate",          "(IIII)I",                               (void*)nScriptKernelIDCreate },
1436c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptFieldIDCreate",           "(III)I",                                (void*)nScriptFieldIDCreate },
1437c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptGroupCreate",             "(I[I[I[I[I[I)I",                        (void*)nScriptGroupCreate },
1438c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptGroupSetInput",           "(IIII)V",                               (void*)nScriptGroupSetInput },
1439c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptGroupSetOutput",          "(IIII)V",                               (void*)nScriptGroupSetOutput },
1440c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnScriptGroupExecute",            "(II)V",                                 (void*)nScriptGroupExecute },
1441c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1442c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{"rsnSamplerCreate",                 "(IIIIIIF)I",                            (void*)nSamplerCreate },
1443c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1444c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main};
1445c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1446c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main// ---------------------------------------------------------------------------
1447c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1448c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainjint JNI_OnLoad(JavaVM* vm, void* reserved)
1449c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main{
1450c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    JNIEnv* env = NULL;
1451257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    jclass clazz = NULL;
1452c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    jint result = -1;
1453c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1454c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1455184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
1456184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "ERROR: GetEnv failed\n");
1457257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        goto bail;
1458257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
1459257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (env == NULL) {
1460184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: env == NULL");
1461257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines        goto bail;
1462257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    }
1463257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines
1464257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    clazz = env->FindClass(classPathName);
1465257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (clazz == NULL) {
1466c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto bail;
1467c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1468c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1469257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines    if (env->RegisterNatives(clazz, methods, NELEM(methods)) < 0) {
1470184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //        __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
1471184d51999d546d11dd18d2f5f848871f8459a230Tim Murray        //            "ERROR: MediaPlayer native registration failed\n");
1472c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main        goto bail;
1473c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    }
1474c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1475c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    /* success -- return valid version number */
1476c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    result = JNI_VERSION_1_4;
1477c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main
1478c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Mainbail:
1479c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main    return result;
1480c89ad4606ae29e103b85bdfc40c57e36c8877dbaScott Main}
1481