android_renderscript_RenderScript.cpp revision 47f31582b67f492d9e1523abd0d8b86c38ec007d
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/*
24cbe25a86b4aa3353c8016a129028671e902611fStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project
3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License.
6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at
7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software
11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and
14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License.
15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */
16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
17f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams#define LOG_TAG "libRS_jni"
18f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdlib.h>
20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdio.h>
21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <fcntl.h>
22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <unistd.h>
23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <math.h>
24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <utils/misc.h>
2509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer#include <inttypes.h>
26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
27eece0dda56ae29fff6e9003df97594f6ac50b6e2Derek Sollenberger#include <SkBitmap.h>
28ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
29b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/Asset.h>
30b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h>
31b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h>
32f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h"
34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h"
35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h"
36ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h"
37b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h"
38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
391d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rs.h>
401d6983af336b2b1d3a24aece58ce0850aa79e8a0Jason Sams#include <rsEnv.h>
41fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams#include <gui/Surface.h>
42d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden#include <gui/GLConsumer.h>
43faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h>
44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
453762c311729fe9f3af085c14c5c1fb471d994c03Steve Block//#define LOG_API ALOGE
4667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampestatic constexpr bool kLogApi = false;
47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
48d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
5067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampetemplate <typename... T>
5167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampevoid UNUSED(T... t) {}
5267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe
53414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines#define PER_ARRAY_TYPE(flag, fnc, readonly, ...) {                                      \
54e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    jint len = 0;                                                                       \
55488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    void *ptr = nullptr;                                                                \
5687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    void *srcPtr = nullptr;                                                             \
5721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    size_t typeBytes = 0;                                                               \
58414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    jint relFlag = 0;                                                                   \
59414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    if (readonly) {                                                                     \
60414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        /* The on-release mode should only be JNI_ABORT for read-only accesses. */      \
6187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        /* readonly = true, also indicates we are copying to the allocation   . */      \
62414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        relFlag = JNI_ABORT;                                                            \
63414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    }                                                                                   \
64e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    switch(dataType) {                                                                  \
65e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_FLOAT_32:                                                              \
66e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jfloatArray)data);                                  \
67e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetFloatArrayElements((jfloatArray)data, flag);                     \
6821659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 4;                                                                  \
6987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        if (usePadding) {                                                               \
7087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            srcPtr = ptr;                                                               \
7187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            len = len / 3 * 4;                                                          \
7287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (count == 0) {                                                           \
7387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                count = len / 4;                                                        \
7487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
7587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = malloc (len * typeBytes);                                             \
7687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (readonly) {                                                             \
7787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithPadding(ptr, srcPtr, mSize, count);                             \
7887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
7987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            } else {                                                                    \
8087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
8187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithUnPadding(srcPtr, ptr, mSize, count);                           \
8287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
8387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            free(ptr);                                                                  \
8487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = srcPtr;                                                               \
8587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        } else {                                                                        \
8687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            fnc(__VA_ARGS__);                                                           \
8787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        }                                                                               \
88414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, relFlag);     \
89e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
90e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_FLOAT_64:                                                              \
91e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jdoubleArray)data);                                 \
92e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag);                   \
9321659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 8;                                                                  \
9487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        if (usePadding) {                                                               \
9587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            srcPtr = ptr;                                                               \
9687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            len = len / 3 * 4;                                                          \
9787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (count == 0) {                                                           \
9887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                count = len / 4;                                                        \
9987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
10087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = malloc (len * typeBytes);                                             \
10187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (readonly) {                                                             \
10287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithPadding(ptr, srcPtr, mSize, count);                             \
10387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
10487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            } else {                                                                    \
10587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
10687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithUnPadding(srcPtr, ptr, mSize, count);                           \
10787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
10887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            free(ptr);                                                                  \
10987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = srcPtr;                                                               \
11087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        } else {                                                                        \
11187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            fnc(__VA_ARGS__);                                                           \
11287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        }                                                                               \
113414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, relFlag);  \
114e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
115e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_8:                                                              \
116e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_8:                                                            \
117e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jbyteArray)data);                                   \
118e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetByteArrayElements((jbyteArray)data, flag);                       \
11921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 1;                                                                  \
12087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        if (usePadding) {                                                               \
12187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            srcPtr = ptr;                                                               \
12287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            len = len / 3 * 4;                                                          \
12387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (count == 0) {                                                           \
12487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                count = len / 4;                                                        \
12587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
12687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = malloc (len * typeBytes);                                             \
12787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (readonly) {                                                             \
12887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithPadding(ptr, srcPtr, mSize, count);                             \
12987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
13087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            } else {                                                                    \
13187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
13287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithUnPadding(srcPtr, ptr, mSize, count);                           \
13387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
13487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            free(ptr);                                                                  \
13587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = srcPtr;                                                               \
13687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        } else {                                                                        \
13787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            fnc(__VA_ARGS__);                                                           \
13887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        }                                                                               \
139414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, relFlag);         \
140e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
141e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_16:                                                             \
142e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_16:                                                           \
143e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jshortArray)data);                                  \
144e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetShortArrayElements((jshortArray)data, flag);                     \
14521659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 2;                                                                  \
14687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        if (usePadding) {                                                               \
14787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            srcPtr = ptr;                                                               \
14887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            len = len / 3 * 4;                                                          \
14987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (count == 0) {                                                           \
15087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                count = len / 4;                                                        \
15187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
15287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = malloc (len * typeBytes);                                             \
15387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (readonly) {                                                             \
15487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithPadding(ptr, srcPtr, mSize, count);                             \
15587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
15687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            } else {                                                                    \
15787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
15887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithUnPadding(srcPtr, ptr, mSize, count);                           \
15987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
16087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            free(ptr);                                                                  \
16187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = srcPtr;                                                               \
16287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        } else {                                                                        \
16387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            fnc(__VA_ARGS__);                                                           \
16487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        }                                                                               \
165414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, relFlag);     \
166e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
167e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_32:                                                             \
168e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_32:                                                           \
169e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jintArray)data);                                    \
170e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetIntArrayElements((jintArray)data, flag);                         \
17121659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 4;                                                                  \
17287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        if (usePadding) {                                                               \
17387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            srcPtr = ptr;                                                               \
17487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            len = len / 3 * 4;                                                          \
17587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (count == 0) {                                                           \
17687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                count = len / 4;                                                        \
17787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
17887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = malloc (len * typeBytes);                                             \
17987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (readonly) {                                                             \
18087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithPadding(ptr, srcPtr, mSize, count);                             \
18187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
18287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            } else {                                                                    \
18387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
18487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithUnPadding(srcPtr, ptr, mSize, count);                           \
18587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
18687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            free(ptr);                                                                  \
18787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = srcPtr;                                                               \
18887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        } else {                                                                        \
18987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            fnc(__VA_ARGS__);                                                           \
19087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        }                                                                               \
191414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, relFlag);           \
192e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
193e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_SIGNED_64:                                                             \
194e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    case RS_TYPE_UNSIGNED_64:                                                           \
195e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        len = _env->GetArrayLength((jlongArray)data);                                   \
196e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        ptr = _env->GetLongArrayElements((jlongArray)data, flag);                       \
19721659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams        typeBytes = 8;                                                                  \
19887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        if (usePadding) {                                                               \
19987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            srcPtr = ptr;                                                               \
20087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            len = len / 3 * 4;                                                          \
20187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (count == 0) {                                                           \
20287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                count = len / 4;                                                        \
20387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
20487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = malloc (len * typeBytes);                                             \
20587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            if (readonly) {                                                             \
20687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithPadding(ptr, srcPtr, mSize, count);                             \
20787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
20887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            } else {                                                                    \
20987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                fnc(__VA_ARGS__);                                                       \
21087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                copyWithUnPadding(srcPtr, ptr, mSize, count);                           \
21187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            }                                                                           \
21287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            free(ptr);                                                                  \
21387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            ptr = srcPtr;                                                               \
21487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        } else {                                                                        \
21587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang            fnc(__VA_ARGS__);                                                           \
21687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        }                                                                               \
217414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines        _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, relFlag);        \
218e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        return;                                                                         \
219e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    default:                                                                            \
220e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams        break;                                                                          \
221e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    }                                                                                   \
22287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    UNUSED(len, ptr, srcPtr, typeBytes, relFlag);                                       \
223e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams}
224e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams
225e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams
226b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 {
227b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic:
2282123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str) {
229488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        fCStr = env->GetStringUTFChars(str, nullptr);
230b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fLength = env->GetStringUTFLength(str);
231b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
2322123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringToUTF8() {
233b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
234b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
235b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* c_str() const { return fCStr; }
236b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize length() const { return fLength; }
237b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
238b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate:
239b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    JNIEnv*     fEnv;
240b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jstring     fJStr;
241b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* fCStr;
242b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize       fLength;
243b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk};
244b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
2452123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukclass AutoJavaStringArrayToUTF8 {
2462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukpublic:
2472123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8(JNIEnv* env, jobjectArray strings, jsize stringsLength)
2482123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    : mEnv(env), mStrings(strings), mStringsLength(stringsLength) {
249488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        mCStrings = nullptr;
250488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        mSizeArray = nullptr;
2512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        if (stringsLength > 0) {
2522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mCStrings = (const char **)calloc(stringsLength, sizeof(char *));
2532123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mSizeArray = (size_t*)calloc(stringsLength, sizeof(size_t));
2542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            for (jsize ct = 0; ct < stringsLength; ct ++) {
2552123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
256488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes                mCStrings[ct] = mEnv->GetStringUTFChars(s, nullptr);
2572123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                mSizeArray[ct] = mEnv->GetStringUTFLength(s);
2582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            }
2592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
2602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
2612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    ~AutoJavaStringArrayToUTF8() {
2622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        for (jsize ct=0; ct < mStringsLength; ct++) {
2632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            jstring s = (jstring)mEnv->GetObjectArrayElement(mStrings, ct);
2642123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk            mEnv->ReleaseStringUTFChars(s, mCStrings[ct]);
2652123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        }
2662123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mCStrings);
2672123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        free(mSizeArray);
2682123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    }
2692123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **c_str() const { return mCStrings; }
2702123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *c_str_len() const { return mSizeArray; }
2712123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize length() const { return mStringsLength; }
2722123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
2732123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchoukprivate:
2742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    JNIEnv      *mEnv;
2752123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jobjectArray mStrings;
2762123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **mCStrings;
2772123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t      *mSizeArray;
2782123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    jsize        mStringsLength;
2792123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk};
2802123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
281d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
282d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
283ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
284ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
285d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
286d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
287d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
288eff663f391fa4f119685d5c14489b94661ea126fTim Murray    gContextId             = _env->GetFieldID(_this, "mContext", "J");
289ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
290ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
29136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J");
292d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
293d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
294d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
295d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
29687e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithPadding(void* ptr, void* srcPtr, int mSize, int count) {
29787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    int sizeBytesPad = mSize * 4;
29887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    int sizeBytes = mSize * 3;
29987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    uint8_t *dst = static_cast<uint8_t *>(ptr);
30087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    uint8_t *src = static_cast<uint8_t *>(srcPtr);
30187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    for (int i = 0; i < count; i++) {
30287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        memcpy(dst, src, sizeBytes);
30387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        dst += sizeBytesPad;
30487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        src += sizeBytes;
30587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    }
30687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang}
30787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang
30887e908dfdece91b5f504386d4901fa3342dc8083Miao Wangstatic void copyWithUnPadding(void* ptr, void* srcPtr, int mSize, int count) {
30987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    int sizeBytesPad = mSize * 4;
31087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    int sizeBytes = mSize * 3;
31187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    uint8_t *dst = static_cast<uint8_t *>(ptr);
31287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    uint8_t *src = static_cast<uint8_t *>(srcPtr);
31387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    for (int i = 0; i < count; i++) {
31487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        memcpy(dst, src, sizeBytes);
31587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        dst += sizeBytes;
31687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang        src += sizeBytesPad;
31787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    }
31887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang}
31987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang
32087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang
32187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang// ---------------------------------------------------------------------------
3223eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
323eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextFinish(JNIEnv *_env, jobject _this, jlong con)
32496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
32567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
32667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextFinish, con(%p)", (RsContext)con);
32767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
328eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextFinish((RsContext)con);
32996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
33096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
331281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic jlong
332281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID,
333281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni               jlong returnValue, jlongArray fieldIDArray,
334281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni               jlongArray valueArray, jintArray sizeArray,
335281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni               jlongArray depClosureArray, jlongArray depFieldIDArray) {
336281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
337281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
338281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  RsScriptFieldID* fieldIDs =
339281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
340281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  for (int i = 0; i< fieldIDs_length; i++) {
341281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni    fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
342281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  }
343281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
344281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
345281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize values_length = _env->GetArrayLength(valueArray);
346281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
347281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  for (int i = 0; i < values_length; i++) {
348281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni    values[i] = (uintptr_t)jValues[i];
349281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  }
350281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
351281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
352281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize sizes_length = _env->GetArrayLength(sizeArray);
353281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
354281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jlong* jDepClosures =
355281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      _env->GetLongArrayElements(depClosureArray, nullptr);
356281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize depClosures_length = _env->GetArrayLength(depClosureArray);
357281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  RsClosure* depClosures =
358281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length);
359281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  for (int i = 0; i < depClosures_length; i++) {
360281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni    depClosures[i] = (RsClosure)jDepClosures[i];
361281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  }
362281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
363281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jlong* jDepFieldIDs =
364281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      _env->GetLongArrayElements(depFieldIDArray, nullptr);
365281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray);
366281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  RsScriptFieldID* depFieldIDs =
367281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length);
368281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  for (int i = 0; i < depClosures_length; i++) {
369281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni    depFieldIDs[i] = (RsClosure)jDepFieldIDs[i];
370281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  }
371281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
372281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  return (jlong)(uintptr_t)rsClosureCreate(
373281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue,
374281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
3754c93c8c93a66a8932d84a52bd922c3b7ad1565bbYang Ni      (int*)sizes, (size_t)sizes_length,
376281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      depClosures, (size_t)depClosures_length,
377281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni      depFieldIDs, (size_t)depFieldIDs_length);
378281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni}
379281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
380be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong
381be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID,
382be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni                     jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray,
383be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni                     jintArray sizeArray) {
384be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr);
385be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jsize jParamLength = _env->GetArrayLength(paramArray);
386be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
387be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
388be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
389be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  RsScriptFieldID* fieldIDs =
390be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
391be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  for (int i = 0; i< fieldIDs_length; i++) {
392be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni    fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
393be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  }
394be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
395be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
396be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jsize values_length = _env->GetArrayLength(valueArray);
397be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
398be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  for (int i = 0; i < values_length; i++) {
399be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni    values[i] = (uintptr_t)jValues[i];
400be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  }
401be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
402be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
403be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  jsize sizes_length = _env->GetArrayLength(sizeArray);
404be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
405be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni  return (jlong)(uintptr_t)rsInvokeClosureCreate(
406be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni      (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength,
407be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni      fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
4084c93c8c93a66a8932d84a52bd922c3b7ad1565bbYang Ni      (int*)sizes, (size_t)sizes_length);
409be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni}
410be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
411281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void
412281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
413281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni               jint index, jlong value, jint size) {
414281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index,
415281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni                  (uintptr_t)value, (size_t)size);
416281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni}
417281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
418281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void
419281c3252510bcf4120d17fa0125f369c2c78f162Yang NinClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
420281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni                  jlong fieldID, jlong value, jint size) {
421281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  rsClosureSetGlobal((RsContext)con, (RsClosure)closureID,
422281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni                     (RsScriptFieldID)fieldID, (uintptr_t)value, (size_t)size);
423281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni}
424281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
425281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic long
426281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con,
427ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni                    jstring cacheDir, jlongArray closureArray) {
428ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni  AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
429ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni
430281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr);
431281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  jsize numClosures = _env->GetArrayLength(closureArray);
432281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
433281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  for (int i = 0; i < numClosures; i++) {
434281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni    closures[i] = (RsClosure)jClosures[i];
435281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  }
436281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
437ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni  return (jlong)(uintptr_t)rsScriptGroup2Create(
438ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni      (RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length(),
439ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni      closures, numClosures);
440281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni}
441281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
442281c3252510bcf4120d17fa0125f369c2c78f162Yang Nistatic void
443281c3252510bcf4120d17fa0125f369c2c78f162Yang NinScriptGroup2Execute(JNIEnv *_env, jobject _this, jlong con, jlong groupID) {
444281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni  rsScriptGroupExecute((RsContext)con, (RsScriptGroup2)groupID);
445281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni}
446281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni
44796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
44825207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Single(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA,
44925207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
45025207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jfloat alpha, jlong A, jlong B, jfloat beta, jlong C, jint incX, jint incY,
45125207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jint KL, jint KU) {
45225207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsBlasCall call;
45325207df658d6a8a3e885c7017fcc25702363583cTim Murray    memset(&call, 0, sizeof(call));
45425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.func = (RsBlasFunction)func;
45525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transA = (RsBlasTranspose)TransA;
45625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transB = (RsBlasTranspose)TransB;
45725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.side = (RsBlasSide)Side;
45825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.uplo = (RsBlasUplo)Uplo;
45925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.diag = (RsBlasDiag)Diag;
46025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.M = M;
46125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.N = N;
46225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.K = K;
46325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.f = alpha;
46425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.f = beta;
46525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incX = incX;
46625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incY = incY;
46725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KL = KL;
46825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KU = KU;
46925207df658d6a8a3e885c7017fcc25702363583cTim Murray
47025207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsAllocation in_allocs[3];
47125207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[0] = (RsAllocation)A;
47225207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[1] = (RsAllocation)B;
47325207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[2] = (RsAllocation)C;
47425207df658d6a8a3e885c7017fcc25702363583cTim Murray
47525207df658d6a8a3e885c7017fcc25702363583cTim Murray    rsScriptForEachMulti((RsContext)con, (RsScript)id, 0,
47625207df658d6a8a3e885c7017fcc25702363583cTim Murray                         in_allocs, sizeof(in_allocs), nullptr,
47725207df658d6a8a3e885c7017fcc25702363583cTim Murray                         &call, sizeof(call), nullptr, 0);
47825207df658d6a8a3e885c7017fcc25702363583cTim Murray}
47925207df658d6a8a3e885c7017fcc25702363583cTim Murray
48025207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void
48125207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Double(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA,
48225207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
48325207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jdouble alpha, jlong A, jlong B, jdouble beta, jlong C, jint incX, jint incY,
48425207df658d6a8a3e885c7017fcc25702363583cTim Murray                            jint KL, jint KU) {
48525207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsBlasCall call;
48625207df658d6a8a3e885c7017fcc25702363583cTim Murray    memset(&call, 0, sizeof(call));
48725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.func = (RsBlasFunction)func;
48825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transA = (RsBlasTranspose)TransA;
48925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transB = (RsBlasTranspose)TransB;
49025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.side = (RsBlasSide)Side;
49125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.uplo = (RsBlasUplo)Uplo;
49225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.diag = (RsBlasDiag)Diag;
49325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.M = M;
49425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.N = N;
49525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.K = K;
49625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.d = alpha;
49725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.d = beta;
49825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incX = incX;
49925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incY = incY;
50025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KL = KL;
50125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KU = KU;
50225207df658d6a8a3e885c7017fcc25702363583cTim Murray
50325207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsAllocation in_allocs[3];
50425207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[0] = (RsAllocation)A;
50525207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[1] = (RsAllocation)B;
50625207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[2] = (RsAllocation)C;
50725207df658d6a8a3e885c7017fcc25702363583cTim Murray
50825207df658d6a8a3e885c7017fcc25702363583cTim Murray    rsScriptForEachMulti((RsContext)con, (RsScript)id, 0,
50925207df658d6a8a3e885c7017fcc25702363583cTim Murray                         in_allocs, sizeof(in_allocs), nullptr,
51025207df658d6a8a3e885c7017fcc25702363583cTim Murray                         &call, sizeof(call), nullptr, 0);
51125207df658d6a8a3e885c7017fcc25702363583cTim Murray}
51225207df658d6a8a3e885c7017fcc25702363583cTim Murray
51325207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void
51425207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Complex(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA,
51525207df658d6a8a3e885c7017fcc25702363583cTim Murray                             jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
51625207df658d6a8a3e885c7017fcc25702363583cTim Murray                             jfloat alphaX, jfloat alphaY, jlong A, jlong B, jfloat betaX,
51725207df658d6a8a3e885c7017fcc25702363583cTim Murray                             jfloat betaY, jlong C, jint incX, jint incY, jint KL, jint KU) {
51825207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsBlasCall call;
51925207df658d6a8a3e885c7017fcc25702363583cTim Murray    memset(&call, 0, sizeof(call));
52025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.func = (RsBlasFunction)func;
52125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transA = (RsBlasTranspose)TransA;
52225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transB = (RsBlasTranspose)TransB;
52325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.side = (RsBlasSide)Side;
52425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.uplo = (RsBlasUplo)Uplo;
52525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.diag = (RsBlasDiag)Diag;
52625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.M = M;
52725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.N = N;
52825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.K = K;
52925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.c.r = alphaX;
53025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.c.i = alphaY;
53125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.c.r = betaX;
53225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.c.r = betaY;
53325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incX = incX;
53425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incY = incY;
53525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KL = KL;
53625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KU = KU;
53725207df658d6a8a3e885c7017fcc25702363583cTim Murray
53825207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsAllocation in_allocs[3];
53925207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[0] = (RsAllocation)A;
54025207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[1] = (RsAllocation)B;
54125207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[2] = (RsAllocation)C;
54225207df658d6a8a3e885c7017fcc25702363583cTim Murray
54325207df658d6a8a3e885c7017fcc25702363583cTim Murray    rsScriptForEachMulti((RsContext)con, (RsScript)id, 0,
54425207df658d6a8a3e885c7017fcc25702363583cTim Murray                         in_allocs, sizeof(in_allocs), nullptr,
54525207df658d6a8a3e885c7017fcc25702363583cTim Murray                         &call, sizeof(call), nullptr, 0);
54625207df658d6a8a3e885c7017fcc25702363583cTim Murray}
54725207df658d6a8a3e885c7017fcc25702363583cTim Murray
54825207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void
54925207df658d6a8a3e885c7017fcc25702363583cTim MurraynScriptIntrinsicBLAS_Z(JNIEnv *_env, jobject _this, jlong con, jlong id, jint func, jint TransA,
55025207df658d6a8a3e885c7017fcc25702363583cTim Murray                       jint TransB, jint Side, jint Uplo, jint Diag, jint M, jint N, jint K,
55125207df658d6a8a3e885c7017fcc25702363583cTim Murray                       jdouble alphaX, jdouble alphaY, jlong A, jlong B, jdouble betaX,
55225207df658d6a8a3e885c7017fcc25702363583cTim Murray                       jdouble betaY, jlong C, jint incX, jint incY, jint KL, jint KU) {
55325207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsBlasCall call;
55425207df658d6a8a3e885c7017fcc25702363583cTim Murray    memset(&call, 0, sizeof(call));
55525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.func = (RsBlasFunction)func;
55625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transA = (RsBlasTranspose)TransA;
55725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.transB = (RsBlasTranspose)TransB;
55825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.side = (RsBlasSide)Side;
55925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.uplo = (RsBlasUplo)Uplo;
56025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.diag = (RsBlasDiag)Diag;
56125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.M = M;
56225207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.N = N;
56325207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.K = K;
56425207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.z.r = alphaX;
56525207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.alpha.z.i = alphaY;
56625207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.z.r = betaX;
56725207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.beta.z.r = betaY;
56825207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incX = incX;
56925207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.incY = incY;
57025207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KL = KL;
57125207df658d6a8a3e885c7017fcc25702363583cTim Murray    call.KU = KU;
57225207df658d6a8a3e885c7017fcc25702363583cTim Murray
57325207df658d6a8a3e885c7017fcc25702363583cTim Murray    RsAllocation in_allocs[3];
57425207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[0] = (RsAllocation)A;
57525207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[1] = (RsAllocation)B;
57625207df658d6a8a3e885c7017fcc25702363583cTim Murray    in_allocs[2] = (RsAllocation)C;
57725207df658d6a8a3e885c7017fcc25702363583cTim Murray
57825207df658d6a8a3e885c7017fcc25702363583cTim Murray    rsScriptForEachMulti((RsContext)con, (RsScript)id, 0,
57925207df658d6a8a3e885c7017fcc25702363583cTim Murray                         in_allocs, sizeof(in_allocs), nullptr,
58025207df658d6a8a3e885c7017fcc25702363583cTim Murray                         &call, sizeof(call), nullptr, 0);
58125207df658d6a8a3e885c7017fcc25702363583cTim Murray}
58225207df658d6a8a3e885c7017fcc25702363583cTim Murray
58325207df658d6a8a3e885c7017fcc25702363583cTim Murray
58425207df658d6a8a3e885c7017fcc25702363583cTim Murraystatic void
585460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str)
5863eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
58767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
58867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
58967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
5903eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
5913eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
592eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len);
5933eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
5943eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
5953eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
596fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
597460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj)
598fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
59967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
60067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj);
60167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
602488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    const char *name = nullptr;
603eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaGetName((RsContext)con, (void *)obj, &name);
604488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if(name == nullptr || strlen(name) == 0) {
605488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        return nullptr;
606581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
607fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
608fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
609fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
6107ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
611460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj)
6127ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
61367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
61467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj);
61567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
616eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsObjDestroy((RsContext)con, (void *)obj);
6177ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
6187ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
6193eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
6203eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
621eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
622d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
623d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
62467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
62567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nDeviceCreate");
62667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
6273aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsDeviceCreate();
628d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
629d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
630d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
6315eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev)
632d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
63367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
63467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nDeviceDestroy");
63567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
636d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
637d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
638d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
639ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
6405eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value)
641ebfb436a49673693b98469683451bd9ede797557Jason Sams{
64267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
64367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
64467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
645ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
646ebfb436a49673693b98469683451bd9ede797557Jason Sams}
647ebfb436a49673693b98469683451bd9ede797557Jason Sams
648eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
64981cd2b18bd36285d1843f78418282e1dad156fbdJason SamsnContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint flags, jint sdkVer, jint contextType)
650d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
65167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
65267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextCreate");
65367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
65481cd2b18bd36285d1843f78418282e1dad156fbdJason Sams    return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, 0, sdkVer, (RsContextType)contextType, flags);
655704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
656704ff64b099406bb328898a7443921f22dbffd6dJason Sams
657eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic jlong
6585eaf468434e96bc7c8d4cfeb138699a1c7b256caTim MurraynContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer,
6590e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint colorMin, jint colorPref,
6600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint alphaMin, jint alphaPref,
6610e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint depthMin, jint depthPref,
6620e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint stencilMin, jint stencilPref,
6630e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint samplesMin, jint samplesPref, jfloat samplesQ,
6640e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                 jint dpi)
66511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
66611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
66711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
66811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
66911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
67011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
67111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
67211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
67311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
67411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
67511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
67611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
67767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
67867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextCreateGL");
67967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
6803aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
681d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
682d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
683d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
684eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p)
6857d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
68667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
68767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p);
68867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
689eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSetPriority((RsContext)con, p);
6907d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
6917d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
69247f31582b67f492d9e1523abd0d8b86c38ec007dTim Murraystatic void
69347f31582b67f492d9e1523abd0d8b86c38ec007dTim MurraynContextSetCacheDir(JNIEnv *_env, jobject _this, jlong con, jstring cacheDir)
69447f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{
69547f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
69647f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray
69747f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray    if (kLogApi) {
69847f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray        ALOGD("ContextSetCacheDir, con(%p), cacheDir(%s)", (RsContext)con, cacheDirUTF.c_str());
69947f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray    }
70047f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray    rsContextSetCacheDir((RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length());
70147f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray}
70247f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray
7037d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
7047d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
7057d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
706eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd)
707efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
70867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
70967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con,
71067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              width, height, (Surface *)wnd);
71167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
712efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
713488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    ANativeWindow * window = nullptr;
714488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (wnd == nullptr) {
715efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
716efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
71764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        window = android_view_Surface_getNativeWindow(_env, wnd).get();
718efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
719efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
720eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSetSurface((RsContext)con, width, height, window);
721efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
722efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
723efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
724eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDestroy(JNIEnv *_env, jobject _this, jlong con)
725d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
72667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
72767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextDestroy, con(%p)", (RsContext)con);
72867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
729eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextDestroy((RsContext)con);
730d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
731d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
732715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
733eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits)
734715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
73567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
73667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
73767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
738715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
739715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
740d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
741d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
742eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPause(JNIEnv *_env, jobject _this, jlong con)
74365e7aa56f56097418d617663683544c25b3988eaJason Sams{
74467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
74567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextPause, con(%p)", (RsContext)con);
74667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
747eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextPause((RsContext)con);
74865e7aa56f56097418d617663683544c25b3988eaJason Sams}
74965e7aa56f56097418d617663683544c25b3988eaJason Sams
75065e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
751eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextResume(JNIEnv *_env, jobject _this, jlong con)
75265e7aa56f56097418d617663683544c25b3988eaJason Sams{
75367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
75467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextResume, con(%p)", (RsContext)con);
75567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
756eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextResume((RsContext)con);
75765e7aa56f56097418d617663683544c25b3988eaJason Sams}
75865e7aa56f56097418d617663683544c25b3988eaJason Sams
7591c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
7601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
761eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con)
7621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
76367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
76467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con);
76567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
7661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
7671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
7681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
7691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
770eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextGetMessage((RsContext)con,
77165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 buf, sizeof(buf),
77265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
773edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
7741c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
77509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGV("message receive buffer too small.  %zu", receiveLen);
7761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
7771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
7781c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
7791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
780edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint
781eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data)
782516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
783516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
78467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
78567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len);
78667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
787488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *ptr = _env->GetIntArrayElements(data, nullptr);
788516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
7891c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
790eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextGetMessage((RsContext)con,
79165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 ptr, len * 4,
79265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
793edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
794516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
79509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGV("message receive buffer too small.  %zu", receiveLen);
796516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
797516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
7980e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
7991c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
8001c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
8011c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
802eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData)
8031c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
80467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
80567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextPeekMessage, con(%p)", (RsContext)con);
80667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
807488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr);
8081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
8091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
810eff663f391fa4f119685d5c14489b94661ea126fTim Murray    int id = rsContextPeekMessage((RsContext)con, &receiveLen, sizeof(receiveLen),
811edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                  &subID, sizeof(subID));
8121c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
8131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
8141c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
8150e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)id;
816516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
817516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
818eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con)
819516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
82067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
82167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextInitToClient, con(%p)", (RsContext)con);
82267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
823eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextInitToClient((RsContext)con);
824516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
825516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
826eff663f391fa4f119685d5c14489b94661ea126fTim Murraystatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con)
827516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
82867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
82967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con);
83067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
831eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextDeinitToClient((RsContext)con);
832516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
833516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
834455d64426615e5d269a3bd05cd91b67c3811fcdfJason Samsstatic void
835eff663f391fa4f119685d5c14489b94661ea126fTim MurraynContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray data)
836455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams{
837488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *ptr = nullptr;
838455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    jint len = 0;
839455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
840455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        len = _env->GetArrayLength(data);
8414a043c1853c117c1b4c4342e76cd16a5abdc1045Stephen Hines        ptr = _env->GetIntArrayElements(data, nullptr);
842455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
84367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
84467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
84567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
846eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
847455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    if (data) {
848455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
849455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
850455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams}
851455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
852455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
853516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
854460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
85567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm,
85667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe               jint size)
857d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
85867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
85909993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con,
86067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              type, kind, norm, size);
86167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
86267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind,
86367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                             norm, size);
864d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
865d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
866460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
867eff663f391fa4f119685d5c14489b94661ea126fTim MurraynElementCreate2(JNIEnv *_env, jobject _this, jlong con,
8689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                jlongArray _ids, jobjectArray _names, jintArray _arraySizes)
869d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
870718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
87167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
87267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nElementCreate2, con(%p)", (RsContext)con);
87367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
874718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
875488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jIds = _env->GetLongArrayElements(_ids, nullptr);
876488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr);
8779807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
8789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsElement *ids = (RsElement*)malloc(fieldCount * sizeof(RsElement));
8799807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t *arraySizes = (uint32_t *)malloc(fieldCount * sizeof(uint32_t));
8809807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
8819807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < fieldCount; i ++) {
8829807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        ids[i] = (RsElement)jIds[i];
8839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        arraySizes[i] = (uint32_t)jArraySizes[i];
8849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
885718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
8862123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, _names, fieldCount);
8872123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
8882123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char **nameArray = names.c_str();
8892123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t *sizeArray = names.c_str_len();
8902123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
8913aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsElementCreate2((RsContext)con,
8929807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                     (const RsElement *)ids, fieldCount,
8937a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
894e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
8952123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
8969807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(ids);
8979807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(arraySizes);
8989807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_ids, jIds, JNI_ABORT);
8999807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseIntArrayElements(_arraySizes, jArraySizes, JNI_ABORT);
9009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
9013aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)id;
902d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
903d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
904dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
905460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData)
906dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
907dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
90867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
90967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nElementGetNativeData, con(%p)", (RsContext)con);
91067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
911dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
912dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
913dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
914dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
91578c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uintptr_t elementData[5];
916eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaElementGetNativeData((RsContext)con, (RsElement)id, elementData, dataSize);
917dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
918dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
9199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint data = (jint)elementData[i];
9209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_elementData, i, 1, &data);
921dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
922dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
923dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
924dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
925dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
926460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id,
9279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jlongArray _IDs,
9287d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jobjectArray _names,
9297d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _arraySizes)
930dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
9319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uint32_t dataSize = _env->GetArrayLength(_IDs);
93267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
93367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nElementGetSubElements, con(%p)", (RsContext)con);
93467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
935dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
9369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t));
9379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    const char **names = (const char **)malloc(dataSize * sizeof(const char *));
93878c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath    uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t));
939dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
94067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes,
94167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                             (uint32_t)dataSize);
942dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
9439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(uint32_t i = 0; i < dataSize; i++) {
9443aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong id = (jlong)(uintptr_t)ids[i];
9459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint arraySize = (jint)arraySizes[i];
946dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
9479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_IDs, i, 1, &id);
9489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_arraySizes, i, 1, &arraySize);
949dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
950dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
951dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
952dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
9537d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    free(arraySizes);
954dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
955dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
956d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
957d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
958460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
959460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid,
960b109cc78616abee7291eb42094cd156b5db3355dJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
961d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
96267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
96367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
96409993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer              (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv);
96567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
9663b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
96767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips,
96867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                          faces, yuv);
969d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
970d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
971dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
9729807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray _typeData)
973dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
974dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
975dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
976dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
977dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
978dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
97967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
98067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con);
98167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
982dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
9839807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t typeData[6];
984eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6);
985dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
986dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
9873aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong data = (jlong)(uintptr_t)typeData[i];
9889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_typeData, i, 1, &data);
989dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
990dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
991dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
992d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
993d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
994460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
99567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage,
99667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                       jlong pointer)
997d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
99867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
99967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)",
100067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsContext)con, (RsElement)type, mips, usage, (void *)pointer);
100167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
100267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type,
100367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                                      (RsAllocationMipmapControl)mips,
100467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                                      (uint32_t)usage, (uintptr_t)pointer);
1005d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1006d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1007d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1008460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits)
10095476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
101067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
101167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a,
101267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              bits);
101367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1014eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits);
10155476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
10165476b450e50939940dcf3f15c92335cee2fc572dJason Sams
101772226e0543461133b9e177a3e78ae50b0c65e797Jason Samsstatic jobject
1018460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a)
1019615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams{
102067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
102167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
102267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1023615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
102467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con,
102567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                                                                 (RsAllocation)a);
102672226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    sp<IGraphicBufferProducer> bp = v;
1027488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    v->decStrong(nullptr);
1028fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
102972226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    jobject o = android_view_Surface_createFromIGraphicBufferProducer(_env, bp);
103072226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    return o;
1031fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams}
1032fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams
1033fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsstatic void
1034460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur)
1035163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
103667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
103767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con,
103867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsAllocation)alloc, (Surface *)sur);
103967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1040163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
1041fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    sp<Surface> s;
1042163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    if (sur != 0) {
104364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        s = android_view_Surface_getSurface(_env, sur);
1044163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
1045163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
104667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc,
104767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                           static_cast<ANativeWindow *>(s.get()));
1048163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
1049163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
1050163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
1051460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
1052163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
105367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
105409993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
105567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1056460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray    rsAllocationIoSend((RsContext)con, (RsAllocation)alloc);
1057163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
1058163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
1059163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
1060460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
1061163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams{
106267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
106309993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
106467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1065460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray    rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc);
1066163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams}
1067163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
1068163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
1069163766cbe798baf8e86eb8201bc6c3def931d59aJason Samsstatic void
1070460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc)
1071f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
107267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
107367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc);
107467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1075eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc);
1076f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
1077f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
1078460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
107967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
108067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                            jobject jbitmap, jint usage)
1081fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
1082ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
108336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
1084ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
1085fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
10865476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
10875476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
10883aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCreateFromBitmap((RsContext)con,
108965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  (RsType)type, (RsAllocationMipmapControl)mip,
109065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  ptr, bitmap.getSize(), usage);
10915476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
10925476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
1093ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
1094fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
1095460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
109667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type,
109767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                        jint mip, jobject jbitmap, jint usage)
1098a314551d69098537337c970da615a8f8af58e1f1Tim Murray{
1099a314551d69098537337c970da615a8f8af58e1f1Tim Murray    SkBitmap const * nativeBitmap =
110036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
1101a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const SkBitmap& bitmap(*nativeBitmap);
1102a314551d69098537337c970da615a8f8af58e1f1Tim Murray
1103a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.lockPixels();
1104a314551d69098537337c970da615a8f8af58e1f1Tim Murray    const void* ptr = bitmap.getPixels();
11053aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCreateTyped((RsContext)con,
1106a314551d69098537337c970da615a8f8af58e1f1Tim Murray                                            (RsType)type, (RsAllocationMipmapControl)mip,
11079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                            (uint32_t)usage, (uintptr_t)ptr);
1108a314551d69098537337c970da615a8f8af58e1f1Tim Murray    bitmap.unlockPixels();
1109a314551d69098537337c970da615a8f8af58e1f1Tim Murray    return id;
1110a314551d69098537337c970da615a8f8af58e1f1Tim Murray}
1111a314551d69098537337c970da615a8f8af58e1f1Tim Murray
1112460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
111367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
111467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                                jobject jbitmap, jint usage)
111567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
111667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
111736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
111867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
111967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
11205476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
11215476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
11223aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsAllocationCubeCreateFromBitmap((RsContext)con,
112365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      (RsType)type, (RsAllocationMipmapControl)mip,
112465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      ptr, bitmap.getSize(), usage);
11255476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
11265476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
112767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
112867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
112926ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
1130460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
113126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
113226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
113336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
113426ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
1135f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
1136f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
113726ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
11384ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
11394ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
1140eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocation2DData((RsContext)con, (RsAllocation)alloc, 0, 0,
1141304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                       0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
114238faea3019b8aa68c25ec7bac3e17964524dad12Tim Murray                       w, h, ptr, bitmap.getSize(), 0);
11434ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
11448a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
11458a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
11464ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
1147460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
11488a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
11494ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
115036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat            (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID);
11514ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
11528a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
11534ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
11544ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
1155eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopyToBitmap((RsContext)con, (RsAllocation)alloc, ptr, bitmap.getSize());
11564ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
1157835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk    bitmap.notifyPixelsChanged();
11588a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
11598a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
1160414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
1161d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1162460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
116387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jint count, jobject data, jint sizeBytes, jint dataType, jint mSize,
116487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jboolean usePadding)
1165d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1166e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
116767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
116867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
116967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes,
117067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              dataType);
117167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
117287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true,
117387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                   (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
1174d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1175d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1176d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1177c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationElementData(JNIEnv *_env, jobject _this, jlong con, jlong alloc,
1178c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang                       jint xoff, jint yoff, jint zoff,
1179c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang                       jint lod, jint compIdx, jbyteArray data, jint sizeBytes)
118049bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
118149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
118267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
1183c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang        ALOGD("nAllocationElementData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), "
1184c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang              "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len,
118567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              sizeBytes);
118667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1187488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1188c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang    rsAllocationElementData((RsContext)con, (RsAllocation)alloc,
1189c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang                            xoff, yoff, zoff,
1190c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang                            lod, ptr, sizeBytes, compIdx);
119149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
119249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
119349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
1194c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang
1195414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
119649bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
1197460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
119887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jint w, jint h, jobject data, jint sizeBytes, jint dataType, jint mSize,
119987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jboolean usePadding)
1200d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1201e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
1202e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
120367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
120467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
120567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
120667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
120787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    int count = w * h;
120887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true,
120987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                   (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
1210d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1211d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1212414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation
1213414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc.
121440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
1215eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con,
1216460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff,
1217304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstMip, jint dstFace,
1218304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint width, jint height,
1219460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff,
1220304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcMip, jint srcFace)
1221304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{
122267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
122367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
122467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " dstMip(%i), dstFace(%i), width(%i), height(%i),"
122567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
122667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
122767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
122867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1229304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
1230eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopy2DRange((RsContext)con,
1231304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)dstAlloc,
1232304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstXoff, dstYoff,
1233304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
1234304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
1235304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)srcAlloc,
1236304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcXoff, srcYoff,
1237304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
1238304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk}
1239304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
1240414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Java object data into the Allocation pointed to by _alloc.
1241304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void
1242460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
124387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jint w, jint h, jint d, jobject data, jint sizeBytes, jint dataType,
124487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jint mSize, jboolean usePadding)
1245b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
1246e729a9400f3ed2234a95a53aadb3420b76436d63Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
124767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
124867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i),"
124967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
125067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              lod, w, h, d, sizeBytes);
125167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
125287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    int count = w * h * d;
125387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true,
125487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                   (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
1255b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
1256b05d689653b1bc94836f716f29e9578677c29075Jason Sams
1257414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by srcAlloc into the Allocation
1258414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// pointed to by dstAlloc.
1259b05d689653b1bc94836f716f29e9578677c29075Jason Samsstatic void
1260eff663f391fa4f119685d5c14489b94661ea126fTim MurraynAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con,
1261460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff,
1262b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint dstMip,
1263b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint width, jint height, jint depth,
1264460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray                        jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff,
1265b05d689653b1bc94836f716f29e9578677c29075Jason Sams                        jint srcMip)
1266b05d689653b1bc94836f716f29e9578677c29075Jason Sams{
126767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
126867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i),"
126967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " dstMip(%i), width(%i), height(%i),"
127067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)",
127167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip,
127267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip);
127367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1274b05d689653b1bc94836f716f29e9578677c29075Jason Sams
1275eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationCopy3DRange((RsContext)con,
1276b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)dstAlloc,
1277b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstXoff, dstYoff, dstZoff, dstMip,
1278b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            width, height, depth,
1279b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            (RsAllocation)srcAlloc,
1280b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            srcXoff, srcYoff, srcZoff, srcMip);
1281b05d689653b1bc94836f716f29e9578677c29075Jason Sams}
1282b05d689653b1bc94836f716f29e9578677c29075Jason Sams
128340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
1284414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
128540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
128687e908dfdece91b5f504386d4901fa3342dc8083Miao WangnAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, jint dataType,
128787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                jint mSize, jboolean usePadding)
1288fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
128921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
129067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
129167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc);
129267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
129387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    int count = 0;
129487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    PER_ARRAY_TYPE(0, rsAllocationRead, false,
129587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                   (RsContext)con, alloc, ptr, len * typeBytes);
1296fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
1297fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
1298414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
1299fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
1300460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod,
130187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jint count, jobject data, jint sizeBytes, jint dataType,
130287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jint mSize, jboolean usePadding)
1303fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
130421659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
130567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
130667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), "
130767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType);
130867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
130987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    PER_ARRAY_TYPE(0, rsAllocation1DRead, false,
131087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                   (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes);
1311fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
1312fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
1313c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Element in the Allocation pointed to by _alloc into the Java array data.
1314c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void
131545cec0a9711f736df26fd097c6d74834e350f9bcMiao WangnAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong alloc,
1316c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang                       jint xoff, jint yoff, jint zoff,
131745cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang                       jint lod, jint compIdx, jbyteArray data, jint sizeBytes)
1318c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{
131945cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang    jint len = _env->GetArrayLength(data);
1320c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang    if (kLogApi) {
132145cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang        ALOGD("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), "
132245cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang              "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len,
132345cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang              sizeBytes);
1324c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang    }
132545cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
132645cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang    rsAllocationElementRead((RsContext)con, (RsAllocation)alloc,
132745cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang                            xoff, yoff, zoff,
1328a7e2509d8da69ab1c9e14b4ce6608786c572209aJason Sams                            lod, ptr, sizeBytes, compIdx);
132945cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1330c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang}
1331c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang
1332414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines// Copies from the Allocation pointed to by _alloc into the Java object data.
1333fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
1334460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint lod, jint _face,
133587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jint w, jint h, jobject data, jint sizeBytes, jint dataType,
133687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jint mSize, jboolean usePadding)
133740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
133821659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocation *alloc = (RsAllocation *)_alloc;
133921659ac4c83d272f3ffd2f9b6333acbe5f0b02a1Jason Sams    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
134067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
134167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) "
134267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
134367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
134487e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    int count = w * h;
134587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    PER_ARRAY_TYPE(0, rsAllocation2DRead, false,
134687e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                   (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
134740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
134887e908dfdece91b5f504386d4901fa3342dc8083Miao Wang
1349c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang// Copies from the Allocation pointed to by _alloc into the Java object data.
1350c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wangstatic void
1351c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao WangnAllocationRead3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xoff, jint yoff, jint zoff, jint lod,
135287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jint w, jint h, jint d, jobject data, int sizeBytes, int dataType,
135387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                  jint mSize, jboolean usePadding)
1354c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{
1355c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang    RsAllocation *alloc = (RsAllocation *)_alloc;
1356c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang    if (kLogApi) {
1357c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang        ALOGD("nAllocation3DRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i),"
1358c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang              " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff,
1359c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang              lod, w, h, d, sizeBytes);
1360c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang    }
136187e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    int count = w * h * d;
136287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang    PER_ARRAY_TYPE(nullptr, rsAllocation3DRead, false,
136387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang                   (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0);
1364c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang}
1365d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1366460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1367460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a)
1368dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
136967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
137067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a);
137167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
13723aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a);
1373dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
1374dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
13755edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
1376460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX)
13775edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
137867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
137967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con,
138067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsAllocation)alloc, dimX);
138167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1382eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX);
13835edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
13845edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
138546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
138646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic jlong
138746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterCreate(JNIEnv *_env, jobject _this, jlong con, jlong basealloc, jlong type)
138846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{
138946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    if (kLogApi) {
139046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams        ALOGD("nAllocationAdapterCreate, con(%p), base(%p), type(%p)",
139146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams              (RsContext)con, (RsAllocation)basealloc, (RsElement)type);
139246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    }
139346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    return (jlong)(uintptr_t) rsAllocationAdapterCreate((RsContext)con, (RsType)type,
139446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams                                                        (RsAllocation)basealloc);
139546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
139646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams}
139746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
139846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Samsstatic void
139946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason SamsnAllocationAdapterOffset(JNIEnv *_env, jobject _this, jlong con, jlong alloc,
140046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams                        jint x, jint y, jint z, jint face, jint lod,
140146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams                        jint a1, jint a2, jint a3, jint a4)
140246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{
140346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    uint32_t params[] = {
140446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams        (uint32_t)x, (uint32_t)y, (uint32_t)z, (uint32_t)face,
140546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams        (uint32_t)lod, (uint32_t)a1, (uint32_t)a2, (uint32_t)a3, (uint32_t)a4
140646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    };
140746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    if (kLogApi) {
140846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams        ALOGD("nAllocationAdapterOffset, con(%p), alloc(%p), x(%i), y(%i), z(%i), face(%i), lod(%i), arrays(%i %i %i %i)",
140946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams              (RsContext)con, (RsAllocation)alloc, x, y, z, face, lod, a1, a2, a3, a4);
141046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    }
141146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams    rsAllocationAdapterOffset((RsContext)con, (RsAllocation)alloc,
141246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams                              params, sizeof(params));
141346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams}
141446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
141546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
1416aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
1417aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1418460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1419460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con, jlong native_asset)
1420aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
1421aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
14220e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", asset);
1423aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
14243aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromMemory((RsContext)con, asset->getBuffer(false), asset->getLength());
1425b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
1426b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
1427b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1428460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1429eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path)
1430b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
1431b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
1432488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (mgr == nullptr) {
1433b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
1434b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1435b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1436b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
1437b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
1438488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (asset == nullptr) {
1439b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
1440b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1441b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
14423aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromAsset((RsContext)con, asset);
1443b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
1444b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
1445b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1446460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1447eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFileA3DCreateFromFile(JNIEnv *_env, jobject _this, jlong con, jstring fileName)
1448b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
1449b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
14503aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DCreateFromFile((RsContext)con, fileNameUTF.c_str());
1451b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1452aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
1453aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
1454aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1455460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jint
1456460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D)
1457aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
1458aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
1459eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaFileA3DGetNumIndexEntries((RsContext)con, &numEntries, (RsFile)fileA3D);
14600e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    return (jint)numEntries;
1461aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
1462aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1463aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
1464460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
1465aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
14660e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
1467aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
1468aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1469eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaFileA3DGetIndexEntries((RsContext)con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
1470aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1471aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
1472aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
1473aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
1474aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
1475aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
1476aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
1477aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
1478aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
14790e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1480460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, jlong con, jlong fileA3D, jint index)
1481aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
14820e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ALOGV("______nFileA3D %p", (RsFile) fileA3D);
14833aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsaFileA3DGetEntryByIndex((RsContext)con, (uint32_t)index, (RsFile)fileA3D);
1484aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
1485aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
1486d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1487d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
1488d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
14890e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1490eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromFile(JNIEnv *_env, jobject _this, jlong con,
1491b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
14929b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
1493b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
14943aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromFile((RsContext)con,
1495e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
1496e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
1497b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1498b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
1499b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
1500b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
15010e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1502eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAssetStream(JNIEnv *_env, jobject _this, jlong con,
15030e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat                           jstring name, jfloat fontSize, jint dpi, jlong native_asset)
1504b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
1505b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
1506b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
1507b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
15083aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con,
1509e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
1510e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
1511b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
1512b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
1513b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
1514b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
15150e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1516eff663f391fa4f119685d5c14489b94661ea126fTim MurraynFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, jstring _path,
1517b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
1518b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
1519b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
1520488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (mgr == nullptr) {
1521b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
1522b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
1523b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
1524b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
1525b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
1526488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (asset == nullptr) {
1527b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
1528b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
15299b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
15303aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsFontCreateFromMemory((RsContext)con,
1531e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
1532e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
1533b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
1534b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
15359b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
15369b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
15379b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
1538bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
1539bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
1540bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
1541460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot)
1542d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
154367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
154467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con,
154567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsScript)script, (RsAllocation)alloc, slot);
154667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1547eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot);
1548d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1549d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1550d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1551460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val)
15524d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
155367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
155467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script,
155567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
155667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1557eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val);
15584d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
15594d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
15607c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jint
1561460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
15627c4caadb939b1563328251c156262c179a685c70Tim Murray{
156367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
156467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
156567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
15667c4caadb939b1563328251c156262c179a685c70Tim Murray    int value = 0;
1567eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
15687c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
15697c4caadb939b1563328251c156262c179a685c70Tim Murray}
15707c4caadb939b1563328251c156262c179a685c70Tim Murray
15714d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
1572460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
15736f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
157467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
157509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script,
157667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
157767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1578eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val);
15796f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
15806f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
15816f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
1582460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val)
1583031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
158467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
158509993f768bcb6dd9ed76b5c655da2ad9d0ad8396Bernhard Rosenkränzer        ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script,
158667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
158767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1588eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val);
1589031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
1590031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
15917c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jlong
1592460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
15937c4caadb939b1563328251c156262c179a685c70Tim Murray{
159467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
159567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
159667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
15977c4caadb939b1563328251c156262c179a685c70Tim Murray    jlong value = 0;
1598eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
15997c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
16007c4caadb939b1563328251c156262c179a685c70Tim Murray}
16017c4caadb939b1563328251c156262c179a685c70Tim Murray
1602031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
1603460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val)
16044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
160567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
160667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script,
160767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
160867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1609eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val);
16104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
16114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
16127c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jfloat
1613460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
16147c4caadb939b1563328251c156262c179a685c70Tim Murray{
161567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
161667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
161767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
16187c4caadb939b1563328251c156262c179a685c70Tim Murray    jfloat value = 0;
1619eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
16207c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
16217c4caadb939b1563328251c156262c179a685c70Tim Murray}
16227c4caadb939b1563328251c156262c179a685c70Tim Murray
16234d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
1624460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val)
1625ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
162667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
162767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script,
162867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot, val);
162967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1630eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val);
1631ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
1632ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
16337c4caadb939b1563328251c156262c179a685c70Tim Murraystatic jdouble
1634460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot)
16357c4caadb939b1563328251c156262c179a685c70Tim Murray{
163667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
163767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
163867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
16397c4caadb939b1563328251c156262c179a685c70Tim Murray    jdouble value = 0;
1640eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value));
16417c4caadb939b1563328251c156262c179a685c70Tim Murray    return value;
16427c4caadb939b1563328251c156262c179a685c70Tim Murray}
16437c4caadb939b1563328251c156262c179a685c70Tim Murray
1644ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
1645460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
16464d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
164767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
164867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
164967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
16504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
1651488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1652eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
16534d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
16544d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
16554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1656adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hinesstatic void
1657460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
16587c4caadb939b1563328251c156262c179a685c70Tim Murray{
165967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
166067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
166167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
16627c4caadb939b1563328251c156262c179a685c70Tim Murray    jint len = _env->GetArrayLength(data);
1663488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1664eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len);
1665414fa2c93a763dce6b3adf898fbc68cf13667c07Stephen Hines    _env->ReleaseByteArrayElements(data, ptr, 0);
16667c4caadb939b1563328251c156262c179a685c70Tim Murray}
16677c4caadb939b1563328251c156262c179a685c70Tim Murray
16687c4caadb939b1563328251c156262c179a685c70Tim Murraystatic void
166967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas GampenScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data,
167067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe                jlong elem, jintArray dims)
1671adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines{
167267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
167367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
167467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1675adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint len = _env->GetArrayLength(data);
1676488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1677adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
1678488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *dimsPtr = _env->GetIntArrayElements(dims, nullptr);
1679eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
1680bc5d3eeedcbdff2e8331a6792902c6992db9bd31Stephen Hines                     (const uint32_t*) dimsPtr, dimsLen);
1681adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1682adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    _env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
1683adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines}
1684adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines
1685d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1686d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1687460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone)
1688584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
168967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
169067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script);
169167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1692584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1693584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
1694584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
1695584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
1696584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1697eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptSetTimeZone((RsContext)con, (RsScript)script, (const char *)timeZone_ptr, length);
1698584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
1699584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
1700584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
1701584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
1702584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
1703584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
170422534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
1705460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot)
170622534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
170767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
170867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj);
170967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1710eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptInvoke((RsContext)con, (RsScript)obj, slot);
171122534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
171222534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1713584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
1714460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data)
1715be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
171667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
171767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
171867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
17194d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
1720488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *ptr = _env->GetByteArrayElements(data, nullptr);
1721eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len);
17224d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
1723be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
1724be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
17256e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
1726be7b1defb6b11920703b241ba5815fb09487bb02Chris WailesnScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot,
1727be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes               jlongArray ains, jlong aout, jbyteArray params,
1728be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes               jintArray limits)
17296e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
173067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
173167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
173267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1733949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1734be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint   in_len = 0;
1735488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *in_ptr = nullptr;
1736949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1737488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    RsAllocation *in_allocs = nullptr;
1738949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1739488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (ains != nullptr) {
1740be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        in_len = _env->GetArrayLength(ains);
1741488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        in_ptr = _env->GetLongArrayElements(ains, nullptr);
1742eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes
1743be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        if (sizeof(RsAllocation) == sizeof(jlong)) {
1744be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            in_allocs = (RsAllocation*)in_ptr;
1745949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1746be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        } else {
1747be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            // Convert from 64-bit jlong types to the native pointer type.
1748eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes
1749be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation));
1750be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1751be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            for (int index = in_len; --index >= 0;) {
1752be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                in_allocs[index] = (RsAllocation)in_ptr[index];
1753be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes            }
1754be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        }
1755949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1756949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1757be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint   param_len = 0;
1758488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte *param_ptr = nullptr;
1759be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
1760488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (params != nullptr) {
1761be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        param_len = _env->GetArrayLength(params);
1762488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        param_ptr = _env->GetByteArrayElements(params, nullptr);
1763c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines    }
1764949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1765488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    RsScriptCall sc, *sca = nullptr;
1766be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    uint32_t sc_size = 0;
1767949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1768be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    jint  limit_len = 0;
1769488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *limit_ptr = nullptr;
1770949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1771488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (limits != nullptr) {
1772be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        limit_len = _env->GetArrayLength(limits);
1773488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes        limit_ptr = _env->GetIntArrayElements(limits, nullptr);
1774949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1775be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        assert(limit_len == 6);
177667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        UNUSED(limit_len);  // As the assert might not be compiled.
1777949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1778be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.xStart     = limit_ptr[0];
1779be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.xEnd       = limit_ptr[1];
1780be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.yStart     = limit_ptr[2];
1781be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.yEnd       = limit_ptr[3];
1782be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.zStart     = limit_ptr[4];
1783be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.zEnd       = limit_ptr[5];
1784be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sc.strategy   = RS_FOR_EACH_STRATEGY_DONT_CARE;
178514331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.arrayStart = 0;
178614331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.arrayEnd = 0;
178714331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array2Start = 0;
178814331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array2End = 0;
178914331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array3Start = 0;
179014331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array3End = 0;
179114331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array4Start = 0;
179214331ab1c3fd78c1204b41f27d62deb5c1b4acf2Jason Sams        sc.array4End = 0;
1793949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1794be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        sca = &sc;
1795be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    }
1796949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1797be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    rsScriptForEachMulti((RsContext)con, (RsScript)script, slot,
1798be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                         in_allocs, in_len, (RsAllocation)aout,
1799be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes                         param_ptr, param_len, sca, sc_size);
1800949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1801488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (ains != nullptr) {
1802be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
1803949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes    }
1804949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1805488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (params != nullptr) {
1806be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseByteArrayElements(params, param_ptr, JNI_ABORT);
1807eb3470219dea322efa93eb4b5457813ce71d0c5dChris Wailes    }
1808c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines
1809488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    if (limits != nullptr) {
1810be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes        _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT);
1811be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes    }
1812949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes}
1813949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes
1814fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
1815fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
18160e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
1817eff663f391fa4f119685d5c14489b94661ea126fTim MurraynScriptCCreate(JNIEnv *_env, jobject _this, jlong con,
1818e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
1819e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
1820d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
182167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
182267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptCCreate, con(%p)", (RsContext)con);
182367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1824e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
1825e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
1826e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
18270e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    jlong ret = 0;
1828488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jbyte* script_ptr = nullptr;
182943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
183043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
183143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
183243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
18338451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
183443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
183543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
183643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
183743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
18388451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
183943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
184043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1841e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
184243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
184343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
18448451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
18458451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
184643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
184743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1848e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
184943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
185043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
1851eff663f391fa4f119685d5c14489b94661ea126fTim Murray    //rsScriptCSetText((RsContext)con, (const char *)script_ptr, length);
1852e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
18533aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    ret = (jlong)(uintptr_t)rsScriptCCreate((RsContext)con,
1854e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
1855e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
1856e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
185739ddc950c9064129ead5de04b200106c0659f937Jason Sams
185843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
1859e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
1860e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
186143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
186243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
1863d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
18643aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)ret;
1865d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1866d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1867460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1868460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid)
18696ab97682fd444586ee135912a4210417a1c8781bJason Sams{
187067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
187167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id,
187267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)eid);
187367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
18743aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid);
18756ab97682fd444586ee135912a4210417a1c8781bJason Sams}
18766ab97682fd444586ee135912a4210417a1c8781bJason Sams
1877460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1878460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig)
187908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
188067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
188167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con,
188267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)sid, slot, sig);
188367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
18843aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig);
188508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
188608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1887460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
1888be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang NinScriptInvokeIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
1889be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{
1890be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni    if (kLogApi) {
18917ff53fa0d42795da55b65468e07df82029deda79Elliott Hughes        ALOGD("nScriptInvokeIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con,
1892be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni              (void *)sid, slot);
1893be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni    }
1894be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni    return (jlong)(uintptr_t)rsScriptInvokeIDCreate((RsContext)con, (RsScript)sid, slot);
1895be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni}
1896be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni
1897be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Nistatic jlong
1898460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot)
189908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
190067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
190167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid,
190267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              slot);
190367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
19043aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot);
190508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
190608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1907460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
19089807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src,
19099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jlongArray _dstk, jlongArray _dstf, jlongArray _types)
191008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
191167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
191267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con);
191367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
191408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
19159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint kernelsLen = _env->GetArrayLength(_kernels);
1916488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr);
19179807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* kernelsPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * kernelsLen);
19189807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < kernelsLen; ++i) {
19199807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        kernelsPtr[i] = (RsScriptKernelID)jKernelsPtr[i];
19209807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
19219807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
19229807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint srcLen = _env->GetArrayLength(_src);
1923488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jSrcPtr = _env->GetLongArrayElements(_src, nullptr);
19249807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* srcPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * srcLen);
19259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < srcLen; ++i) {
19269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        srcPtr[i] = (RsScriptKernelID)jSrcPtr[i];
19279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
19289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
19299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstkLen = _env->GetArrayLength(_dstk);
1930488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jDstkPtr = _env->GetLongArrayElements(_dstk, nullptr);
19319807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstkPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstkLen);
19329807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstkLen; ++i) {
19339807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstkPtr[i] = (RsScriptKernelID)jDstkPtr[i];
19349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
19359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
19369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint dstfLen = _env->GetArrayLength(_dstf);
1937488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jDstfPtr = _env->GetLongArrayElements(_dstf, nullptr);
19389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsScriptKernelID* dstfPtr = (RsScriptKernelID*) malloc(sizeof(RsScriptKernelID) * dstfLen);
19399807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < dstfLen; ++i) {
19409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        dstfPtr[i] = (RsScriptKernelID)jDstfPtr[i];
19419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
19429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
19439807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    jint typesLen = _env->GetArrayLength(_types);
1944488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jTypesPtr = _env->GetLongArrayElements(_types, nullptr);
19459807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsType* typesPtr = (RsType*) malloc(sizeof(RsType) * typesLen);
19469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < typesLen; ++i) {
19479807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        typesPtr[i] = (RsType)jTypesPtr[i];
19489807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
19499807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
19503aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsScriptGroupCreate((RsContext)con,
19519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)kernelsPtr, kernelsLen * sizeof(RsScriptKernelID),
19529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)srcPtr, srcLen * sizeof(RsScriptKernelID),
19539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptKernelID *)dstkPtr, dstkLen * sizeof(RsScriptKernelID),
19549807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsScriptFieldID *)dstfPtr, dstfLen * sizeof(RsScriptKernelID),
19559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                               (RsType *)typesPtr, typesLen * sizeof(RsType));
19569807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
19579807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(kernelsPtr);
19589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(srcPtr);
19599807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstkPtr);
19609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(dstfPtr);
19619807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(typesPtr);
19629807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_kernels, jKernelsPtr, 0);
19639807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_src, jSrcPtr, 0);
19649807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstk, jDstkPtr, 0);
19659807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_dstf, jDstfPtr, 0);
19669807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_types, jTypesPtr, 0);
196708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    return id;
196808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
196908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
197008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1971460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
197208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
197367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
197467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
197567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)gid, (void *)kid, (void *)alloc);
197667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1977eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
197808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
197908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
198008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1981460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc)
198208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
198367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
198467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con,
198567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (void *)gid, (void *)kid, (void *)alloc);
198667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1987eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
198808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
198908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
199008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsstatic void
1991460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid)
199208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams{
199367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
199467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid);
199567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
1996eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid);
199708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams}
199808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
1999d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
2000d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
20010e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
2002eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con,
2003331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
2004331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
2005331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
2006331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
2007d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
200867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
200967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con);
201067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
20113aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
2012331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
2013331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
2014d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
2015d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
20160011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
20170011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
20180011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
2019460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a)
20200011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
202167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
202267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con,
202367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramVertex)vpv, slot, (RsAllocation)a);
202467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2025eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a);
20260011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
202754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
2028d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2029460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
203054c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
203167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
203267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con,
203367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramFragment)vpf, slot, (RsAllocation)a);
203467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2035eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
203654c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
203754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
203854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
2039460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a)
2040d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
204167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
204267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con,
204367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramFragment)vpf, slot, (RsSampler)a);
204467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2045eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a);
2046d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
2047d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
204868afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
2049d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2050460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
2051eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
20529807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                       jobjectArray texNames, jlongArray params)
20537e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
2054b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
2055488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr);
20567e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
20577e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
20582123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
20592123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
20602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
20612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
20622123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
206367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
206467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
206567333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
20667e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
20679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
20689807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
20699807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
20709807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
20713aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong ret = (jlong)(uintptr_t)rsProgramFragmentCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
20722123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                             nameArray, texCount, sizeArray,
20739807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                             paramPtr, paramLen);
20742123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
20759807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
20769807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
20777e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
20787e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
20797e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
20807e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
20811fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
20821fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
2083460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
2084eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader,
20859807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                     jobjectArray texNames, jlongArray params)
20861fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
2087b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
2088488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr);
20890011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
20901fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
209167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
209267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen);
209367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2094ee41112e1539de95596600fd2c6dada5d275217fJason Sams
20952123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    int texCount = _env->GetArrayLength(texNames);
20962123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    AutoJavaStringArrayToUTF8 names(_env, texNames, texCount);
20972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    const char ** nameArray = names.c_str();
20982123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    size_t* sizeArray = names.c_str_len();
20992123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
21009807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen);
21019807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < paramLen; ++i) {
21029807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        paramPtr[i] = (uintptr_t)jParamPtr[i];
21039807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
21049807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
21053aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong ret = (jlong)(uintptr_t)rsProgramVertexCreate((RsContext)con, shaderUTF.c_str(), shaderUTF.length(),
21062123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk                                           nameArray, texCount, sizeArray,
21079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat                                           paramPtr, paramLen);
21082123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk
21099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(paramPtr);
21109807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(params, jParamPtr, JNI_ABORT);
21110011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
21121fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
21131fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
2114ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
2115ebfb436a49673693b98469683451bd9ede797557Jason Sams
2116460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
2117eff663f391fa4f119685d5c14489b94661ea126fTim MurraynProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull)
2118ebfb436a49673693b98469683451bd9ede797557Jason Sams{
211967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
212067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con,
212167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              pointSprite, cull);
212267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
21233aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull);
2124ebfb436a49673693b98469683451bd9ede797557Jason Sams}
2125ebfb436a49673693b98469683451bd9ede797557Jason Sams
2126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2127d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
2128d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2129d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
213078c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script)
2131d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
213267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
213367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script);
213467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2135eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindRootScript((RsContext)con, (RsScript)script);
2136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
2137d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2138d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
213978c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs)
2140d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
214167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
214267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs);
214367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2144eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs);
2145d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
2146d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2147d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
214878c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf)
2149d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
215067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
215167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con,
215267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe              (RsProgramFragment)pf);
215367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2154eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf);
2155d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
2156d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
21570826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
215878c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf)
21590826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
216067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
216167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf);
216267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2163eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf);
21640826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
21650826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
2166d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
216778c0ce56129d8109fa2427de769f4d25a971d162Narayan KamathnContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf)
2168ebfb436a49673693b98469683451bd9ede797557Jason Sams{
216967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
217067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf);
217167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2172eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf);
2173ebfb436a49673693b98469683451bd9ede797557Jason Sams}
2174ebfb436a49673693b98469683451bd9ede797557Jason Sams
2175d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
217602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
217702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
21780e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhatstatic jlong
2179eff663f391fa4f119685d5c14489b94661ea126fTim MurraynSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter,
2180a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
218102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
218267333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
218367333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nSamplerCreate, con(%p)", (RsContext)con);
218467333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
21853aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con,
2186a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)magFilter,
2187a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)minFilter,
2188a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapS,
2189a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapT,
2190a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapR,
2191a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 aniso);
219202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
219302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
2194bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
2195bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
2196460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murraystatic jlong
21979807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim)
2198164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
219967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
220067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshCreate, con(%p)", (RsContext)con);
220167333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
2202164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
220325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint vtxLen = _env->GetArrayLength(_vtx);
2204488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr);
22059807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* vtxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * vtxLen);
22069807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < vtxLen; ++i) {
22079807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        vtxPtr[i] = (RsAllocation)(uintptr_t)jVtxPtr[i];
22089807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
22099807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
221025999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint idxLen = _env->GetArrayLength(_idx);
2211488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jlong *jIdxPtr = _env->GetLongArrayElements(_idx, nullptr);
22129807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    RsAllocation* idxPtr = (RsAllocation*) malloc(sizeof(RsAllocation) * idxLen);
22139807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    for(int i = 0; i < idxLen; ++i) {
22149807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        idxPtr[i] = (RsAllocation)(uintptr_t)jIdxPtr[i];
22159807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    }
22169807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat
221725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint primLen = _env->GetArrayLength(_prim);
2218488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    jint *primPtr = _env->GetIntArrayElements(_prim, nullptr);
2219164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
22203aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray    jlong id = (jlong)(uintptr_t)rsMeshCreate((RsContext)con,
222125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)vtxPtr, vtxLen,
222225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)idxPtr, idxLen,
222325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (uint32_t *)primPtr, primLen);
222480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
22259807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(vtxPtr);
22269807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    free(idxPtr);
22279807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_vtx, jVtxPtr, 0);
22289807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat    _env->ReleaseLongArrayElements(_idx, jIdxPtr, 0);
222925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_prim, primPtr, 0);
223025999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    return id;
22319d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
22329d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
223380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
2234460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
223580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
223667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
223767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
223867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
223980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
2240eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount);
224180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
224280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
224380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
224480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
2245460a04971c494fec39ffcb38e873bb8fdd82d113Tim MurraynMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh)
224680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
224767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
224867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
224967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
225080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
2251eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount);
225280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
225380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
225480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
225580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
22569807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs)
225780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
225867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
225967333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
226067333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
226180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
226280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
2263eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
226480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
226580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
22663aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong alloc = (jlong)(uintptr_t)allocs[i];
22679807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_ids, i, 1, &alloc);
226880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
226980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
227080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
227180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
227280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
227380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
22749807155b11a25fb6068edc9b1cd82928ac2f05deAshok BhatnMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices)
227580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
227667333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    if (kLogApi) {
227767333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe        ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh);
227867333928bfea7d53d8bc1b83599532f6fe5e2b2cAndreas Gampe    }
227980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
228080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
228180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
228280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
2283eff663f391fa4f119685d5c14489b94661ea126fTim Murray    rsaMeshGetIndices((RsContext)con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
228480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
228580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
22863aa89c1e243a2fae2b9d98fdbad574227c5b5bfaTim Murray        const jlong alloc = (jlong)(uintptr_t)allocs[i];
22879807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        const jint prim = (jint)prims[i];
22889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetLongArrayRegion(_idxIds, i, 1, &alloc);
22899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat        _env->SetIntArrayRegion(_primitives, i, 1, &prim);
229080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
229180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
229280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
229380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
2294164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
2295164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
229656f9e6f8d5436d50530807950661e66ca5efe2bbTim Murraystatic jint
229756f9e6f8d5436d50530807950661e66ca5efe2bbTim MurraynSystemGetPointerSize(JNIEnv *_env, jobject _this) {
229856f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray    return (jint)sizeof(void*);
229956f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray}
230056f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray
230156f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray
2302164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
2303164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
2304d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
230594d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
2306d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2307d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
23081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
23091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2310eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceCreate",                  "()J",                                     (void*)nDeviceCreate },
2311eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceDestroy",                 "(J)V",                                    (void*)nDeviceDestroy },
2312eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nDeviceSetConfig",               "(JII)V",                                  (void*)nDeviceSetConfig },
2313eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetUserMessage",         "(J[I)I",                                  (void*)nContextGetUserMessage },
2314eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextGetErrorMessage",        "(J)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
2315eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextPeekMessage",            "(J[I)I",                                  (void*)nContextPeekMessage },
23161c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2317eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextInitToClient",           "(J)V",                                    (void*)nContextInitToClient },
2318eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"nContextDeinitToClient",         "(J)V",                                    (void*)nContextDeinitToClient },
23192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
23202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
23212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
2322eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreate",                 "(JIII)J",                               (void*)nContextCreate },
2323eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextCreateGL",               "(JIIIIIIIIIIIIFI)J",                    (void*)nContextCreateGL },
2324eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextFinish",                 "(J)V",                                  (void*)nContextFinish },
2325eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetPriority",            "(JI)V",                                 (void*)nContextSetPriority },
232647f31582b67f492d9e1523abd0d8b86c38ec007dTim Murray{"rsnContextSetCacheDir",            "(JLjava/lang/String;)V",                (void*)nContextSetCacheDir },
2327eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSetSurface",             "(JIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
2328eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDestroy",                "(J)V",                                  (void*)nContextDestroy },
2329eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextDump",                   "(JI)V",                                 (void*)nContextDump },
2330eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextPause",                  "(J)V",                                  (void*)nContextPause },
2331eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextResume",                 "(J)V",                                  (void*)nContextResume },
2332eff663f391fa4f119685d5c14489b94661ea126fTim Murray{"rsnContextSendMessage",            "(JI[I)V",                               (void*)nContextSendMessage },
2333281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureCreate",                 "(JJJ[J[J[I[J[J)J",                      (void*)nClosureCreate },
2334be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnInvokeClosureCreate",           "(JJ[B[J[J[I)J",                         (void*)nInvokeClosureCreate },
2335281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetArg",                 "(JJIJI)V",                              (void*)nClosureSetArg },
2336281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnClosureSetGlobal",              "(JJJJI)V",                              (void*)nClosureSetGlobal },
2337460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAssignName",                    "(JJ[B)V",                               (void*)nAssignName },
2338460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnGetName",                       "(JJ)Ljava/lang/String;",                (void*)nGetName },
2339460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnObjDestroy",                    "(JJ)V",                                 (void*)nObjDestroy },
2340eff663f391fa4f119685d5c14489b94661ea126fTim Murray
2341460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromFile",         "(JLjava/lang/String;)J",                (void*)nFileA3DCreateFromFile },
23420e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DCreateFromAssetStream",  "(JJ)J",                                 (void*)nFileA3DCreateFromAssetStream },
2343460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;)J",            (void*)nFileA3DCreateFromAsset },
2344460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetNumIndexEntries",     "(JJ)I",                                 (void*)nFileA3DGetNumIndexEntries },
2345460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnFileA3DGetIndexEntries",        "(JJI[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
23460e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFileA3DGetEntryByIndex",        "(JJI)J",                                (void*)nFileA3DGetEntryByIndex },
2347eff663f391fa4f119685d5c14489b94661ea126fTim Murray
23480e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromFile",            "(JLjava/lang/String;FI)J",              (void*)nFontCreateFromFile },
23490e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAssetStream",     "(JLjava/lang/String;FIJ)J",             (void*)nFontCreateFromAssetStream },
23500e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnFontCreateFromAsset",        "(JLandroid/content/res/AssetManager;Ljava/lang/String;FI)J",            (void*)nFontCreateFromAsset },
2351eff663f391fa4f119685d5c14489b94661ea126fTim Murray
2352460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementCreate",                 "(JJIZI)J",                              (void*)nElementCreate },
23539807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementCreate2",                "(J[J[Ljava/lang/String;[I)J",           (void*)nElementCreate2 },
2354460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnElementGetNativeData",          "(JJ[I)V",                               (void*)nElementGetNativeData },
23559807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnElementGetSubElements",         "(JJ[J[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
2356460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
2357460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnTypeCreate",                    "(JJIIIZZI)J",                           (void*)nTypeCreate },
23589807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnTypeGetNativeData",             "(JJ[J)V",                               (void*)nTypeGetNativeData },
2359460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
23609807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnAllocationCreateTyped",         "(JJIIJ)J",                               (void*)nAllocationCreateTyped },
2361460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateFromBitmap",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateFromBitmap },
2362460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCreateBitmapBackedAllocation",    "(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCreateBitmapBackedAllocation },
2363460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCubeCreateFromBitmap","(JJILandroid/graphics/Bitmap;I)J",      (void*)nAllocationCubeCreateFromBitmap },
2364460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
2365460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyFromBitmap",      "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
2366460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationCopyToBitmap",        "(JJLandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
2367460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
2368460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSyncAll",             "(JJI)V",                                (void*)nAllocationSyncAll },
2369460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetSurface",          "(JJ)Landroid/view/Surface;",            (void*)nAllocationGetSurface },
2370460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationSetSurface",          "(JJLandroid/view/Surface;)V",           (void*)nAllocationSetSurface },
2371460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoSend",              "(JJ)V",                                 (void*)nAllocationIoSend },
2372460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationIoReceive",           "(JJ)V",                                 (void*)nAllocationIoReceive },
237387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData1D",              "(JJIIILjava/lang/Object;IIIZ)V",        (void*)nAllocationData1D },
2374c8e237e27165c7f7855ed0b077cfe5f1e54908efMiao Wang{"rsnAllocationElementData",         "(JJIIIII[BI)V",                         (void*)nAllocationElementData },
237587e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData2D",              "(JJIIIIIILjava/lang/Object;IIIZ)V",     (void*)nAllocationData2D },
2376460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData2D",              "(JJIIIIIIJIIII)V",                      (void*)nAllocationData2D_alloc },
237787e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationData3D",              "(JJIIIIIIILjava/lang/Object;IIIZ)V",    (void*)nAllocationData3D },
2378460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationData3D",              "(JJIIIIIIIJIIII)V",                     (void*)nAllocationData3D_alloc },
237987e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead",                "(JJLjava/lang/Object;IIZ)V",            (void*)nAllocationRead },
238087e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead1D",              "(JJIIILjava/lang/Object;IIIZ)V",        (void*)nAllocationRead1D },
238145cec0a9711f736df26fd097c6d74834e350f9bcMiao Wang{"rsnAllocationElementRead",         "(JJIIIII[BI)V",                         (void*)nAllocationElementRead },
238287e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead2D",              "(JJIIIIIILjava/lang/Object;IIIZ)V",     (void*)nAllocationRead2D },
238387e908dfdece91b5f504386d4901fa3342dc8083Miao Wang{"rsnAllocationRead3D",              "(JJIIIIIIILjava/lang/Object;IIIZ)V",    (void*)nAllocationRead3D },
2384460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGetType",             "(JJ)J",                                 (void*)nAllocationGetType},
2385460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationResize1D",            "(JJI)V",                                (void*)nAllocationResize1D },
2386460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnAllocationGenerateMipmaps",     "(JJ)V",                                 (void*)nAllocationGenerateMipmaps },
2387460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray
238846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterCreate",       "(JJJ)J",                                (void*)nAllocationAdapterCreate },
238946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams{"rsnAllocationAdapterOffset",       "(JJIIIIIIIII)V",                        (void*)nAllocationAdapterOffset },
239046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams
2391460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptBindAllocation",          "(JJJI)V",                               (void*)nScriptBindAllocation },
2392460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetTimeZone",             "(JJ[B)V",                               (void*)nScriptSetTimeZone },
2393460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvoke",                  "(JJI)V",                                (void*)nScriptInvoke },
2394460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptInvokeV",                 "(JJI[B)V",                              (void*)nScriptInvokeV },
2395be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
2396be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes{"rsnScriptForEach",                 "(JJI[JJ[B[I)V",                         (void*)nScriptForEach },
2397be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes
2398460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarI",                 "(JJII)V",                               (void*)nScriptSetVarI },
2399460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarI",                 "(JJI)I",                                (void*)nScriptGetVarI },
2400460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarJ",                 "(JJIJ)V",                               (void*)nScriptSetVarJ },
2401460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarJ",                 "(JJI)J",                                (void*)nScriptGetVarJ },
2402460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarF",                 "(JJIF)V",                               (void*)nScriptSetVarF },
2403460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarF",                 "(JJI)F",                                (void*)nScriptGetVarF },
2404460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarD",                 "(JJID)V",                               (void*)nScriptSetVarD },
2405460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarD",                 "(JJI)D",                                (void*)nScriptGetVarD },
2406460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarV",                 "(JJI[B)V",                              (void*)nScriptSetVarV },
2407460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGetVarV",                 "(JJI[B)V",                              (void*)nScriptGetVarV },
2408460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarVE",                "(JJI[BJ[I)V",                           (void*)nScriptSetVarVE },
2409460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptSetVarObj",               "(JJIJ)V",                               (void*)nScriptSetVarObj },
2410eff663f391fa4f119685d5c14489b94661ea126fTim Murray
24110e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnScriptCCreate",                 "(JLjava/lang/String;Ljava/lang/String;[BI)J",  (void*)nScriptCCreate },
2412460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptIntrinsicCreate",         "(JIJ)J",                                (void*)nScriptIntrinsicCreate },
2413460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptKernelIDCreate",          "(JJII)J",                               (void*)nScriptKernelIDCreate },
2414be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni{"rsnScriptInvokeIDCreate",          "(JJI)J",                                (void*)nScriptInvokeIDCreate },
2415460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptFieldIDCreate",           "(JJI)J",                                (void*)nScriptFieldIDCreate },
24169807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnScriptGroupCreate",             "(J[J[J[J[J[J)J",                        (void*)nScriptGroupCreate },
2417ebf63408d2b5181aeb7d83adf0f7ab95946a16d4Yang Ni{"rsnScriptGroup2Create",            "(JLjava/lang/String;[J)J",               (void*)nScriptGroup2Create },
2418460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetInput",           "(JJJJ)V",                               (void*)nScriptGroupSetInput },
2419460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupSetOutput",          "(JJJJ)V",                               (void*)nScriptGroupSetOutput },
2420460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnScriptGroupExecute",            "(JJ)V",                                 (void*)nScriptGroupExecute },
2421281c3252510bcf4120d17fa0125f369c2c78f162Yang Ni{"rsnScriptGroup2Execute",           "(JJ)V",                                 (void*)nScriptGroup2Execute },
2422eff663f391fa4f119685d5c14489b94661ea126fTim Murray
242325207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Single",    "(JJIIIIIIIIIFJJFJIIII)V",               (void*)nScriptIntrinsicBLAS_Single },
242425207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Double",    "(JJIIIIIIIIIDJJDJIIII)V",               (void*)nScriptIntrinsicBLAS_Double },
242525207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Complex",   "(JJIIIIIIIIIFFJJFFJIIII)V",             (void*)nScriptIntrinsicBLAS_Complex },
242625207df658d6a8a3e885c7017fcc25702363583cTim Murray{"rsnScriptIntrinsicBLAS_Z",         "(JJIIIIIIIIIDDJJDDJIIII)V",             (void*)nScriptIntrinsicBLAS_Z },
242725207df658d6a8a3e885c7017fcc25702363583cTim Murray
24280e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnProgramStoreCreate",            "(JZZZZZZIII)J",                         (void*)nProgramStoreCreate },
2429eff663f391fa4f119685d5c14489b94661ea126fTim Murray
2430460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindConstants",          "(JJIJ)V",                               (void*)nProgramBindConstants },
2431460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindTexture",            "(JJIJ)V",                               (void*)nProgramBindTexture },
2432460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramBindSampler",            "(JJIJ)V",                               (void*)nProgramBindSampler },
2433eff663f391fa4f119685d5c14489b94661ea126fTim Murray
24349807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramFragmentCreate",         "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramFragmentCreate },
2435460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnProgramRasterCreate",           "(JZI)J",                                (void*)nProgramRasterCreate },
24369807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnProgramVertexCreate",           "(JLjava/lang/String;[Ljava/lang/String;[J)J",              (void*)nProgramVertexCreate },
2437eff663f391fa4f119685d5c14489b94661ea126fTim Murray
243878c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindRootScript",         "(JJ)V",                                 (void*)nContextBindRootScript },
243978c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramStore",       "(JJ)V",                                 (void*)nContextBindProgramStore },
244078c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramFragment",    "(JJ)V",                                 (void*)nContextBindProgramFragment },
244178c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramVertex",      "(JJ)V",                                 (void*)nContextBindProgramVertex },
244278c0ce56129d8109fa2427de769f4d25a971d162Narayan Kamath{"rsnContextBindProgramRaster",      "(JJ)V",                                 (void*)nContextBindProgramRaster },
2443eff663f391fa4f119685d5c14489b94661ea126fTim Murray
24440e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat{"rsnSamplerCreate",                 "(JIIIIIF)J",                            (void*)nSamplerCreate },
2445eff663f391fa4f119685d5c14489b94661ea126fTim Murray
24469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshCreate",                    "(J[J[J[I)J",                            (void*)nMeshCreate },
2447eff663f391fa4f119685d5c14489b94661ea126fTim Murray
2448460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetVertexBufferCount",      "(JJ)I",                                 (void*)nMeshGetVertexBufferCount },
2449460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray{"rsnMeshGetIndexCount",             "(JJ)I",                                 (void*)nMeshGetIndexCount },
24509807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetVertices",               "(JJ[JI)V",                              (void*)nMeshGetVertices },
24519807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat{"rsnMeshGetIndices",                "(JJ[J[II)V",                            (void*)nMeshGetIndices },
245280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
245356f9e6f8d5436d50530807950661e66ca5efe2bbTim Murray{"rsnSystemGetPointerSize",          "()I",                                   (void*)nSystemGetPointerSize },
2454d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
2455d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2456d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
2457d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
2458d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
2459d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
2460d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
2461d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2462d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
2463d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2464d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
2465d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
2466488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    JNIEnv* env = nullptr;
2467d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
2468d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2469d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
24703762c311729fe9f3af085c14c5c1fb471d994c03Steve Block        ALOGE("ERROR: GetEnv failed\n");
2471d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
2472d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
2473488230c3fec4fc55abc2ee1de7b8b51a4e89f9a5Chris Wailes    assert(env != nullptr);
2474d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2475d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
24760e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat        ALOGE("ERROR: Renderscript native registration failed\n");
2477d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
2478d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
2479d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2480d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
2481d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
2482d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2483d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
2484d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
2485d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
2486