198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/* 298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Copyright (C) 2012 The Android Open Source Project 398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * you may not use this file except in compliance with the License. 698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * You may obtain a copy of the License at 798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 1098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Unless required by applicable law or agreed to in writing, software 1198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * See the License for the specific language governing permissions and 1498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * limitations under the License. 1598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 1698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 1798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspackage android.support.v8.renderscript; 1898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 1998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport java.io.File; 2098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport java.lang.reflect.Field; 2198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 2298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.content.Context; 2398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.content.pm.ApplicationInfo; 2498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.content.pm.PackageManager; 2598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.content.res.AssetManager; 2698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.graphics.Bitmap; 2798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.graphics.BitmapFactory; 2898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.os.Process; 2998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.util.Log; 3098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.view.Surface; 3198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 3298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 3398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 3498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/** 3598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Renderscript base master class. An instance of this class creates native 3698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * worker threads for processing commands from this object. This base class 3798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * does not provide any extended capabilities beyond simple data processing. 3898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * For extended capabilities use derived classes such as RenderScriptGL. 3998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 4098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <div class="special reference"> 4198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <h3>Developer Guides</h3> 4298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <p>For more information about creating an application that uses Renderscript, read the 4398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p> 4498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * </div> 4598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams **/ 4698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspublic class RenderScript { 4798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static final String LOG_TAG = "RenderScript_jni"; 4898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static final boolean DEBUG = false; 4998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams @SuppressWarnings({"UnusedDeclaration", "deprecation"}) 5098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static final boolean LOG_ENABLED = false; 5198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 5298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams private Context mApplicationContext; 5398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mUseNativeRS; 5498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 55ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams static class NRS { 56ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android.renderscript.RenderScript mRS; 57ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 58ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android.renderscript.RenderScript getRS() { 59ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return mRS; 60ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams NRS mNRS; 63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 6498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /* 6598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * We use a class initializer to allow the native code to cache some 6698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * field offsets. 6798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 6898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) 6998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static boolean sInitialized; 7098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native static void _nInit(); 7198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 7298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 7398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static { 7498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams sInitialized = false; 7598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams try { 7698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams System.loadLibrary("rsjni"); 7798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams _nInit(); 7898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams sInitialized = true; 7998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } catch (UnsatisfiedLinkError e) { 8098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Log.e(LOG_TAG, "Error loading RS jni library: " + e); 8198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSRuntimeException("Error loading RS jni library: " + e); 8298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 8398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 8498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 8598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // Non-threadsafe functions. 8698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int nDeviceCreate(); 8798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void nDeviceDestroy(int dev); 8898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void nDeviceSetConfig(int dev, int param, int value); 8998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int nContextGetUserMessage(int con, int[] data); 9098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native String nContextGetErrorMessage(int con); 9198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int nContextPeekMessage(int con, int[] subID); 9298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void nContextInitToClient(int con); 9398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void nContextDeinitToClient(int con); 9498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 9598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 9698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Name of the file that holds the object cache. 9798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 9898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams private static final String CACHE_PATH = "com.android.renderscript.cache"; 9998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static String mCachePath; 10098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 10198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 10298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Sets the directory to use as a persistent storage for the 10398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * renderscript object file cache. 10498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 10598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @hide 10698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param cacheDir A directory the current process can write to 10798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 10898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static void setupDiskCache(File cacheDir) { 10998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams File f = new File(cacheDir, CACHE_PATH); 11098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mCachePath = f.getAbsolutePath(); 11198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams f.mkdirs(); 11298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 11398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 11498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 11598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // Methods below are wrapped to protect the non-threadsafe 11698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // lockless fifo. 11798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnContextCreate(int dev, int ver, int sdkVer); 11898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nContextCreate(int dev, int ver, int sdkVer) { 11998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnContextCreate(dev, ver, sdkVer); 12098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 12198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnContextDestroy(int con); 12298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nContextDestroy() { 12398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 12498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnContextDestroy(mContext); 12598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 12698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnContextSetPriority(int con, int p); 12798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nContextSetPriority(int p) { 12898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 12998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnContextSetPriority(mContext, p); 13098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 13198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnContextDump(int con, int bits); 13298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nContextDump(int bits) { 13398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 13498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnContextDump(mContext, bits); 13598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 13698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnContextFinish(int con); 13798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nContextFinish() { 13898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 13998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnContextFinish(mContext); 14098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 14198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 14298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnObjDestroy(int con, int id); 14398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nObjDestroy(int id) { 14498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // There is a race condition here. The calling code may be run 14598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // by the gc while teardown is occuring. This protects againts 14698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // deleting dead objects. 14798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mContext != 0) { 14898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnObjDestroy(mContext, id); 14998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 15098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 15198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 15298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize); 15398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) { 15498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 15598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnElementCreate(mContext, type, kind, norm, vecSize); 15698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 15798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes); 15898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) { 15998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 16098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnElementCreate2(mContext, elements, names, arraySizes); 16198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 16298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnElementGetNativeData(int con, int id, int[] elementData); 16398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nElementGetNativeData(int id, int[] elementData) { 16498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 16598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnElementGetNativeData(mContext, id, elementData); 16698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 16798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnElementGetSubElements(int con, int id, 16898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int[] IDs, String[] names, int[] arraySizes); 16998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) { 17098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 17198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnElementGetSubElements(mContext, id, IDs, names, arraySizes); 17298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 17398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 17498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces); 17598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) { 17698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 17798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnTypeCreate(mContext, eid, x, y, z, mips, faces); 17898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 17998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnTypeGetNativeData(int con, int id, int[] typeData); 18098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nTypeGetNativeData(int id, int[] typeData) { 18198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 18298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnTypeGetNativeData(mContext, id, typeData); 18398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 18498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 18598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer); 18698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) { 18798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 18898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer); 18998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 19098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage); 19198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) { 19298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 19398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage); 19498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 19598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage); 19698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) { 19798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 19898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage); 19998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 20098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp); 20198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) { 20298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 20398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnAllocationCreateBitmapRef(mContext, type, bmp); 20498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 20598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage); 20698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) { 20798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 20898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage); 20998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 21098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 21198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp); 21298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) { 21398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 21498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationCopyToBitmap(mContext, alloc, bmp); 21598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 21698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 21798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 21898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationSyncAll(int con, int alloc, int src); 21998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationSyncAll(int alloc, int src) { 22098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 22198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationSyncAll(mContext, alloc, src); 22298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 22398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 22498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 22598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationGenerateMipmaps(int con, int alloc); 22698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationGenerateMipmaps(int alloc) { 22798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 22898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationGenerateMipmaps(mContext, alloc); 22998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 23098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp); 23198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) { 23298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 23398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationCopyFromBitmap(mContext, alloc, bmp); 23498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 23598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 23698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 23798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes); 23898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) { 23998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 24098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes); 24198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 24298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes); 24398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) { 24498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 24598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes); 24698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 24798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes); 24898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) { 24998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 25098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes); 25198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 25298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes); 25398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) { 25498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 25598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes); 25698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 25798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 25898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes); 25998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) { 26098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 26198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes); 26298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 26398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 26498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationData2D(int con, 26598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int dstAlloc, int dstXoff, int dstYoff, 26698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int dstMip, int dstFace, 26798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int width, int height, 26898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int srcAlloc, int srcXoff, int srcYoff, 26998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int srcMip, int srcFace); 27098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff, 27198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int dstMip, int dstFace, 27298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int width, int height, 27398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int srcAlloc, int srcXoff, int srcYoff, 27498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int srcMip, int srcFace) { 27598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 27698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationData2D(mContext, 27798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams dstAlloc, dstXoff, dstYoff, 27898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams dstMip, dstFace, 27998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams width, height, 28098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams srcAlloc, srcXoff, srcYoff, 28198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams srcMip, srcFace); 28298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 28398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 28498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes); 28598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) { 28698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 28798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes); 28898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 28998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes); 29098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) { 29198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 29298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes); 29398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 29498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes); 29598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) { 29698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 29798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes); 29898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 29998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes); 30098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) { 30198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 30298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes); 30398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 30498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b); 30598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) { 30698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 30798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b); 30898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 30998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 31098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationRead(int con, int id, byte[] d); 31198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationRead(int id, byte[] d) { 31298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 31398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationRead(mContext, id, d); 31498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 31598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationRead(int con, int id, short[] d); 31698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationRead(int id, short[] d) { 31798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 31898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationRead(mContext, id, d); 31998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 32098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationRead(int con, int id, int[] d); 32198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationRead(int id, int[] d) { 32298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 32398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationRead(mContext, id, d); 32498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 32598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationRead(int con, int id, float[] d); 32698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationRead(int id, float[] d) { 32798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 32898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationRead(mContext, id, d); 32998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 33098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnAllocationGetType(int con, int id); 33198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nAllocationGetType(int id) { 33298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 33398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnAllocationGetType(mContext, id); 33498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 33598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 33698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationResize1D(int con, int id, int dimX); 33798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationResize1D(int id, int dimX) { 33898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 33998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationResize1D(mContext, id, dimX); 34098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 34198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnAllocationResize2D(int con, int id, int dimX, int dimY); 34298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nAllocationResize2D(int id, int dimX, int dimY) { 34398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 34498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnAllocationResize2D(mContext, id, dimX, dimY); 34598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 34698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 34798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptBindAllocation(int con, int script, int alloc, int slot); 34898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptBindAllocation(int script, int alloc, int slot) { 34998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 35098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptBindAllocation(mContext, script, alloc, slot); 35198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 35298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone); 35398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptSetTimeZone(int script, byte[] timeZone) { 35498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 35598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptSetTimeZone(mContext, script, timeZone); 35698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 35798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptInvoke(int con, int id, int slot); 35898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptInvoke(int id, int slot) { 35998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 36098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptInvoke(mContext, id, slot); 36198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 36298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params); 36398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptForEach(int con, int id, int slot, int ain, int aout); 36498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) { 36598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 36698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (params == null) { 36798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptForEach(mContext, id, slot, ain, aout); 36898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } else { 36998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptForEach(mContext, id, slot, ain, aout, params); 37098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 37198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 37298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptInvokeV(int con, int id, int slot, byte[] params); 37398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptInvokeV(int id, int slot, byte[] params) { 37498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 37598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptInvokeV(mContext, id, slot, params); 37698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 37798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptSetVarI(int con, int id, int slot, int val); 37898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptSetVarI(int id, int slot, int val) { 37998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 38098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptSetVarI(mContext, id, slot, val); 38198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 38298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptSetVarJ(int con, int id, int slot, long val); 38398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptSetVarJ(int id, int slot, long val) { 38498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 38598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptSetVarJ(mContext, id, slot, val); 38698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 38798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptSetVarF(int con, int id, int slot, float val); 38898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptSetVarF(int id, int slot, float val) { 38998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 39098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptSetVarF(mContext, id, slot, val); 39198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 39298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptSetVarD(int con, int id, int slot, double val); 39398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptSetVarD(int id, int slot, double val) { 39498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 39598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptSetVarD(mContext, id, slot, val); 39698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 39798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptSetVarV(int con, int id, int slot, byte[] val); 39898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptSetVarV(int id, int slot, byte[] val) { 39998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 40098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptSetVarV(mContext, id, slot, val); 40198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 40298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val, 40398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int e, int[] dims); 40498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptSetVarVE(int id, int slot, byte[] val, 40598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int e, int[] dims) { 40698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 40798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptSetVarVE(mContext, id, slot, val, e, dims); 40898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 40998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native void rsnScriptSetVarObj(int con, int id, int slot, int val); 41098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized void nScriptSetVarObj(int id, int slot, int val) { 41198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 41298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rsnScriptSetVarObj(mContext, id, slot, val); 41398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 41498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 41598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnScriptCCreate(int con, String resName, String cacheDir, 41698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams byte[] script, int length); 41798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) { 41898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 41998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnScriptCCreate(mContext, resName, cacheDir, script, length); 42098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 42198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 422ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams native int rsnScriptIntrinsicCreate(int con, int id, int eid); 423ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams synchronized int nScriptIntrinsicCreate(int id, int eid) { 424ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams validate(); 425ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return rsnScriptIntrinsicCreate(mContext, id, eid); 426ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 427ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 428ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams native int rsnScriptKernelIDCreate(int con, int sid, int slot, int sig); 429ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) { 430ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams validate(); 431ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return rsnScriptKernelIDCreate(mContext, sid, slot, sig); 432ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 433ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 434ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams native int rsnScriptFieldIDCreate(int con, int sid, int slot); 435ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams synchronized int nScriptFieldIDCreate(int sid, int slot) { 436ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams validate(); 437ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return rsnScriptFieldIDCreate(mContext, sid, slot); 438ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 439ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 440ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams native int rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types); 441ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) { 442ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams validate(); 443ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types); 444ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 445ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 446ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc); 447ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) { 448ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams validate(); 449ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsnScriptGroupSetInput(mContext, group, kernel, alloc); 450ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 451ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 452ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc); 453ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) { 454ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams validate(); 455ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsnScriptGroupSetOutput(mContext, group, kernel, alloc); 456ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 457ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 458ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams native void rsnScriptGroupExecute(int con, int group); 459ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams synchronized void nScriptGroupExecute(int group) { 460ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams validate(); 461ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsnScriptGroupExecute(mContext, group); 462ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 463ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 46498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams native int rsnSamplerCreate(int con, int magFilter, int minFilter, 46598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int wrapS, int wrapT, int wrapR, float aniso); 46698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams synchronized int nSamplerCreate(int magFilter, int minFilter, 46798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int wrapS, int wrapT, int wrapR, float aniso) { 46898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 46998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso); 47098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 47198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 47298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 47398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 47498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDev; 47598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mContext; 47698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams @SuppressWarnings({"FieldCanBeLocal"}) 47798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams MessageThread mMessageThread; 47898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 47998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_U8; 48098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_I8; 48198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_U16; 48298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_I16; 48398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_U32; 48498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_I32; 48598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_U64; 48698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_I64; 48798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_F32; 48898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_F64; 48998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_BOOLEAN; 49098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 49198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_ELEMENT; 49298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_TYPE; 49398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_ALLOCATION; 49498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_SAMPLER; 49598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_SCRIPT; 49698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 49798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_A_8; 49898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_RGB_565; 49998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_RGB_888; 50098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_RGBA_5551; 50198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_RGBA_4444; 50298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_RGBA_8888; 50398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 50498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_FLOAT_2; 50598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_FLOAT_3; 50698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_FLOAT_4; 50798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 50898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_DOUBLE_2; 50998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_DOUBLE_3; 51098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_DOUBLE_4; 51198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 51298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_UCHAR_2; 51398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_UCHAR_3; 51498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_UCHAR_4; 51598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 51698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_CHAR_2; 51798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_CHAR_3; 51898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_CHAR_4; 51998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 52098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_USHORT_2; 52198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_USHORT_3; 52298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_USHORT_4; 52398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 52498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_SHORT_2; 52598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_SHORT_3; 52698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_SHORT_4; 52798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 52898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_UINT_2; 52998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_UINT_3; 53098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_UINT_4; 53198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 53298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_INT_2; 53398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_INT_3; 53498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_INT_4; 53598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 53698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_ULONG_2; 53798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_ULONG_3; 53898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_ULONG_4; 53998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 54098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_LONG_2; 54198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_LONG_3; 54298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_LONG_4; 54398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 54498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_MATRIX_4X4; 54598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_MATRIX_3X3; 54698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement_MATRIX_2X2; 54798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 54898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Sampler mSampler_CLAMP_NEAREST; 54998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Sampler mSampler_CLAMP_LINEAR; 55098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR; 55198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Sampler mSampler_WRAP_NEAREST; 55298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Sampler mSampler_WRAP_LINEAR; 55398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Sampler mSampler_WRAP_LINEAR_MIP_LINEAR; 55498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 55598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /////////////////////////////////////////////////////////////////////////////////// 55698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // 55798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 55898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 55998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Base class application should derive from for handling RS messages 56098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * coming from their scripts. When a script calls sendToClient the data 56198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * fields will be filled in and then the run method called by a message 56298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * handling thread. This will occur some time after sendToClient completes 56398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * in the script. 56498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 56598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 56698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static class RSMessageHandler implements Runnable { 56798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected int[] mData; 56898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected int mID; 56998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected int mLength; 57098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void run() { 57198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 57298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 57398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 57498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * If an application is expecting messages it should set this field to an 57598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * instance of RSMessage. This instance will receive all the user messages 57698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * sent from sendToClient by scripts from this context. 57798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 57898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 57998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RSMessageHandler mMessageCallback = null; 58098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 58198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setMessageHandler(RSMessageHandler msg) { 58298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mMessageCallback = msg; 58398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 58498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public RSMessageHandler getMessageHandler() { 58598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mMessageCallback; 58698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 58798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 58898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 58998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Runtime error base class. An application should derive from this class 59098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * if it wishes to install an error handler. When errors occur at runtime 59198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * the fields in this class will be filled and the run method called. 59298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 59398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 59498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static class RSErrorHandler implements Runnable { 59598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected String mErrorMessage; 59698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected int mErrorNum; 59798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void run() { 59898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 59998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 60098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 60198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 60298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Application Error handler. All runtime errors will be dispatched to the 60398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * instance of RSAsyncError set here. If this field is null a 60498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * RSRuntimeException will instead be thrown with details about the error. 60598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * This will cause program termaination. 60698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 60798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 60898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RSErrorHandler mErrorCallback = null; 60998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 61098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setErrorHandler(RSErrorHandler msg) { 61198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mErrorCallback = msg; 61298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 61398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public RSErrorHandler getErrorHandler() { 61498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mErrorCallback; 61598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 61698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 61798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 61898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * RenderScript worker threads priority enumeration. The default value is 61998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * NORMAL. Applications wishing to do background processing such as 62098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * wallpapers should set their priority to LOW to avoid starving forground 62198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * processes. 62298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 62398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public enum Priority { 62498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)), 62598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams NORMAL (Process.THREAD_PRIORITY_DISPLAY); 62698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 62798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mID; 62898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Priority(int id) { 62998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mID = id; 63098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 63198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 63298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 63398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams void validate() { 63498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mContext == 0) { 63598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSInvalidStateException("Calling RS with no Context active."); 63698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 63798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 63898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 63998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 64098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 64198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Change the priority of the worker threads for this context. 64298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 64398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param p New priority to be set. 64498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 64598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setPriority(Priority p) { 64698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 64798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams nContextSetPriority(p.mID); 64898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 64998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 65098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static class MessageThread extends Thread { 65198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RenderScript mRS; 65298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mRun = true; 65398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int[] mAuxData = new int[2]; 65498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 65598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static final int RS_MESSAGE_TO_CLIENT_NONE = 0; 65698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1; 65798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2; 65898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static final int RS_MESSAGE_TO_CLIENT_ERROR = 3; 65998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static final int RS_MESSAGE_TO_CLIENT_USER = 4; 66098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 66198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static final int RS_ERROR_FATAL_UNKNOWN = 0x1000; 66298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 66398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams MessageThread(RenderScript rs) { 66498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams super("RSMessageThread"); 66598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS = rs; 66698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 66798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 66898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 66998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void run() { 67098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // This function is a temporary solution. The final solution will 67198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // used typed allocations where the message id is the type indicator. 67298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int[] rbuf = new int[16]; 67398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS.nContextInitToClient(mRS.mContext); 67498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams while(mRun) { 67598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rbuf[0] = 0; 67698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData); 67798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int size = mAuxData[1]; 67898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int subID = mAuxData[0]; 67998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 68098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (msg == RS_MESSAGE_TO_CLIENT_USER) { 68198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if ((size>>2) >= rbuf.length) { 68298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rbuf = new int[(size + 3) >> 2]; 68398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 68498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) != 68598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RS_MESSAGE_TO_CLIENT_USER) { 68698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSDriverException("Error processing message from Renderscript."); 68798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 68898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 68998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(mRS.mMessageCallback != null) { 69098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS.mMessageCallback.mData = rbuf; 69198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS.mMessageCallback.mID = subID; 69298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS.mMessageCallback.mLength = size; 69398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS.mMessageCallback.run(); 69498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } else { 69598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSInvalidStateException("Received a message from the script with no message handler installed."); 69698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 69798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams continue; 69898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 69998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 70098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (msg == RS_MESSAGE_TO_CLIENT_ERROR) { 70198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams String e = mRS.nContextGetErrorMessage(mRS.mContext); 70298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 70398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (subID >= RS_ERROR_FATAL_UNKNOWN) { 70498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSRuntimeException("Fatal error " + subID + ", details: " + e); 70598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 70698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 70798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(mRS.mErrorCallback != null) { 70898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS.mErrorCallback.mErrorMessage = e; 70998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS.mErrorCallback.mErrorNum = subID; 71098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS.mErrorCallback.run(); 71198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } else { 71298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // Do not throw here. In these cases, we do not have 71398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // a fatal error. 71498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 71598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams continue; 71698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 71798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 71898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // 2: teardown. 71998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // But we want to avoid starving other threads during 72098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // teardown by yielding until the next line in the destructor 72198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // can execute to set mRun = false 72298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams try { 72398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams sleep(1, 0); 72498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } catch(InterruptedException e) { 72598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 72698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 72798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Log.d(LOG_TAG, "MessageThread exiting."); 72898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 72998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 73098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 73198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RenderScript(Context ctx) { 73298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (ctx != null) { 73398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mApplicationContext = ctx.getApplicationContext(); 73498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 73598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 73698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 73798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 73898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Gets the application context associated with the RenderScript context. 73998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 74098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return The application context. 74198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 74298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public final Context getApplicationContext() { 74398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mApplicationContext; 74498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 74598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 74698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 74798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Create a basic RenderScript context. 74898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 74998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @hide 75098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param ctx The context. 75198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return RenderScript 75298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 75398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static RenderScript create(Context ctx, int sdkVersion) { 75498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RenderScript rs = new RenderScript(ctx); 75598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 75698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mDev = rs.nDeviceCreate(); 75798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion); 75898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (rs.mContext == 0) { 75998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSDriverException("Failed to create RS context."); 76098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 76198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mMessageThread = new MessageThread(rs); 76298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mMessageThread.start(); 76398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs; 76498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 76598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 76698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 76798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Create a basic RenderScript context. 76898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 76998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param ctx The context. 77098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return RenderScript 77198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 77298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static RenderScript create(Context ctx) { 77398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int v = ctx.getApplicationInfo().targetSdkVersion; 77498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return create(ctx, v); 77598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 77698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 77798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 77898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Print the currently available debugging information about the state of 77998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * the RS context to the log. 78098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 78198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 78298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void contextDump() { 78398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 78498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams nContextDump(0); 78598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 78698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 78798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 78898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Wait for any commands in the fifo between the java bindings and native to 78998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * be processed. 79098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 79198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 79298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void finish() { 79398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams nContextFinish(); 79498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 79598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 79698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 79798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Destroy this renderscript context. Once this function is called its no 79898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * longer legal to use this or any objects created by this context. 79998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 80098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 80198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void destroy() { 80298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams validate(); 80398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams nContextDeinitToClient(mContext); 80498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mMessageThread.mRun = false; 80598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams try { 80698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mMessageThread.join(); 80798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } catch(InterruptedException e) { 80898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 80998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 81098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams nContextDestroy(); 81198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mContext = 0; 81298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 81398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams nDeviceDestroy(mDev); 81498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mDev = 0; 81598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 81698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 81798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean isAlive() { 81898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mContext != 0; 81998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 82098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 82198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int safeID(BaseObj o) { 82298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(o != null) { 82398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return o.getID(this); 82498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 82598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return 0; 82698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 82798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams} 828