RenderScript.java revision d176abf6992ea9b34a01ba1e8b232ac4ac08db31
145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams/* 2baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray * Copyright (C) 2013 The Android Open Source Project 345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * you may not use this file except in compliance with the License. 645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * You may obtain a copy of the License at 745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 1045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Unless required by applicable law or agreed to in writing, software 1145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * See the License for the specific language governing permissions and 1445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * limitations under the License. 1545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 1645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1745d443665f5ce7efa934706a89883f0cc87f3513Jason Samspackage android.support.v8.renderscript; 1845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1945d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport java.io.File; 2045d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport java.lang.reflect.Field; 21d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murrayimport java.lang.reflect.Method; 2245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 2345d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport android.content.Context; 2445d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport android.content.pm.ApplicationInfo; 2545d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport android.content.pm.PackageManager; 2645d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport android.content.res.AssetManager; 2745d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport android.graphics.Bitmap; 2845d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport android.graphics.BitmapFactory; 2945d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport android.os.Process; 3045d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport android.util.Log; 3145d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport android.view.Surface; 3245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 33baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murrayimport android.os.SystemProperties; 3445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 3545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams/** 36032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * This class provides access to a RenderScript context, which controls RenderScript 37032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * initialization, resource management, and teardown. An instance of the RenderScript 38032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * class must be created before any other RS objects can be created. 3945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 4045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * <div class="special reference"> 4145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * <h3>Developer Guides</h3> 42032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * <p>For more information about creating an application that uses RenderScript, read the 43032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p> 4445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * </div> 4545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams **/ 4645d443665f5ce7efa934706a89883f0cc87f3513Jason Samspublic class RenderScript { 4745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static final String LOG_TAG = "RenderScript_jni"; 4845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static final boolean DEBUG = false; 4945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams @SuppressWarnings({"UnusedDeclaration", "deprecation"}) 5045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static final boolean LOG_ENABLED = false; 5145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 5245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams private Context mApplicationContext; 53a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 5445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /* 5545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * We use a class initializer to allow the native code to cache some 5645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * field offsets. 5745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 5845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) 5945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static boolean sInitialized; 60d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray static boolean sUseGCHooks; 61d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray static Object sRuntime; 62d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray static Method registerNativeAllocation; 63d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray static Method registerNativeFree; 64d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray 655ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray static Object lock = new Object(); 6645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 6745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // Non-threadsafe functions. 6845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int nDeviceCreate(); 6945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void nDeviceDestroy(int dev); 7045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void nDeviceSetConfig(int dev, int param, int value); 7145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int nContextGetUserMessage(int con, int[] data); 7245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native String nContextGetErrorMessage(int con); 7345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int nContextPeekMessage(int con, int[] subID); 7445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void nContextInitToClient(int con); 7545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void nContextDeinitToClient(int con); 7645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 77baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray static boolean isNative = false; 78baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray 79257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines private static int thunk = 0; 80257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines /** 81257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines * Determines whether or not we should be thunking into the native 82257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines * RenderScript layer or actually using the compatibility library. 83257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines */ 84257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines static boolean shouldThunk() { 85257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (thunk == 0) { 86257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2 87257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines && SystemProperties.getInt("debug.rs.forcecompat", 0) == 0) { 88257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines thunk = 1; 89257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } else { 90257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines thunk = -1; 91257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 92257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 93257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (thunk == 1) { 94257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines return true; 95257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 96257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines return false; 97257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines } 98257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines 9945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 10045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Name of the file that holds the object cache. 10145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 10245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams private static final String CACHE_PATH = "com.android.renderscript.cache"; 10345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static String mCachePath; 10445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 10545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 10645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Sets the directory to use as a persistent storage for the 10745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * renderscript object file cache. 10845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 10945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @hide 11045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param cacheDir A directory the current process can write to 11145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 11245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static void setupDiskCache(File cacheDir) { 11345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams File f = new File(cacheDir, CACHE_PATH); 11445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mCachePath = f.getAbsolutePath(); 11545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams f.mkdirs(); 11645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 11745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 118032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 119032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * ContextType specifies the specific type of context to be created. 120032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 121032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 12238f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams public enum ContextType { 123032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 124032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * NORMAL context, this is the default and what shipping apps should 125032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * use. 126032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 12738f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams NORMAL (0), 128032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines 129032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 130032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * DEBUG context, perform extra runtime checks to validate the 131032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * kernels and APIs are being used as intended. Get and SetElementAt 132032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * will be bounds checked in this mode. 133032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 13438f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams DEBUG (1), 135032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines 136032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 137032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * PROFILE context, Intended to be used once the first time an 138032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * application is run on a new device. This mode allows the runtime to 139032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * do additional testing and performance tuning. 140032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 14138f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams PROFILE (2); 14238f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams 14338f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams int mID; 14438f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams ContextType(int id) { 14538f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams mID = id; 14638f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams } 14738f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams } 14845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 14945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // Methods below are wrapped to protect the non-threadsafe 15045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // lockless fifo. 15138f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams native int rsnContextCreate(int dev, int ver, int sdkVer, int contextType); 15238f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams synchronized int nContextCreate(int dev, int ver, int sdkVer, int contextType) { 15338f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams return rsnContextCreate(dev, ver, sdkVer, contextType); 15445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 15545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnContextDestroy(int con); 15645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nContextDestroy() { 15745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 15845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnContextDestroy(mContext); 15945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 16045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnContextSetPriority(int con, int p); 16145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nContextSetPriority(int p) { 16245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 16345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnContextSetPriority(mContext, p); 16445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 16545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnContextDump(int con, int bits); 16645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nContextDump(int bits) { 16745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 16845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnContextDump(mContext, bits); 16945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 17045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnContextFinish(int con); 17145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nContextFinish() { 17245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 17345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnContextFinish(mContext); 17445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 17545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 176dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines native void rsnContextSendMessage(int con, int id, int[] data); 177dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines synchronized void nContextSendMessage(int id, int[] data) { 178dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines validate(); 179dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines rsnContextSendMessage(mContext, id, data); 180dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines } 181dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines 18245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnObjDestroy(int con, int id); 18345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nObjDestroy(int id) { 18445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // There is a race condition here. The calling code may be run 18545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // by the gc while teardown is occuring. This protects againts 18645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // deleting dead objects. 18745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mContext != 0) { 18845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnObjDestroy(mContext, id); 18945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 19045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 19145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 19245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize); 19345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) { 19445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 19545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rsnElementCreate(mContext, type, kind, norm, vecSize); 19645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 19745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes); 19845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) { 19945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 20045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rsnElementCreate2(mContext, elements, names, arraySizes); 20145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 20245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnElementGetNativeData(int con, int id, int[] elementData); 20345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nElementGetNativeData(int id, int[] elementData) { 20445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 20545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnElementGetNativeData(mContext, id, elementData); 20645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 20745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnElementGetSubElements(int con, int id, 20845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int[] IDs, String[] names, int[] arraySizes); 20945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) { 21045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 21145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnElementGetSubElements(mContext, id, IDs, names, arraySizes); 21245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 21345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 2145d9bba7f40f2c313f1d1ea724db9a37c69ebd828Jason Sams native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv); 2155d9bba7f40f2c313f1d1ea724db9a37c69ebd828Jason Sams synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) { 21645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 2175d9bba7f40f2c313f1d1ea724db9a37c69ebd828Jason Sams return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv); 21845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 21945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnTypeGetNativeData(int con, int id, int[] typeData); 22045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nTypeGetNativeData(int id, int[] typeData) { 22145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 22245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnTypeGetNativeData(mContext, id, typeData); 22345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 22445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 22545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer); 22645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) { 22745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 22845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer); 22945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 23045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage); 23145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) { 23245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 23345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage); 23445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 2355d9bba7f40f2c313f1d1ea724db9a37c69ebd828Jason Sams 2369c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray native int rsnAllocationCreateBitmapBackedAllocation(int con, int type, int mip, Bitmap bmp, int usage); 2379c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) { 2389c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray validate(); 2399c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage); 2409c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray } 2415d9bba7f40f2c313f1d1ea724db9a37c69ebd828Jason Sams 2425d9bba7f40f2c313f1d1ea724db9a37c69ebd828Jason Sams 24345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage); 24445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) { 24545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 24645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage); 24745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 24845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp); 24945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) { 25045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 25145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rsnAllocationCreateBitmapRef(mContext, type, bmp); 25245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 25345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage); 25445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) { 25545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 25645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage); 25745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 25845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 25945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp); 26045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) { 26145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 26245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationCopyToBitmap(mContext, alloc, bmp); 26345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 26445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 26545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 26645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationSyncAll(int con, int alloc, int src); 26745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationSyncAll(int alloc, int src) { 26845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 26945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationSyncAll(mContext, alloc, src); 27045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 2719c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray native void rsnAllocationIoSend(int con, int alloc); 2729c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray synchronized void nAllocationIoSend(int alloc) { 2739c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray validate(); 2749c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray rsnAllocationIoSend(mContext, alloc); 2759c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray } 2769c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray native void rsnAllocationIoReceive(int con, int alloc); 2779c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray synchronized void nAllocationIoReceive(int alloc) { 2789c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray validate(); 2799c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray rsnAllocationIoReceive(mContext, alloc); 2809c49e0a50bb720374cf9df2087ffd1ab3973f660Tim Murray } 28145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 28245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 28345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationGenerateMipmaps(int con, int alloc); 28445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationGenerateMipmaps(int alloc) { 28545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 28645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationGenerateMipmaps(mContext, alloc); 28745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 28845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp); 28945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) { 29045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 29145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationCopyFromBitmap(mContext, alloc, bmp); 29245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 29345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 29445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 29545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes); 29645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) { 29745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 29845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes); 29945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 30045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes); 30145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) { 30245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 30345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes); 30445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 30545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes); 30645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) { 30745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 30845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes); 30945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 31045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes); 31145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) { 31245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 31345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes); 31445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 31545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 31645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes); 31745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) { 31845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 31945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes); 32045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 32145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 32245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationData2D(int con, 32345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int dstAlloc, int dstXoff, int dstYoff, 32445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int dstMip, int dstFace, 32545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int width, int height, 32645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int srcAlloc, int srcXoff, int srcYoff, 32745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int srcMip, int srcFace); 32845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff, 32945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int dstMip, int dstFace, 33045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int width, int height, 33145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int srcAlloc, int srcXoff, int srcYoff, 33245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int srcMip, int srcFace) { 33345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 33445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationData2D(mContext, 33545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams dstAlloc, dstXoff, dstYoff, 33645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams dstMip, dstFace, 33745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams width, height, 33845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams srcAlloc, srcXoff, srcYoff, 33945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams srcMip, srcFace); 34045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 34145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 34245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes); 34345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) { 34445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 34545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes); 34645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 34745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes); 34845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) { 34945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 35045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes); 35145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 35245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes); 35345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) { 35445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 35545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes); 35645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 35745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes); 35845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) { 35945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 36045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes); 36145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 36245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b); 36345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) { 36445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 36545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b); 36645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 36745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 368302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams native void rsnAllocationData3D(int con, 369302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams int dstAlloc, int dstXoff, int dstYoff, int dstZoff, 370302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams int dstMip, 371302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams int width, int height, int depth, 372302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams int srcAlloc, int srcXoff, int srcYoff, int srcZoff, 373302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams int srcMip); 374302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams synchronized void nAllocationData3D(int dstAlloc, int dstXoff, int dstYoff, int dstZoff, 375302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams int dstMip, 376302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams int width, int height, int depth, 377302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams int srcAlloc, int srcXoff, int srcYoff, int srcZoff, 378302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams int srcMip) { 379302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams validate(); 380302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams rsnAllocationData3D(mContext, 381302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams dstAlloc, dstXoff, dstYoff, dstZoff, 382302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams dstMip, width, height, depth, 383302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams srcAlloc, srcXoff, srcYoff, srcZoff, srcMip); 384302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams } 385302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams 386302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes); 387302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes) { 388302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams validate(); 389302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); 390302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams } 391302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes); 392302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes) { 393302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams validate(); 394302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); 395302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams } 396302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes); 397302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes) { 398302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams validate(); 399302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); 400302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams } 401302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes); 402302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes) { 403302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams validate(); 404302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); 405302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams } 406302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams 407302bdd023dfccd7c63c429be4b6edb46314b6293Jason Sams 40845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationRead(int con, int id, byte[] d); 40945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationRead(int id, byte[] d) { 41045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 41145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationRead(mContext, id, d); 41245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 41345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationRead(int con, int id, short[] d); 41445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationRead(int id, short[] d) { 41545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 41645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationRead(mContext, id, d); 41745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 41845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationRead(int con, int id, int[] d); 41945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationRead(int id, int[] d) { 42045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 42145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationRead(mContext, id, d); 42245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 42345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationRead(int con, int id, float[] d); 42445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationRead(int id, float[] d) { 42545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 42645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationRead(mContext, id, d); 42745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 42845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int rsnAllocationGetType(int con, int id); 42945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized int nAllocationGetType(int id) { 43045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 43145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rsnAllocationGetType(mContext, id); 43245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 43345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 43445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationResize1D(int con, int id, int dimX); 43545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationResize1D(int id, int dimX) { 43645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 43745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationResize1D(mContext, id, dimX); 43845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 43945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnAllocationResize2D(int con, int id, int dimX, int dimY); 44045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nAllocationResize2D(int id, int dimX, int dimY) { 44145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 44245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnAllocationResize2D(mContext, id, dimX, dimY); 44345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 44445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 44545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptBindAllocation(int con, int script, int alloc, int slot); 44645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptBindAllocation(int script, int alloc, int slot) { 44745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 44845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptBindAllocation(mContext, script, alloc, slot); 44945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 45045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone); 45145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptSetTimeZone(int script, byte[] timeZone) { 45245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 45345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptSetTimeZone(mContext, script, timeZone); 45445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 45545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptInvoke(int con, int id, int slot); 45645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptInvoke(int id, int slot) { 45745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 45845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptInvoke(mContext, id, slot); 45945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 46045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params); 46145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptForEach(int con, int id, int slot, int ain, int aout); 462e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout, byte[] params, 463e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray int xstart, int xend, int ystart, int yend, int zstart, int zend); 464dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout, 465dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines int xstart, int xend, int ystart, int yend, int zstart, int zend); 46645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) { 46745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 46845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (params == null) { 46945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptForEach(mContext, id, slot, ain, aout); 47045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } else { 47145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptForEach(mContext, id, slot, ain, aout, params); 47245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 47345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 474dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines 475e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray synchronized void nScriptForEachClipped(int id, int slot, int ain, int aout, byte[] params, 476dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines int xstart, int xend, int ystart, int yend, int zstart, int zend) { 477e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray validate(); 478dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines if (params == null) { 479dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines rsnScriptForEachClipped(mContext, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend); 480dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines } else { 481dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines rsnScriptForEachClipped(mContext, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend); 482dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines } 483e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 484e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray 48545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptInvokeV(int con, int id, int slot, byte[] params); 48645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptInvokeV(int id, int slot, byte[] params) { 48745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 48845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptInvokeV(mContext, id, slot, params); 48945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 49045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptSetVarI(int con, int id, int slot, int val); 49145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptSetVarI(int id, int slot, int val) { 49245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 49345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptSetVarI(mContext, id, slot, val); 49445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 49545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptSetVarJ(int con, int id, int slot, long val); 49645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptSetVarJ(int id, int slot, long val) { 49745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 49845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptSetVarJ(mContext, id, slot, val); 49945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 50045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptSetVarF(int con, int id, int slot, float val); 50145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptSetVarF(int id, int slot, float val) { 50245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 50345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptSetVarF(mContext, id, slot, val); 50445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 50545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptSetVarD(int con, int id, int slot, double val); 50645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptSetVarD(int id, int slot, double val) { 50745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 50845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptSetVarD(mContext, id, slot, val); 50945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 51045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptSetVarV(int con, int id, int slot, byte[] val); 51145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptSetVarV(int id, int slot, byte[] val) { 51245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 51345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptSetVarV(mContext, id, slot, val); 51445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 51545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val, 51645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int e, int[] dims); 51745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptSetVarVE(int id, int slot, byte[] val, 51845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int e, int[] dims) { 51945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 52045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptSetVarVE(mContext, id, slot, val, e, dims); 52145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 52245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native void rsnScriptSetVarObj(int con, int id, int slot, int val); 52345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized void nScriptSetVarObj(int id, int slot, int val) { 52445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 52545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rsnScriptSetVarObj(mContext, id, slot, val); 52645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 52745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 52845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int rsnScriptCCreate(int con, String resName, String cacheDir, 52945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams byte[] script, int length); 53045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) { 53145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 53245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rsnScriptCCreate(mContext, resName, cacheDir, script, length); 53345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 53445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 535a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams native int rsnScriptIntrinsicCreate(int con, int id, int eid); 536a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams synchronized int nScriptIntrinsicCreate(int id, int eid) { 537a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams validate(); 538a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams return rsnScriptIntrinsicCreate(mContext, id, eid); 539a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 540a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 541a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams native int rsnScriptKernelIDCreate(int con, int sid, int slot, int sig); 542a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) { 543a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams validate(); 544a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams return rsnScriptKernelIDCreate(mContext, sid, slot, sig); 545a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 546a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 547a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams native int rsnScriptFieldIDCreate(int con, int sid, int slot); 548a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams synchronized int nScriptFieldIDCreate(int sid, int slot) { 549a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams validate(); 550a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams return rsnScriptFieldIDCreate(mContext, sid, slot); 551a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 552a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 553a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams native int rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types); 554a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) { 555a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams validate(); 556a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types); 557a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 558a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 559a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc); 560a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) { 561a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams validate(); 562a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams rsnScriptGroupSetInput(mContext, group, kernel, alloc); 563a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 564a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 565a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc); 566a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) { 567a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams validate(); 568a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams rsnScriptGroupSetOutput(mContext, group, kernel, alloc); 569a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 570a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 571a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams native void rsnScriptGroupExecute(int con, int group); 572a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams synchronized void nScriptGroupExecute(int group) { 573a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams validate(); 574a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams rsnScriptGroupExecute(mContext, group); 575a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 576a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 57745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams native int rsnSamplerCreate(int con, int magFilter, int minFilter, 57845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int wrapS, int wrapT, int wrapR, float aniso); 57945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams synchronized int nSamplerCreate(int magFilter, int minFilter, 58045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int wrapS, int wrapT, int wrapR, float aniso) { 58145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 58245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso); 58345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 58445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 58545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 58645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 58745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int mDev; 58845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int mContext; 58945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams @SuppressWarnings({"FieldCanBeLocal"}) 59045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams MessageThread mMessageThread; 59145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 59245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_U8; 59345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_I8; 59445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_U16; 59545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_I16; 59645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_U32; 59745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_I32; 59845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_U64; 59945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_I64; 60045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_F32; 60145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_F64; 60245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_BOOLEAN; 60345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 60445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_ELEMENT; 60545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_TYPE; 60645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_ALLOCATION; 60745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_SAMPLER; 60845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_SCRIPT; 60945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 61045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_A_8; 61145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_RGB_565; 61245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_RGB_888; 61345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_RGBA_5551; 61445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_RGBA_4444; 61545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_RGBA_8888; 61645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 61745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_FLOAT_2; 61845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_FLOAT_3; 61945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_FLOAT_4; 62045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 62145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_DOUBLE_2; 62245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_DOUBLE_3; 62345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_DOUBLE_4; 62445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 62545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_UCHAR_2; 62645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_UCHAR_3; 62745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_UCHAR_4; 62845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 62945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_CHAR_2; 63045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_CHAR_3; 63145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_CHAR_4; 63245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 63345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_USHORT_2; 63445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_USHORT_3; 63545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_USHORT_4; 63645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 63745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_SHORT_2; 63845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_SHORT_3; 63945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_SHORT_4; 64045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 64145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_UINT_2; 64245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_UINT_3; 64345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_UINT_4; 64445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 64545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_INT_2; 64645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_INT_3; 64745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_INT_4; 64845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 64945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_ULONG_2; 65045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_ULONG_3; 65145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_ULONG_4; 65245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 65345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_LONG_2; 65445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_LONG_3; 65545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_LONG_4; 65645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 65745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_MATRIX_4X4; 65845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_MATRIX_3X3; 65945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element mElement_MATRIX_2X2; 66045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 66145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Sampler mSampler_CLAMP_NEAREST; 66245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Sampler mSampler_CLAMP_LINEAR; 66345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR; 66445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Sampler mSampler_WRAP_NEAREST; 66545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Sampler mSampler_WRAP_LINEAR; 66645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Sampler mSampler_WRAP_LINEAR_MIP_LINEAR; 667e79f94bf70aebfc9bc42a857ec5b89ba1b95ba27Tim Murray Sampler mSampler_MIRRORED_REPEAT_NEAREST; 668e79f94bf70aebfc9bc42a857ec5b89ba1b95ba27Tim Murray Sampler mSampler_MIRRORED_REPEAT_LINEAR; 669e79f94bf70aebfc9bc42a857ec5b89ba1b95ba27Tim Murray Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR; 670e79f94bf70aebfc9bc42a857ec5b89ba1b95ba27Tim Murray 67145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 67245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /////////////////////////////////////////////////////////////////////////////////// 67345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // 67445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 67545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 676032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * The base class from which an application should derive in order 677032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * to receive RS messages from scripts. When a script calls {@code 678032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * rsSendToClient}, the data fields will be filled, and the run 679032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * method will be called on a separate thread. This will occur 680032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * some time after {@code rsSendToClient} completes in the script, 681032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * as {@code rsSendToClient} is asynchronous. Message handlers are 682032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * not guaranteed to have completed when {@link 6832192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * android.support.v8.renderscript.RenderScript#finish} returns. 68445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 68545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 68645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static class RSMessageHandler implements Runnable { 68745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected int[] mData; 68845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected int mID; 68945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected int mLength; 69045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void run() { 69145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 69245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 69345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 694032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * If an application is expecting messages, it should set this 695032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * field to an instance of {@link RSMessageHandler}. This 696032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * instance will receive all the user messages sent from {@code 697032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * sendToClient} by scripts from this context. 69845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 69945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 70045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams RSMessageHandler mMessageCallback = null; 70145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 70245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setMessageHandler(RSMessageHandler msg) { 70345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mMessageCallback = msg; 704baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray if (isNative) { 705baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray RenderScriptThunker rst = (RenderScriptThunker) this; 706baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray android.renderscript.RenderScript.RSMessageHandler newmsg = 707baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray new android.renderscript.RenderScript.RSMessageHandler() { 708baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray public void run() { 709baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray mMessageCallback.mData = mData; 710baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray mMessageCallback.mID = mID; 711baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray mMessageCallback.mLength = mLength; 712baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray mMessageCallback.run(); 713baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 714baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray }; 715baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray rst.mN.setMessageHandler(newmsg); 716baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 71745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 71845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public RSMessageHandler getMessageHandler() { 71945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mMessageCallback; 72045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 72145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 72245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 723032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Place a message into the message queue to be sent back to the message 724032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * handler once all previous commands have been executed. 725032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 726dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines * @hide 727dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines * 728dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines * @param id 729dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines * @param data 730dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines */ 731dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines public void sendMessage(int id, int[] data) { 732dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines nContextSendMessage(id, data); 733dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines } 734dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines 735dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines /** 736032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * The runtime error handler base class. An application should derive from this class 737032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * if it wishes to install an error handler. When errors occur at runtime, 738032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * the fields in this class will be filled, and the run method will be called. 73945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 74045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 74145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static class RSErrorHandler implements Runnable { 74245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected String mErrorMessage; 74345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected int mErrorNum; 74445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void run() { 74545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 74645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 74745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 74845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 74945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Application Error handler. All runtime errors will be dispatched to the 75045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * instance of RSAsyncError set here. If this field is null a 751032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * {@link RSRuntimeException} will instead be thrown with details about the error. 75245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * This will cause program termaination. 75345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 75445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 75545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams RSErrorHandler mErrorCallback = null; 75645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 75745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setErrorHandler(RSErrorHandler msg) { 75845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mErrorCallback = msg; 759baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray if (isNative) { 760baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray RenderScriptThunker rst = (RenderScriptThunker) this; 761baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray android.renderscript.RenderScript.RSErrorHandler newmsg = 762baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray new android.renderscript.RenderScript.RSErrorHandler() { 763baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray public void run() { 764baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray mErrorCallback.mErrorMessage = mErrorMessage; 765baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray mErrorCallback.mErrorNum = mErrorNum; 766baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray mErrorCallback.run(); 767baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 768baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray }; 769baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray rst.mN.setErrorHandler(newmsg); 770baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 77145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 77245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public RSErrorHandler getErrorHandler() { 77345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mErrorCallback; 77445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 77545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 77645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 777032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * RenderScript worker thread priority enumeration. The default value is 778032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * NORMAL. Applications wishing to do background processing should set 779032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * their priority to LOW to avoid starving forground processes. 78045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 78145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public enum Priority { 78245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)), 78345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams NORMAL (Process.THREAD_PRIORITY_DISPLAY); 78445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 78545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int mID; 78645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Priority(int id) { 78745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mID = id; 78845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 78945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 79045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 79145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams void validate() { 79245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mContext == 0) { 79345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSInvalidStateException("Calling RS with no Context active."); 79445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 79545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 79645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 79745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 79845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 79945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Change the priority of the worker threads for this context. 80045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 80145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param p New priority to be set. 80245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 80345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setPriority(Priority p) { 80445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 80545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams nContextSetPriority(p.mID); 80645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 80745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 80845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static class MessageThread extends Thread { 80945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams RenderScript mRS; 81045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams boolean mRun = true; 81145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int[] mAuxData = new int[2]; 81245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 81345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static final int RS_MESSAGE_TO_CLIENT_NONE = 0; 81445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1; 81545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2; 81645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static final int RS_MESSAGE_TO_CLIENT_ERROR = 3; 81745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static final int RS_MESSAGE_TO_CLIENT_USER = 4; 81845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 81945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static final int RS_ERROR_FATAL_UNKNOWN = 0x1000; 82045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 82145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams MessageThread(RenderScript rs) { 82245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams super("RSMessageThread"); 82345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS = rs; 82445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 82545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 82645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 82745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void run() { 82845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // This function is a temporary solution. The final solution will 82945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // used typed allocations where the message id is the type indicator. 83045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int[] rbuf = new int[16]; 83145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS.nContextInitToClient(mRS.mContext); 83245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams while(mRun) { 83345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rbuf[0] = 0; 83445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData); 83545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int size = mAuxData[1]; 83645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int subID = mAuxData[0]; 83745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 83845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (msg == RS_MESSAGE_TO_CLIENT_USER) { 83945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if ((size>>2) >= rbuf.length) { 84045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rbuf = new int[(size + 3) >> 2]; 84145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 84245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) != 84345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams RS_MESSAGE_TO_CLIENT_USER) { 844032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines throw new RSDriverException("Error processing message from RenderScript."); 84545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 84645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 84745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(mRS.mMessageCallback != null) { 84845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS.mMessageCallback.mData = rbuf; 84945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS.mMessageCallback.mID = subID; 85045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS.mMessageCallback.mLength = size; 85145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS.mMessageCallback.run(); 85245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } else { 85345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSInvalidStateException("Received a message from the script with no message handler installed."); 85445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 85545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams continue; 85645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 85745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 85845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (msg == RS_MESSAGE_TO_CLIENT_ERROR) { 85945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams String e = mRS.nContextGetErrorMessage(mRS.mContext); 86045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 86145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (subID >= RS_ERROR_FATAL_UNKNOWN) { 86245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSRuntimeException("Fatal error " + subID + ", details: " + e); 86345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 86445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 86545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(mRS.mErrorCallback != null) { 86645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS.mErrorCallback.mErrorMessage = e; 86745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS.mErrorCallback.mErrorNum = subID; 86845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS.mErrorCallback.run(); 86945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } else { 870dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines android.util.Log.e(LOG_TAG, "non fatal RS error, " + e); 87145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // Do not throw here. In these cases, we do not have 87245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // a fatal error. 87345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 87445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams continue; 87545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 87645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 87745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // 2: teardown. 87845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // But we want to avoid starving other threads during 87945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // teardown by yielding until the next line in the destructor 88045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // can execute to set mRun = false 88145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams try { 88245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams sleep(1, 0); 88345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } catch(InterruptedException e) { 88445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 88545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 88690fbed82b44c96f1e51db4dacb00d2b3f6affbdfTim Murray //Log.d(LOG_TAG, "MessageThread exiting."); 88745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 88845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 88945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 89045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams RenderScript(Context ctx) { 89145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (ctx != null) { 89245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mApplicationContext = ctx.getApplicationContext(); 89345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 89445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 89545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 89645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 89745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Gets the application context associated with the RenderScript context. 89845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 89945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return The application context. 90045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 90145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public final Context getApplicationContext() { 90245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mApplicationContext; 90345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 90445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 90545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 90638f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams * @hide 90738f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams */ 90838f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams public static RenderScript create(Context ctx, int sdkVersion) { 90938f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams return create(ctx, sdkVersion, ContextType.NORMAL); 91038f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams } 91138f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams 91238f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams /** 913032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Create a RenderScript context. 91445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 91545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @hide 91645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param ctx The context. 91745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return RenderScript 91845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 91938f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) { 92045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams RenderScript rs = new RenderScript(ctx); 92145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 922257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hines if (shouldThunk()) { 923baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray android.util.Log.v(LOG_TAG, "RS native mode"); 924baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray return RenderScriptThunker.create(ctx, sdkVersion); 925baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 9265ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray synchronized(lock) { 9275ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray if (sInitialized == false) { 9285ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray try { 929d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray Class<?> vm_runtime = Class.forName("dalvik.system.VMRuntime"); 930d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray Method get_runtime = vm_runtime.getDeclaredMethod("getRuntime"); 931d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray sRuntime = get_runtime.invoke(null); 932d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray registerNativeAllocation = vm_runtime.getDeclaredMethod("registerNativeAllocation", Integer.TYPE); 933d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray registerNativeFree = vm_runtime.getDeclaredMethod("registerNativeFree", Integer.TYPE); 934d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray sUseGCHooks = true; 935d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray } catch (Exception e) { 936d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray Log.e(LOG_TAG, "No GC methods"); 937d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray sUseGCHooks = false; 938d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray } 939d176abf6992ea9b34a01ba1e8b232ac4ac08db31Tim Murray try { 9405ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray System.loadLibrary("RSSupport"); 9415ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray System.loadLibrary("rsjni"); 9425ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray sInitialized = true; 9435ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray } catch (UnsatisfiedLinkError e) { 9445ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray Log.e(LOG_TAG, "Error loading RS jni library: " + e); 9455ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray throw new RSRuntimeException("Error loading RS jni library: " + e); 9465ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray } 9475ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray } 9485ed4a8e857b5e8a64ad87ccfafaa275b5ba8c36aTim Murray } 949baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray 95013e357047ba2bf81bf44000a623464b1287aafe7Jason Sams android.util.Log.v(LOG_TAG, "RS compat mode"); 95145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mDev = rs.nDeviceCreate(); 95238f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion, ct.mID); 95345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (rs.mContext == 0) { 95445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSDriverException("Failed to create RS context."); 95545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 95645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mMessageThread = new MessageThread(rs); 95745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mMessageThread.start(); 95813e357047ba2bf81bf44000a623464b1287aafe7Jason Sams return rs; 95945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 96045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 96145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 962032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Create a RenderScript context. 96345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 96445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param ctx The context. 96545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return RenderScript 96645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 96745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static RenderScript create(Context ctx) { 96838f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams return create(ctx, ContextType.NORMAL); 96938f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams } 97038f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams 97138f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams /** 972032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Create a RenderScript context. 97338f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams * 97438f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams * @hide 97538f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams * 97638f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams * @param ctx The context. 977032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @param ct The type of context to be created. 97838f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams * @return RenderScript 97938f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams */ 98038f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams public static RenderScript create(Context ctx, ContextType ct) { 98145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int v = ctx.getApplicationInfo().targetSdkVersion; 98238f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams return create(ctx, v, ct); 98345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 98445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 98545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 98645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Print the currently available debugging information about the state of 98745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * the RS context to the log. 98845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 98945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 99045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void contextDump() { 99145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 99245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams nContextDump(0); 99345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 99445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 99545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 996032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Wait for any pending asynchronous opeations (such as copies to a RS 997032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * allocation or RS script executions) to complete. 99845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 99945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 100045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void finish() { 100145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams nContextFinish(); 100245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 100345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 100445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 1005032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Destroys this RenderScript context. Once this function is called, 1006032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * using this context or any objects belonging to this context is 1007032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * illegal. 100845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 100945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 101045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void destroy() { 101145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams validate(); 101245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams nContextDeinitToClient(mContext); 101345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mMessageThread.mRun = false; 101445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams try { 101545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mMessageThread.join(); 101645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } catch(InterruptedException e) { 101745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 101845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 101945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams nContextDestroy(); 102045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mContext = 0; 102145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 102245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams nDeviceDestroy(mDev); 102345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mDev = 0; 102445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 102545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 102645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams boolean isAlive() { 102745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mContext != 0; 102845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 102945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 103045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int safeID(BaseObj o) { 103145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(o != null) { 103245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return o.getID(this); 103345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 103445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return 0; 103545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 103645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams} 1037