blob: b51279ab544c4e160ada5335ddaaabf2b9bf2427 [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jason Sams94d8e90a2009-06-10 16:09:05 -070017package android.renderscript;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070018
Jason Sams43ee06852009-08-12 17:54:11 -070019import java.lang.reflect.Field;
Jason Sams36e612a2009-07-31 16:26:13 -070020
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080021import android.content.Context;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080022import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070023import android.graphics.Bitmap;
Romain Guy650a3eb2009-08-31 14:06:43 -070024import android.graphics.BitmapFactory;
Jason Sams36e612a2009-07-31 16:26:13 -070025import android.util.Config;
26import android.util.Log;
27import android.view.Surface;
Jack Palevich43702d82009-05-28 13:38:16 -070028
Jack Palevich60aa3ea2009-05-26 13:45:08 -070029
Jason Samse29d4712009-07-23 15:19:03 -070030/**
Jason Sams27676fe2010-11-10 17:00:59 -080031 * RenderScript base master class. An instance of this class creates native
32 * worker threads for processing commands from this object. This base class
33 * does not provide any extended capabilities beyond simple data processing.
34 * For extended capabilities use derived classes such as RenderScriptGL.
35 *
36 *
37 *
Jason Samse29d4712009-07-23 15:19:03 -070038 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070039public class RenderScript {
Jason Sams3bc47d42009-11-12 15:10:25 -080040 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d2010-12-06 15:59:59 -080041 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070042 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080043 static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070044
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080045 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070046
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080047 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070048 * We use a class initializer to allow the native code to cache some
49 * field offsets.
50 */
Romain Guy650a3eb2009-08-31 14:06:43 -070051 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080052 static boolean sInitialized;
53 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070054
Jason Samsdba3ba52009-07-30 14:56:12 -070055
Jack Palevich60aa3ea2009-05-26 13:45:08 -070056 static {
57 sInitialized = false;
58 try {
Jason Samse29d4712009-07-23 15:19:03 -070059 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070060 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070061 sInitialized = true;
62 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080063 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
64 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070065 }
66 }
67
Jason Sams2e1872f2010-08-17 16:25:41 -070068 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070069 native int nDeviceCreate();
70 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070071 native void nDeviceSetConfig(int dev, int param, int value);
Jason Sams1c415172010-11-08 17:06:46 -080072 native void nContextGetUserMessage(int con, int[] data);
73 native String nContextGetErrorMessage(int con);
74 native int nContextPeekMessage(int con, int[] subID, boolean wait);
Jason Sams2e1872f2010-08-17 16:25:41 -070075 native void nContextInitToClient(int con);
76 native void nContextDeinitToClient(int con);
Jason Sams3eaa3382009-06-10 15:04:38 -070077
Jason Sams718cd1f2009-12-23 14:35:29 -080078
Jason Sams2e1872f2010-08-17 16:25:41 -070079 // Methods below are wrapped to protect the non-threadsafe
80 // lockless fifo.
Jason Sams11c8af92010-10-13 15:31:10 -070081 native int rsnContextCreateGL(int dev, int ver,
82 int colorMin, int colorPref,
83 int alphaMin, int alphaPref,
84 int depthMin, int depthPref,
85 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070086 int samplesMin, int samplesPref, float samplesQ, int dpi);
Jason Sams11c8af92010-10-13 15:31:10 -070087 synchronized int nContextCreateGL(int dev, int ver,
88 int colorMin, int colorPref,
89 int alphaMin, int alphaPref,
90 int depthMin, int depthPref,
91 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070092 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Jason Sams11c8af92010-10-13 15:31:10 -070093 return rsnContextCreateGL(dev, ver, colorMin, colorPref,
94 alphaMin, alphaPref, depthMin, depthPref,
95 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070096 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -070097 }
98 native int rsnContextCreate(int dev, int ver);
99 synchronized int nContextCreate(int dev, int ver) {
100 return rsnContextCreate(dev, ver);
101 }
102 native void rsnContextDestroy(int con);
103 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800104 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700105 rsnContextDestroy(mContext);
106 }
107 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
108 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800109 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700110 rsnContextSetSurface(mContext, w, h, sur);
111 }
112 native void rsnContextSetPriority(int con, int p);
113 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800114 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700115 rsnContextSetPriority(mContext, p);
116 }
117 native void rsnContextDump(int con, int bits);
118 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800119 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700120 rsnContextDump(mContext, bits);
121 }
122 native void rsnContextFinish(int con);
123 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800124 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700125 rsnContextFinish(mContext);
126 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700127
Jason Sams2e1872f2010-08-17 16:25:41 -0700128 native void rsnContextBindRootScript(int con, int script);
129 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800130 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700131 rsnContextBindRootScript(mContext, script);
132 }
133 native void rsnContextBindSampler(int con, int sampler, int slot);
134 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800135 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700136 rsnContextBindSampler(mContext, sampler, slot);
137 }
138 native void rsnContextBindProgramStore(int con, int pfs);
139 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800140 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700141 rsnContextBindProgramStore(mContext, pfs);
142 }
143 native void rsnContextBindProgramFragment(int con, int pf);
144 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800145 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700146 rsnContextBindProgramFragment(mContext, pf);
147 }
148 native void rsnContextBindProgramVertex(int con, int pv);
149 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800150 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700151 rsnContextBindProgramVertex(mContext, pv);
152 }
153 native void rsnContextBindProgramRaster(int con, int pr);
154 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800155 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700156 rsnContextBindProgramRaster(mContext, pr);
157 }
158 native void rsnContextPause(int con);
159 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800160 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700161 rsnContextPause(mContext);
162 }
163 native void rsnContextResume(int con);
164 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800165 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700166 rsnContextResume(mContext);
167 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700168
Jason Sams2e1872f2010-08-17 16:25:41 -0700169 native void rsnAssignName(int con, int obj, byte[] name);
170 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800171 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700172 rsnAssignName(mContext, obj, name);
173 }
174 native String rsnGetName(int con, int obj);
175 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800176 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700177 return rsnGetName(mContext, obj);
178 }
179 native void rsnObjDestroy(int con, int id);
180 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800181 // There is a race condition here. The calling code may be run
182 // by the gc while teardown is occuring. This protects againts
183 // deleting dead objects.
184 if (mContext != 0) {
185 rsnObjDestroy(mContext, id);
186 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700187 }
Jason Samsfe08d992009-05-27 14:45:32 -0700188
Jason Sams2e1872f2010-08-17 16:25:41 -0700189 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
190 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800191 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700192 return rsnElementCreate(mContext, type, kind, norm, vecSize);
193 }
Jason Sams70d4e502010-09-02 17:35:23 -0700194 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
195 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800196 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700197 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700198 }
199 native void rsnElementGetNativeData(int con, int id, int[] elementData);
200 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800201 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700202 rsnElementGetNativeData(mContext, id, elementData);
203 }
204 native void rsnElementGetSubElements(int con, int id, int[] IDs, String[] names);
205 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800206 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700207 rsnElementGetSubElements(mContext, id, IDs, names);
208 }
Jason Sams768bc022009-09-21 19:41:04 -0700209
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800210 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
211 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800212 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800213 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
Jason Sams2e1872f2010-08-17 16:25:41 -0700214 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700215 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
216 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800217 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700218 rsnTypeGetNativeData(mContext, id, typeData);
219 }
Jason Sams768bc022009-09-21 19:41:04 -0700220
Jason Samsd4b23b52010-12-13 15:32:35 -0800221 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage);
222 synchronized int nAllocationCreateTyped(int type, int mip, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800223 validate();
Jason Samsd4b23b52010-12-13 15:32:35 -0800224 return rsnAllocationCreateTyped(mContext, type, mip, usage);
Jason Sams2e1872f2010-08-17 16:25:41 -0700225 }
Jason Sams5476b452010-12-08 16:14:36 -0800226 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
227 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800228 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800229 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700230 }
Jason Sams5476b452010-12-08 16:14:36 -0800231 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
232 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800233 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800234 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800235 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700236 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
237 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800238 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700239 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
240 }
Jason Sams5476b452010-12-08 16:14:36 -0800241 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
242 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800243 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800244 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
245 }
246
Jason Sams4ef66502010-12-10 16:03:15 -0800247 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
248 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800249 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800250 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
251 }
252
253
Jason Sams5476b452010-12-08 16:14:36 -0800254 native void rsnAllocationSyncAll(int con, int alloc, int src);
255 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800256 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800257 rsnAllocationSyncAll(mContext, alloc, src);
258 }
Jason Samsf7086092011-01-12 13:28:37 -0800259 native void rsnAllocationGenerateMipmaps(int con, int alloc);
260 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800261 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800262 rsnAllocationGenerateMipmaps(mContext, alloc);
263 }
Jason Sams4ef66502010-12-10 16:03:15 -0800264 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
265 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800266 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800267 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700268 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700269
Jason Sams49a05d72010-12-29 14:31:29 -0800270
271 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
272 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800273 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800274 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700275 }
Jason Sams49a05d72010-12-29 14:31:29 -0800276 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
277 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800278 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800279 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
280 }
281 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
282 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800283 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800284 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
285 }
286 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
287 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800288 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800289 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700290 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700291
Jason Sams49a05d72010-12-29 14:31:29 -0800292 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
293 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800294 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800295 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700296 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700297
Jason Samsfa445b92011-01-07 17:00:07 -0800298 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
299 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800300 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800301 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
302 }
303 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
304 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800305 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800306 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
307 }
Jason Sams49a05d72010-12-29 14:31:29 -0800308 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
309 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800310 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800311 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700312 }
Jason Sams49a05d72010-12-29 14:31:29 -0800313 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
314 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800315 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800316 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700317 }
Jason Samsfa445b92011-01-07 17:00:07 -0800318 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
319 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800320 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800321 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
322 }
Jason Sams49a05d72010-12-29 14:31:29 -0800323
Jason Samsfa445b92011-01-07 17:00:07 -0800324 native void rsnAllocationRead(int con, int id, byte[] d);
325 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800326 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800327 rsnAllocationRead(mContext, id, d);
328 }
329 native void rsnAllocationRead(int con, int id, short[] d);
330 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800331 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800332 rsnAllocationRead(mContext, id, d);
333 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700334 native void rsnAllocationRead(int con, int id, int[] d);
335 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800336 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700337 rsnAllocationRead(mContext, id, d);
338 }
339 native void rsnAllocationRead(int con, int id, float[] d);
340 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800341 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700342 rsnAllocationRead(mContext, id, d);
343 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700344 native int rsnAllocationGetType(int con, int id);
345 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800346 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700347 return rsnAllocationGetType(mContext, id);
348 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700349
Jason Sams5edc6082010-10-05 13:32:49 -0700350 native void rsnAllocationResize1D(int con, int id, int dimX);
351 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800352 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700353 rsnAllocationResize1D(mContext, id, dimX);
354 }
355 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
356 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800357 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700358 rsnAllocationResize2D(mContext, id, dimX, dimY);
359 }
360
Jason Sams2e1872f2010-08-17 16:25:41 -0700361 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
362 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800363 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700364 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
365 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800366 native int rsnFileA3DCreateFromFile(int con, String path);
367 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800368 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800369 return rsnFileA3DCreateFromFile(mContext, path);
370 }
371 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
372 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800373 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800374 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
375 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700376 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
377 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800378 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700379 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
380 }
381 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
382 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800383 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700384 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
385 }
386 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
387 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800388 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700389 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
390 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700391
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800392 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
393 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800394 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700395 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
396 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800397 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
398 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800399 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800400 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
401 }
402 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
403 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800404 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800405 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
406 }
Jason Sams22534172009-08-04 16:58:20 -0700407
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700408
Jason Sams2e1872f2010-08-17 16:25:41 -0700409 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
410 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800411 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700412 rsnScriptBindAllocation(mContext, script, alloc, slot);
413 }
414 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
415 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800416 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700417 rsnScriptSetTimeZone(mContext, script, timeZone);
418 }
419 native void rsnScriptInvoke(int con, int id, int slot);
420 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800421 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700422 rsnScriptInvoke(mContext, id, slot);
423 }
424 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
425 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800426 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700427 rsnScriptInvokeV(mContext, id, slot, params);
428 }
429 native void rsnScriptSetVarI(int con, int id, int slot, int val);
430 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800431 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700432 rsnScriptSetVarI(mContext, id, slot, val);
433 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700434 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
435 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800436 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700437 rsnScriptSetVarJ(mContext, id, slot, val);
438 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700439 native void rsnScriptSetVarF(int con, int id, int slot, float val);
440 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800441 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700442 rsnScriptSetVarF(mContext, id, slot, val);
443 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700444 native void rsnScriptSetVarD(int con, int id, int slot, double val);
445 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800446 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700447 rsnScriptSetVarD(mContext, id, slot, val);
448 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700449 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
450 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800451 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700452 rsnScriptSetVarV(mContext, id, slot, val);
453 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800454 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
455 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800456 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800457 rsnScriptSetVarObj(mContext, id, slot, val);
458 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700459
Jason Sams2e1872f2010-08-17 16:25:41 -0700460 native void rsnScriptCBegin(int con);
461 synchronized void nScriptCBegin() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800462 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700463 rsnScriptCBegin(mContext);
464 }
465 native void rsnScriptCSetScript(int con, byte[] script, int offset, int length);
466 synchronized void nScriptCSetScript(byte[] script, int offset, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800467 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700468 rsnScriptCSetScript(mContext, script, offset, length);
469 }
Shih-wei Liaoeeca4352010-12-20 20:45:56 +0800470 native int rsnScriptCCreate(int con, String packageName, String resName, String cacheDir);
471 synchronized int nScriptCCreate(String packageName, String resName, String cacheDir) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800472 validate();
Shih-wei Liaoeeca4352010-12-20 20:45:56 +0800473 return rsnScriptCCreate(mContext, packageName, resName, cacheDir);
Jason Sams2e1872f2010-08-17 16:25:41 -0700474 }
Jason Samsebfb4362009-09-23 13:57:02 -0700475
Jason Sams2e1872f2010-08-17 16:25:41 -0700476 native void rsnSamplerBegin(int con);
477 synchronized void nSamplerBegin() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800478 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700479 rsnSamplerBegin(mContext);
480 }
481 native void rsnSamplerSet(int con, int param, int value);
482 synchronized void nSamplerSet(int param, int value) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800483 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700484 rsnSamplerSet(mContext, param, value);
485 }
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -0700486 native void rsnSamplerSet2(int con, int param, float value);
487 synchronized void nSamplerSet2(int param, float value) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800488 validate();
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -0700489 rsnSamplerSet2(mContext, param, value);
490 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700491 native int rsnSamplerCreate(int con);
492 synchronized int nSamplerCreate() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800493 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700494 return rsnSamplerCreate(mContext);
495 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800496
Jason Sams2e1872f2010-08-17 16:25:41 -0700497 native void rsnProgramStoreBegin(int con, int in, int out);
498 synchronized void nProgramStoreBegin(int in, int out) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800499 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700500 rsnProgramStoreBegin(mContext, in, out);
501 }
502 native void rsnProgramStoreDepthFunc(int con, int func);
503 synchronized void nProgramStoreDepthFunc(int func) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800504 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700505 rsnProgramStoreDepthFunc(mContext, func);
506 }
507 native void rsnProgramStoreDepthMask(int con, boolean enable);
508 synchronized void nProgramStoreDepthMask(boolean enable) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800509 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700510 rsnProgramStoreDepthMask(mContext, enable);
511 }
512 native void rsnProgramStoreColorMask(int con, boolean r, boolean g, boolean b, boolean a);
513 synchronized void nProgramStoreColorMask(boolean r, boolean g, boolean b, boolean a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800514 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700515 rsnProgramStoreColorMask(mContext, r, g, b, a);
516 }
517 native void rsnProgramStoreBlendFunc(int con, int src, int dst);
518 synchronized void nProgramStoreBlendFunc(int src, int dst) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800519 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700520 rsnProgramStoreBlendFunc(mContext, src, dst);
521 }
522 native void rsnProgramStoreDither(int con, boolean enable);
523 synchronized void nProgramStoreDither(boolean enable) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800524 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700525 rsnProgramStoreDither(mContext, enable);
526 }
527 native int rsnProgramStoreCreate(int con);
528 synchronized int nProgramStoreCreate() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800529 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700530 return rsnProgramStoreCreate(mContext);
531 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700532
Jason Sams2e1872f2010-08-17 16:25:41 -0700533 native int rsnProgramRasterCreate(int con, boolean pointSmooth, boolean lineSmooth, boolean pointSprite);
534 synchronized int nProgramRasterCreate(boolean pointSmooth, boolean lineSmooth, boolean pointSprite) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800535 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700536 return rsnProgramRasterCreate(mContext, pointSmooth, lineSmooth, pointSprite);
537 }
538 native void rsnProgramRasterSetLineWidth(int con, int pr, float v);
539 synchronized void nProgramRasterSetLineWidth(int pr, float v) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800540 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700541 rsnProgramRasterSetLineWidth(mContext, pr, v);
542 }
543 native void rsnProgramRasterSetCullMode(int con, int pr, int mode);
544 synchronized void nProgramRasterSetCullMode(int pr, int mode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800545 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700546 rsnProgramRasterSetCullMode(mContext, pr, mode);
547 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700548
Jason Sams2e1872f2010-08-17 16:25:41 -0700549 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
550 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800551 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700552 rsnProgramBindConstants(mContext, pv, slot, mID);
553 }
554 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
555 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800556 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700557 rsnProgramBindTexture(mContext, vpf, slot, a);
558 }
559 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
560 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800561 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700562 rsnProgramBindSampler(mContext, vpf, slot, s);
563 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700564 native int rsnProgramFragmentCreate(int con, String shader, int[] params);
565 synchronized int nProgramFragmentCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800566 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700567 return rsnProgramFragmentCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700568 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700569 native int rsnProgramVertexCreate(int con, String shader, int[] params);
570 synchronized int nProgramVertexCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800571 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700572 return rsnProgramVertexCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700573 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700574
Jason Sams2e1872f2010-08-17 16:25:41 -0700575 native int rsnMeshCreate(int con, int vtxCount, int indexCount);
576 synchronized int nMeshCreate(int vtxCount, int indexCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800577 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700578 return rsnMeshCreate(mContext, vtxCount, indexCount);
579 }
580 native void rsnMeshBindVertex(int con, int id, int alloc, int slot);
581 synchronized void nMeshBindVertex(int id, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800582 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700583 rsnMeshBindVertex(mContext, id, alloc, slot);
584 }
585 native void rsnMeshBindIndex(int con, int id, int alloc, int prim, int slot);
586 synchronized void nMeshBindIndex(int id, int alloc, int prim, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800587 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700588 rsnMeshBindIndex(mContext, id, alloc, prim, slot);
589 }
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800590 native void rsnMeshInitVertexAttribs(int con, int id);
591 synchronized void nMeshInitVertexAttribs(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800592 validate();
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800593 rsnMeshInitVertexAttribs(mContext, id);
594 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700595 native int rsnMeshGetVertexBufferCount(int con, int id);
596 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800597 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700598 return rsnMeshGetVertexBufferCount(mContext, id);
599 }
600 native int rsnMeshGetIndexCount(int con, int id);
601 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800602 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700603 return rsnMeshGetIndexCount(mContext, id);
604 }
605 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
606 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800607 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700608 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
609 }
610 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
611 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800612 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700613 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
614 }
615
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700616
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800617 int mDev;
618 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700619 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800620 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700621
Jason Sams8cb39de2010-06-01 15:47:01 -0700622 Element mElement_U8;
623 Element mElement_I8;
624 Element mElement_U16;
625 Element mElement_I16;
626 Element mElement_U32;
627 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700628 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700629 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700630 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700631 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700632 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700633
Jason Sams8cb39de2010-06-01 15:47:01 -0700634 Element mElement_ELEMENT;
635 Element mElement_TYPE;
636 Element mElement_ALLOCATION;
637 Element mElement_SAMPLER;
638 Element mElement_SCRIPT;
639 Element mElement_MESH;
640 Element mElement_PROGRAM_FRAGMENT;
641 Element mElement_PROGRAM_VERTEX;
642 Element mElement_PROGRAM_RASTER;
643 Element mElement_PROGRAM_STORE;
Jason Samsa70f4162010-03-26 15:33:42 -0700644
Jason Sams3c0dfba2009-09-27 17:50:38 -0700645 Element mElement_A_8;
646 Element mElement_RGB_565;
647 Element mElement_RGB_888;
648 Element mElement_RGBA_5551;
649 Element mElement_RGBA_4444;
650 Element mElement_RGBA_8888;
651
Jason Sams8cb39de2010-06-01 15:47:01 -0700652 Element mElement_FLOAT_2;
653 Element mElement_FLOAT_3;
654 Element mElement_FLOAT_4;
655 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800656
Jason Sams1d45c472010-08-25 14:31:48 -0700657 Element mElement_MATRIX_4X4;
658 Element mElement_MATRIX_3X3;
659 Element mElement_MATRIX_2X2;
660
Jason Sams4d339932010-05-11 14:03:58 -0700661 Sampler mSampler_CLAMP_NEAREST;
662 Sampler mSampler_CLAMP_LINEAR;
663 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
664 Sampler mSampler_WRAP_NEAREST;
665 Sampler mSampler_WRAP_LINEAR;
666 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
667
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700668 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
669 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700670 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
671 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700672
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700673 ProgramRaster mProgramRaster_CULL_BACK;
674 ProgramRaster mProgramRaster_CULL_FRONT;
675 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700676
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700677 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700678 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700679
Jason Sams27676fe2010-11-10 17:00:59 -0800680 /**
681 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800682 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800683 * fields will be filled in and then the run method called by a message
684 * handling thread. This will occur some time after sendToClient completes
685 * in the script.
686 *
687 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800688 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700689 protected int[] mData;
690 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800691 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700692 public void run() {
693 }
694 }
Jason Sams27676fe2010-11-10 17:00:59 -0800695 /**
696 * If an application is expecting messages it should set this field to an
697 * instance of RSMessage. This instance will receive all the user messages
698 * sent from sendToClient by scripts from this context.
699 *
700 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800701 RSMessageHandler mMessageCallback = null;
702
703 public void setMessageHandler(RSMessageHandler msg) {
704 mMessageCallback = msg;
705 }
706 public RSMessageHandler getMessageHandler() {
707 return mMessageCallback;
708 }
Jason Sams516c3192009-10-06 13:58:47 -0700709
Jason Sams27676fe2010-11-10 17:00:59 -0800710 /**
711 * Runtime error base class. An application should derive from this class
712 * if it wishes to install an error handler. When errors occur at runtime
713 * the fields in this class will be filled and the run method called.
714 *
715 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800716 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800717 protected String mErrorMessage;
718 protected int mErrorNum;
719 public void run() {
720 }
721 }
Jason Sams27676fe2010-11-10 17:00:59 -0800722
723 /**
724 * Application Error handler. All runtime errors will be dispatched to the
725 * instance of RSAsyncError set here. If this field is null a
726 * RSRuntimeException will instead be thrown with details about the error.
727 * This will cause program termaination.
728 *
729 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800730 RSErrorHandler mErrorCallback = null;
731
732 public void setErrorHandler(RSErrorHandler msg) {
733 mErrorCallback = msg;
734 }
735 public RSErrorHandler getErrorHandler() {
736 return mErrorCallback;
737 }
Jason Sams1c415172010-11-08 17:06:46 -0800738
Jason Sams27676fe2010-11-10 17:00:59 -0800739 /**
740 * RenderScript worker threads priority enumeration. The default value is
741 * NORMAL. Applications wishing to do background processing such as
742 * wallpapers should set their priority to LOW to avoid starving forground
743 * processes.
744 */
Jason Sams7d787b42009-11-15 12:14:26 -0800745 public enum Priority {
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800746 // Remap these numbers to opaque...
Jason Sams7d787b42009-11-15 12:14:26 -0800747 LOW (5), //ANDROID_PRIORITY_BACKGROUND + 5
748 NORMAL (-4); //ANDROID_PRIORITY_DISPLAY
749
750 int mID;
751 Priority(int id) {
752 mID = id;
753 }
754 }
755
Jason Sams771bebb2009-12-07 12:40:12 -0800756 void validate() {
757 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700758 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800759 }
760 }
761
Jason Sams27676fe2010-11-10 17:00:59 -0800762
763 /**
764 * Change the priority of the worker threads for this context.
765 *
766 * @param p New priority to be set.
767 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800768 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800769 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800770 nContextSetPriority(p.mID);
771 }
772
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800773 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700774 RenderScript mRS;
775 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800776 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800777
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800778 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
779 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
780 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
781 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
782 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700783
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800784 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800785
Jason Sams516c3192009-10-06 13:58:47 -0700786 MessageThread(RenderScript rs) {
787 super("RSMessageThread");
788 mRS = rs;
789
790 }
791
792 public void run() {
793 // This function is a temporary solution. The final solution will
794 // used typed allocations where the message id is the type indicator.
795 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700796 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700797 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700798 rbuf[0] = 0;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800799 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData, true);
800 int size = mAuxData[1];
801 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800802
803 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
804 if ((size>>2) >= rbuf.length) {
805 rbuf = new int[(size + 3) >> 2];
806 }
807 mRS.nContextGetUserMessage(mRS.mContext, rbuf);
808
809 if(mRS.mMessageCallback != null) {
810 mRS.mMessageCallback.mData = rbuf;
811 mRS.mMessageCallback.mID = subID;
812 mRS.mMessageCallback.mLength = size;
813 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700814 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800815 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700816 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700817 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700818 }
Jason Sams1c415172010-11-08 17:06:46 -0800819
820 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
821 String e = mRS.nContextGetErrorMessage(mRS.mContext);
822
Jason Samsadd9d962010-11-22 16:20:16 -0800823 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
824 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
825 }
826
Jason Sams1c415172010-11-08 17:06:46 -0800827 if(mRS.mErrorCallback != null) {
828 mRS.mErrorCallback.mErrorMessage = e;
829 mRS.mErrorCallback.mErrorNum = subID;
830 mRS.mErrorCallback.run();
831 } else {
832 //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
833 }
834 continue;
835 }
836
837 // 2: teardown.
838 // But we want to avoid starving other threads during
839 // teardown by yielding until the next line in the destructor
840 // can execute to set mRun = false
841 try {
842 sleep(1, 0);
843 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700844 }
Jason Sams516c3192009-10-06 13:58:47 -0700845 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800846 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700847 }
848 }
849
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800850 RenderScript(Context ctx) {
851 mApplicationContext = ctx.getApplicationContext();
852 }
853
854 /**
855 * Gets the application context associated with the RenderScript context.
856 *
857 * @return The application context.
858 */
859 public final Context getApplicationContext() {
860 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700861 }
862
Jason Sams27676fe2010-11-10 17:00:59 -0800863 /**
864 * Create a basic RenderScript context.
865 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800866 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800867 * @return RenderScript
868 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800869 public static RenderScript create(Context ctx) {
870 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800871
872 rs.mDev = rs.nDeviceCreate();
873 rs.mContext = rs.nContextCreate(rs.mDev, 0);
874 rs.mMessageThread = new MessageThread(rs);
875 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800876 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800877 }
878
Jason Sams27676fe2010-11-10 17:00:59 -0800879 /**
880 * Print the currently available debugging information about the state of
881 * the RS context to the log.
882 *
Jason Sams27676fe2010-11-10 17:00:59 -0800883 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800884 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800885 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800886 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800887 }
888
Jason Sams27676fe2010-11-10 17:00:59 -0800889 /**
890 * Wait for any commands in the fifo between the java bindings and native to
891 * be processed.
892 *
893 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700894 public void finish() {
895 nContextFinish();
896 }
897
Jason Sams27676fe2010-11-10 17:00:59 -0800898 /**
899 * Destroy this renderscript context. Once this function is called its no
900 * longer legal to use this or any objects created by this context.
901 *
902 */
Jason Samsf5b45962009-08-25 14:49:07 -0700903 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800904 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700905 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700906 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700907 try {
908 mMessageThread.join();
909 } catch(InterruptedException e) {
910 }
Jason Sams516c3192009-10-06 13:58:47 -0700911
Jason Sams2e1872f2010-08-17 16:25:41 -0700912 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700913 mContext = 0;
914
915 nDeviceDestroy(mDev);
916 mDev = 0;
917 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700918
Jason Samsa9e7a052009-09-25 14:51:22 -0700919 boolean isAlive() {
920 return mContext != 0;
921 }
922
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800923 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700924 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800925 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700926 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700927 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700928 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700929}