blob: 2110e37582ae5128ac5532d561371d5f122b01ba [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;
Glenn Kasten260c77a2011-06-01 17:25:54 -070025import android.os.Process;
Jason Sams36e612a2009-07-31 16:26:13 -070026import 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"})
Joe Onorato43a17652011-04-06 19:22:23 -070043 static final boolean LOG_ENABLED = false;
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 Samsedbfabd2011-05-17 15:01:29 -070072 native int nContextGetUserMessage(int con, int[] data);
Jason Sams1c415172010-11-08 17:06:46 -080073 native String nContextGetErrorMessage(int con);
Jason Samsedbfabd2011-05-17 15:01:29 -070074 native int nContextPeekMessage(int con, int[] subID);
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
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700298 native void rsnAllocationData2D(int con,
299 int dstAlloc, int dstXoff, int dstYoff,
300 int dstMip, int dstFace,
301 int width, int height,
302 int srcAlloc, int srcXoff, int srcYoff,
303 int srcMip, int srcFace);
304 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
305 int dstMip, int dstFace,
306 int width, int height,
307 int srcAlloc, int srcXoff, int srcYoff,
308 int srcMip, int srcFace) {
309 validate();
310 rsnAllocationData2D(mContext,
311 dstAlloc, dstXoff, dstYoff,
312 dstMip, dstFace,
313 width, height,
314 srcAlloc, srcXoff, srcYoff,
315 srcMip, srcFace);
316 }
317
Jason Samsfa445b92011-01-07 17:00:07 -0800318 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
319 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 -0800320 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800321 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
322 }
323 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
324 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 -0800325 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800326 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
327 }
Jason Sams49a05d72010-12-29 14:31:29 -0800328 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
329 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 -0800330 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800331 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700332 }
Jason Sams49a05d72010-12-29 14:31:29 -0800333 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
334 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 -0800335 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800336 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700337 }
Jason Samsfa445b92011-01-07 17:00:07 -0800338 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
339 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800340 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800341 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
342 }
Jason Sams49a05d72010-12-29 14:31:29 -0800343
Jason Samsfa445b92011-01-07 17:00:07 -0800344 native void rsnAllocationRead(int con, int id, byte[] d);
345 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800346 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800347 rsnAllocationRead(mContext, id, d);
348 }
349 native void rsnAllocationRead(int con, int id, short[] d);
350 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800351 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800352 rsnAllocationRead(mContext, id, d);
353 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700354 native void rsnAllocationRead(int con, int id, int[] d);
355 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800356 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700357 rsnAllocationRead(mContext, id, d);
358 }
359 native void rsnAllocationRead(int con, int id, float[] d);
360 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800361 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700362 rsnAllocationRead(mContext, id, d);
363 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700364 native int rsnAllocationGetType(int con, int id);
365 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800366 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700367 return rsnAllocationGetType(mContext, id);
368 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700369
Jason Sams5edc6082010-10-05 13:32:49 -0700370 native void rsnAllocationResize1D(int con, int id, int dimX);
371 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800372 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700373 rsnAllocationResize1D(mContext, id, dimX);
374 }
375 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
376 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800377 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700378 rsnAllocationResize2D(mContext, id, dimX, dimY);
379 }
380
Jason Sams2e1872f2010-08-17 16:25:41 -0700381 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
382 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800383 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700384 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
385 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800386 native int rsnFileA3DCreateFromFile(int con, String path);
387 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800388 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800389 return rsnFileA3DCreateFromFile(mContext, path);
390 }
391 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
392 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800393 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800394 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
395 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700396 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
397 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800398 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700399 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
400 }
401 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
402 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800403 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700404 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
405 }
406 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
407 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800408 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700409 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
410 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700411
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800412 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
413 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800414 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700415 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
416 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800417 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
418 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800419 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800420 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
421 }
422 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
423 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800424 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800425 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
426 }
Jason Sams22534172009-08-04 16:58:20 -0700427
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700428
Jason Sams2e1872f2010-08-17 16:25:41 -0700429 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
430 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800431 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700432 rsnScriptBindAllocation(mContext, script, alloc, slot);
433 }
434 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
435 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800436 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700437 rsnScriptSetTimeZone(mContext, script, timeZone);
438 }
439 native void rsnScriptInvoke(int con, int id, int slot);
440 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800441 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700442 rsnScriptInvoke(mContext, id, slot);
443 }
Jason Sams6e494d32011-04-27 16:33:11 -0700444 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
445 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
446 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
447 validate();
448 if (params == null) {
449 rsnScriptForEach(mContext, id, slot, ain, aout);
450 } else {
451 rsnScriptForEach(mContext, id, slot, ain, aout, params);
452 }
453 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700454 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
455 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800456 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700457 rsnScriptInvokeV(mContext, id, slot, params);
458 }
459 native void rsnScriptSetVarI(int con, int id, int slot, int val);
460 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800461 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700462 rsnScriptSetVarI(mContext, id, slot, val);
463 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700464 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
465 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800466 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700467 rsnScriptSetVarJ(mContext, id, slot, val);
468 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700469 native void rsnScriptSetVarF(int con, int id, int slot, float val);
470 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800471 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700472 rsnScriptSetVarF(mContext, id, slot, val);
473 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700474 native void rsnScriptSetVarD(int con, int id, int slot, double val);
475 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800476 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700477 rsnScriptSetVarD(mContext, id, slot, val);
478 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700479 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
480 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800481 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700482 rsnScriptSetVarV(mContext, id, slot, val);
483 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800484 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
485 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800486 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800487 rsnScriptSetVarObj(mContext, id, slot, val);
488 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700489
Jason Samse4a06c52011-03-16 16:29:28 -0700490 native int rsnScriptCCreate(int con, String resName, String cacheDir,
491 byte[] script, int length);
492 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800493 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700494 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700495 }
Jason Samsebfb4362009-09-23 13:57:02 -0700496
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700497 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
498 int wrapS, int wrapT, int wrapR, float aniso);
499 synchronized int nSamplerCreate(int magFilter, int minFilter,
500 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800501 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700502 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700503 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800504
Jason Sams331bf9b2011-04-06 11:23:54 -0700505 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
506 boolean depthMask, boolean dither,
507 int srcMode, int dstMode, int depthFunc);
508 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
509 boolean depthMask, boolean dither,
510 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800511 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700512 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
513 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700514 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700515
Jason Sams331bf9b2011-04-06 11:23:54 -0700516 native int rsnProgramRasterCreate(int con, boolean pointSmooth, boolean lineSmooth,
517 boolean pointSprite, float lineWidth, int cullMode);
518 synchronized int nProgramRasterCreate(boolean pointSmooth, boolean lineSmooth,
519 boolean pointSprite, float lineWidth, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800520 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700521 return rsnProgramRasterCreate(mContext, pointSmooth, lineSmooth, pointSprite, lineWidth,
522 cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700523 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700524
Jason Sams2e1872f2010-08-17 16:25:41 -0700525 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
526 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800527 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700528 rsnProgramBindConstants(mContext, pv, slot, mID);
529 }
530 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
531 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800532 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700533 rsnProgramBindTexture(mContext, vpf, slot, a);
534 }
535 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
536 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800537 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700538 rsnProgramBindSampler(mContext, vpf, slot, s);
539 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700540 native int rsnProgramFragmentCreate(int con, String shader, int[] params);
541 synchronized int nProgramFragmentCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800542 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700543 return rsnProgramFragmentCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700544 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700545 native int rsnProgramVertexCreate(int con, String shader, int[] params);
546 synchronized int nProgramVertexCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800547 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700548 return rsnProgramVertexCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700549 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700550
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700551 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
552 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800553 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700554 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800555 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700556 native int rsnMeshGetVertexBufferCount(int con, int id);
557 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800558 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700559 return rsnMeshGetVertexBufferCount(mContext, id);
560 }
561 native int rsnMeshGetIndexCount(int con, int id);
562 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800563 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700564 return rsnMeshGetIndexCount(mContext, id);
565 }
566 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
567 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800568 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700569 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
570 }
571 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
572 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800573 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700574 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
575 }
576
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700577
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800578 int mDev;
579 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700580 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800581 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700582
Jason Sams8cb39de2010-06-01 15:47:01 -0700583 Element mElement_U8;
584 Element mElement_I8;
585 Element mElement_U16;
586 Element mElement_I16;
587 Element mElement_U32;
588 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700589 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700590 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700591 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700592 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700593 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700594
Jason Sams8cb39de2010-06-01 15:47:01 -0700595 Element mElement_ELEMENT;
596 Element mElement_TYPE;
597 Element mElement_ALLOCATION;
598 Element mElement_SAMPLER;
599 Element mElement_SCRIPT;
600 Element mElement_MESH;
601 Element mElement_PROGRAM_FRAGMENT;
602 Element mElement_PROGRAM_VERTEX;
603 Element mElement_PROGRAM_RASTER;
604 Element mElement_PROGRAM_STORE;
Jason Samsa70f4162010-03-26 15:33:42 -0700605
Jason Sams3c0dfba2009-09-27 17:50:38 -0700606 Element mElement_A_8;
607 Element mElement_RGB_565;
608 Element mElement_RGB_888;
609 Element mElement_RGBA_5551;
610 Element mElement_RGBA_4444;
611 Element mElement_RGBA_8888;
612
Jason Sams8cb39de2010-06-01 15:47:01 -0700613 Element mElement_FLOAT_2;
614 Element mElement_FLOAT_3;
615 Element mElement_FLOAT_4;
616 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800617
Jason Sams1d45c472010-08-25 14:31:48 -0700618 Element mElement_MATRIX_4X4;
619 Element mElement_MATRIX_3X3;
620 Element mElement_MATRIX_2X2;
621
Jason Sams4d339932010-05-11 14:03:58 -0700622 Sampler mSampler_CLAMP_NEAREST;
623 Sampler mSampler_CLAMP_LINEAR;
624 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
625 Sampler mSampler_WRAP_NEAREST;
626 Sampler mSampler_WRAP_LINEAR;
627 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
628
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700629 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
630 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700631 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
632 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700633
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700634 ProgramRaster mProgramRaster_CULL_BACK;
635 ProgramRaster mProgramRaster_CULL_FRONT;
636 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700637
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700638 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700639 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700640
Jason Sams27676fe2010-11-10 17:00:59 -0800641 /**
642 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800643 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800644 * fields will be filled in and then the run method called by a message
645 * handling thread. This will occur some time after sendToClient completes
646 * in the script.
647 *
648 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800649 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700650 protected int[] mData;
651 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800652 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700653 public void run() {
654 }
655 }
Jason Sams27676fe2010-11-10 17:00:59 -0800656 /**
657 * If an application is expecting messages it should set this field to an
658 * instance of RSMessage. This instance will receive all the user messages
659 * sent from sendToClient by scripts from this context.
660 *
661 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800662 RSMessageHandler mMessageCallback = null;
663
664 public void setMessageHandler(RSMessageHandler msg) {
665 mMessageCallback = msg;
666 }
667 public RSMessageHandler getMessageHandler() {
668 return mMessageCallback;
669 }
Jason Sams516c3192009-10-06 13:58:47 -0700670
Jason Sams27676fe2010-11-10 17:00:59 -0800671 /**
672 * Runtime error base class. An application should derive from this class
673 * if it wishes to install an error handler. When errors occur at runtime
674 * the fields in this class will be filled and the run method called.
675 *
676 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800677 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800678 protected String mErrorMessage;
679 protected int mErrorNum;
680 public void run() {
681 }
682 }
Jason Sams27676fe2010-11-10 17:00:59 -0800683
684 /**
685 * Application Error handler. All runtime errors will be dispatched to the
686 * instance of RSAsyncError set here. If this field is null a
687 * RSRuntimeException will instead be thrown with details about the error.
688 * This will cause program termaination.
689 *
690 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800691 RSErrorHandler mErrorCallback = null;
692
693 public void setErrorHandler(RSErrorHandler msg) {
694 mErrorCallback = msg;
695 }
696 public RSErrorHandler getErrorHandler() {
697 return mErrorCallback;
698 }
Jason Sams1c415172010-11-08 17:06:46 -0800699
Jason Sams27676fe2010-11-10 17:00:59 -0800700 /**
701 * RenderScript worker threads priority enumeration. The default value is
702 * NORMAL. Applications wishing to do background processing such as
703 * wallpapers should set their priority to LOW to avoid starving forground
704 * processes.
705 */
Jason Sams7d787b42009-11-15 12:14:26 -0800706 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700707 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
708 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800709
710 int mID;
711 Priority(int id) {
712 mID = id;
713 }
714 }
715
Jason Sams771bebb2009-12-07 12:40:12 -0800716 void validate() {
717 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700718 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800719 }
720 }
721
Jason Sams27676fe2010-11-10 17:00:59 -0800722
723 /**
724 * Change the priority of the worker threads for this context.
725 *
726 * @param p New priority to be set.
727 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800728 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800729 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800730 nContextSetPriority(p.mID);
731 }
732
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800733 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700734 RenderScript mRS;
735 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800736 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800737
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800738 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
739 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
740 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
741 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
742 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700743
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800744 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800745
Jason Sams516c3192009-10-06 13:58:47 -0700746 MessageThread(RenderScript rs) {
747 super("RSMessageThread");
748 mRS = rs;
749
750 }
751
752 public void run() {
753 // This function is a temporary solution. The final solution will
754 // used typed allocations where the message id is the type indicator.
755 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700756 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700757 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700758 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700759 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800760 int size = mAuxData[1];
761 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800762
763 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
764 if ((size>>2) >= rbuf.length) {
765 rbuf = new int[(size + 3) >> 2];
766 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700767 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
768 RS_MESSAGE_TO_CLIENT_USER) {
769 throw new RSDriverException("Error processing message from Renderscript.");
770 }
Jason Sams1c415172010-11-08 17:06:46 -0800771
772 if(mRS.mMessageCallback != null) {
773 mRS.mMessageCallback.mData = rbuf;
774 mRS.mMessageCallback.mID = subID;
775 mRS.mMessageCallback.mLength = size;
776 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700777 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800778 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700779 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700780 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700781 }
Jason Sams1c415172010-11-08 17:06:46 -0800782
783 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
784 String e = mRS.nContextGetErrorMessage(mRS.mContext);
785
Jason Samsadd9d962010-11-22 16:20:16 -0800786 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
787 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
788 }
789
Jason Sams1c415172010-11-08 17:06:46 -0800790 if(mRS.mErrorCallback != null) {
791 mRS.mErrorCallback.mErrorMessage = e;
792 mRS.mErrorCallback.mErrorNum = subID;
793 mRS.mErrorCallback.run();
794 } else {
795 //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
796 }
797 continue;
798 }
799
800 // 2: teardown.
801 // But we want to avoid starving other threads during
802 // teardown by yielding until the next line in the destructor
803 // can execute to set mRun = false
804 try {
805 sleep(1, 0);
806 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700807 }
Jason Sams516c3192009-10-06 13:58:47 -0700808 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800809 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700810 }
811 }
812
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800813 RenderScript(Context ctx) {
814 mApplicationContext = ctx.getApplicationContext();
815 }
816
817 /**
818 * Gets the application context associated with the RenderScript context.
819 *
820 * @return The application context.
821 */
822 public final Context getApplicationContext() {
823 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700824 }
825
Jason Sams27676fe2010-11-10 17:00:59 -0800826 /**
827 * Create a basic RenderScript context.
828 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800829 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800830 * @return RenderScript
831 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800832 public static RenderScript create(Context ctx) {
833 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800834
835 rs.mDev = rs.nDeviceCreate();
836 rs.mContext = rs.nContextCreate(rs.mDev, 0);
Jason Sams26985362011-05-03 15:01:58 -0700837 if (rs.mContext == 0) {
838 throw new RSDriverException("Failed to create RS context.");
839 }
Jason Sams704ff642010-02-09 16:05:07 -0800840 rs.mMessageThread = new MessageThread(rs);
841 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800842 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800843 }
844
Jason Sams27676fe2010-11-10 17:00:59 -0800845 /**
846 * Print the currently available debugging information about the state of
847 * the RS context to the log.
848 *
Jason Sams27676fe2010-11-10 17:00:59 -0800849 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800850 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800851 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800852 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800853 }
854
Jason Sams27676fe2010-11-10 17:00:59 -0800855 /**
856 * Wait for any commands in the fifo between the java bindings and native to
857 * be processed.
858 *
859 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700860 public void finish() {
861 nContextFinish();
862 }
863
Jason Sams27676fe2010-11-10 17:00:59 -0800864 /**
865 * Destroy this renderscript context. Once this function is called its no
866 * longer legal to use this or any objects created by this context.
867 *
868 */
Jason Samsf5b45962009-08-25 14:49:07 -0700869 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800870 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700871 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700872 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700873 try {
874 mMessageThread.join();
875 } catch(InterruptedException e) {
876 }
Jason Sams516c3192009-10-06 13:58:47 -0700877
Jason Sams2e1872f2010-08-17 16:25:41 -0700878 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700879 mContext = 0;
880
881 nDeviceDestroy(mDev);
882 mDev = 0;
883 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700884
Jason Samsa9e7a052009-09-25 14:51:22 -0700885 boolean isAlive() {
886 return mContext != 0;
887 }
888
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800889 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700890 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800891 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700892 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700893 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700894 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700895}