blob: 9941827cb4c434ef3b13d3d30634d7e2f60a0af4 [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 Samsbf6ef8d72010-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 Samsbf6ef8d72010-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 Sams3eaa338e2009-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 Samsbf6ef8d72010-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 Samsbf6ef8d72010-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 Samsbf6ef8d72010-12-06 15:59:59 -0800578 int mDev;
579 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700580 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d72010-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;
Stephen Hines836c4a52011-06-01 14:38:10 -0700616
617 Element mElement_DOUBLE_2;
618 Element mElement_DOUBLE_3;
619 Element mElement_DOUBLE_4;
620
621 Element mElement_UCHAR_2;
622 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700623 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800624
Stephen Hines836c4a52011-06-01 14:38:10 -0700625 Element mElement_CHAR_2;
626 Element mElement_CHAR_3;
627 Element mElement_CHAR_4;
628
629 Element mElement_USHORT_2;
630 Element mElement_USHORT_3;
631 Element mElement_USHORT_4;
632
633 Element mElement_SHORT_2;
634 Element mElement_SHORT_3;
635 Element mElement_SHORT_4;
636
637 Element mElement_UINT_2;
638 Element mElement_UINT_3;
639 Element mElement_UINT_4;
640
641 Element mElement_INT_2;
642 Element mElement_INT_3;
643 Element mElement_INT_4;
644
645 Element mElement_ULONG_2;
646 Element mElement_ULONG_3;
647 Element mElement_ULONG_4;
648
649 Element mElement_LONG_2;
650 Element mElement_LONG_3;
651 Element mElement_LONG_4;
652
Jason Sams1d45c472010-08-25 14:31:48 -0700653 Element mElement_MATRIX_4X4;
654 Element mElement_MATRIX_3X3;
655 Element mElement_MATRIX_2X2;
656
Jason Sams4d339932010-05-11 14:03:58 -0700657 Sampler mSampler_CLAMP_NEAREST;
658 Sampler mSampler_CLAMP_LINEAR;
659 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
660 Sampler mSampler_WRAP_NEAREST;
661 Sampler mSampler_WRAP_LINEAR;
662 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
663
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700664 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
665 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700666 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
667 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700668
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700669 ProgramRaster mProgramRaster_CULL_BACK;
670 ProgramRaster mProgramRaster_CULL_FRONT;
671 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700672
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700673 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700674 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700675
Jason Sams27676fe2010-11-10 17:00:59 -0800676 /**
677 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800678 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800679 * fields will be filled in and then the run method called by a message
680 * handling thread. This will occur some time after sendToClient completes
681 * in the script.
682 *
683 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800684 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700685 protected int[] mData;
686 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800687 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700688 public void run() {
689 }
690 }
Jason Sams27676fe2010-11-10 17:00:59 -0800691 /**
692 * If an application is expecting messages it should set this field to an
693 * instance of RSMessage. This instance will receive all the user messages
694 * sent from sendToClient by scripts from this context.
695 *
696 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800697 RSMessageHandler mMessageCallback = null;
698
699 public void setMessageHandler(RSMessageHandler msg) {
700 mMessageCallback = msg;
701 }
702 public RSMessageHandler getMessageHandler() {
703 return mMessageCallback;
704 }
Jason Sams516c3192009-10-06 13:58:47 -0700705
Jason Sams27676fe2010-11-10 17:00:59 -0800706 /**
707 * Runtime error base class. An application should derive from this class
708 * if it wishes to install an error handler. When errors occur at runtime
709 * the fields in this class will be filled and the run method called.
710 *
711 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800712 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800713 protected String mErrorMessage;
714 protected int mErrorNum;
715 public void run() {
716 }
717 }
Jason Sams27676fe2010-11-10 17:00:59 -0800718
719 /**
720 * Application Error handler. All runtime errors will be dispatched to the
721 * instance of RSAsyncError set here. If this field is null a
722 * RSRuntimeException will instead be thrown with details about the error.
723 * This will cause program termaination.
724 *
725 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800726 RSErrorHandler mErrorCallback = null;
727
728 public void setErrorHandler(RSErrorHandler msg) {
729 mErrorCallback = msg;
730 }
731 public RSErrorHandler getErrorHandler() {
732 return mErrorCallback;
733 }
Jason Sams1c415172010-11-08 17:06:46 -0800734
Jason Sams27676fe2010-11-10 17:00:59 -0800735 /**
736 * RenderScript worker threads priority enumeration. The default value is
737 * NORMAL. Applications wishing to do background processing such as
738 * wallpapers should set their priority to LOW to avoid starving forground
739 * processes.
740 */
Jason Sams7d787b42009-11-15 12:14:26 -0800741 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700742 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
743 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800744
745 int mID;
746 Priority(int id) {
747 mID = id;
748 }
749 }
750
Jason Sams771bebb2009-12-07 12:40:12 -0800751 void validate() {
752 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700753 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800754 }
755 }
756
Jason Sams27676fe2010-11-10 17:00:59 -0800757
758 /**
759 * Change the priority of the worker threads for this context.
760 *
761 * @param p New priority to be set.
762 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800763 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800764 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800765 nContextSetPriority(p.mID);
766 }
767
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800768 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700769 RenderScript mRS;
770 boolean mRun = true;
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800771 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800772
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800773 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
774 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
775 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
776 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
777 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700778
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800779 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800780
Jason Sams516c3192009-10-06 13:58:47 -0700781 MessageThread(RenderScript rs) {
782 super("RSMessageThread");
783 mRS = rs;
784
785 }
786
787 public void run() {
788 // This function is a temporary solution. The final solution will
789 // used typed allocations where the message id is the type indicator.
790 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700791 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700792 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700793 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700794 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800795 int size = mAuxData[1];
796 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800797
798 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
799 if ((size>>2) >= rbuf.length) {
800 rbuf = new int[(size + 3) >> 2];
801 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700802 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
803 RS_MESSAGE_TO_CLIENT_USER) {
804 throw new RSDriverException("Error processing message from Renderscript.");
805 }
Jason Sams1c415172010-11-08 17:06:46 -0800806
807 if(mRS.mMessageCallback != null) {
808 mRS.mMessageCallback.mData = rbuf;
809 mRS.mMessageCallback.mID = subID;
810 mRS.mMessageCallback.mLength = size;
811 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700812 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800813 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700814 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700815 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700816 }
Jason Sams1c415172010-11-08 17:06:46 -0800817
818 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
819 String e = mRS.nContextGetErrorMessage(mRS.mContext);
820
Jason Samsadd9d962010-11-22 16:20:16 -0800821 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
822 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
823 }
824
Jason Sams1c415172010-11-08 17:06:46 -0800825 if(mRS.mErrorCallback != null) {
826 mRS.mErrorCallback.mErrorMessage = e;
827 mRS.mErrorCallback.mErrorNum = subID;
828 mRS.mErrorCallback.run();
829 } else {
830 //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
831 }
832 continue;
833 }
834
835 // 2: teardown.
836 // But we want to avoid starving other threads during
837 // teardown by yielding until the next line in the destructor
838 // can execute to set mRun = false
839 try {
840 sleep(1, 0);
841 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700842 }
Jason Sams516c3192009-10-06 13:58:47 -0700843 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800844 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700845 }
846 }
847
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800848 RenderScript(Context ctx) {
849 mApplicationContext = ctx.getApplicationContext();
850 }
851
852 /**
853 * Gets the application context associated with the RenderScript context.
854 *
855 * @return The application context.
856 */
857 public final Context getApplicationContext() {
858 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700859 }
860
Jason Sams27676fe2010-11-10 17:00:59 -0800861 /**
862 * Create a basic RenderScript context.
863 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800864 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800865 * @return RenderScript
866 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800867 public static RenderScript create(Context ctx) {
868 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800869
870 rs.mDev = rs.nDeviceCreate();
871 rs.mContext = rs.nContextCreate(rs.mDev, 0);
Jason Sams26985362011-05-03 15:01:58 -0700872 if (rs.mContext == 0) {
873 throw new RSDriverException("Failed to create RS context.");
874 }
Jason Sams704ff642010-02-09 16:05:07 -0800875 rs.mMessageThread = new MessageThread(rs);
876 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800877 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800878 }
879
Jason Sams27676fe2010-11-10 17:00:59 -0800880 /**
881 * Print the currently available debugging information about the state of
882 * the RS context to the log.
883 *
Jason Sams27676fe2010-11-10 17:00:59 -0800884 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800885 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800886 validate();
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800887 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800888 }
889
Jason Sams27676fe2010-11-10 17:00:59 -0800890 /**
891 * Wait for any commands in the fifo between the java bindings and native to
892 * be processed.
893 *
894 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700895 public void finish() {
896 nContextFinish();
897 }
898
Jason Sams27676fe2010-11-10 17:00:59 -0800899 /**
900 * Destroy this renderscript context. Once this function is called its no
901 * longer legal to use this or any objects created by this context.
902 *
903 */
Jason Samsf5b45962009-08-25 14:49:07 -0700904 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800905 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700906 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700907 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700908 try {
909 mMessageThread.join();
910 } catch(InterruptedException e) {
911 }
Jason Sams516c3192009-10-06 13:58:47 -0700912
Jason Sams2e1872f2010-08-17 16:25:41 -0700913 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700914 mContext = 0;
915
916 nDeviceDestroy(mDev);
917 mDev = 0;
918 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700919
Jason Samsa9e7a052009-09-25 14:51:22 -0700920 boolean isAlive() {
921 return mContext != 0;
922 }
923
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800924 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700925 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800926 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700927 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700928 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700929 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700930}