blob: 4856ab696bbb3a1edd7666c72e85ee09e9e6e440 [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jason Sams94d8e90a2009-06-10 16:09:05 -070017package android.renderscript;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070018
Jason Sams43ee06852009-08-12 17:54:11 -070019import java.lang.reflect.Field;
Jason Sams36e612a2009-07-31 16:26:13 -070020
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080021import android.content.Context;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080022import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070023import android.graphics.Bitmap;
Romain Guy650a3eb2009-08-31 14:06:43 -070024import android.graphics.BitmapFactory;
Jason Samsfaa32b32011-06-20 16:58:04 -070025import android.graphics.SurfaceTexture;
Glenn Kasten260c77a2011-06-01 17:25:54 -070026import android.os.Process;
Jason Sams36e612a2009-07-31 16:26:13 -070027import android.util.Log;
28import android.view.Surface;
Jack Palevich43702d82009-05-28 13:38:16 -070029
Jack Palevich60aa3ea2009-05-26 13:45:08 -070030
Jason Samse29d4712009-07-23 15:19:03 -070031/**
Jason Sams27676fe2010-11-10 17:00:59 -080032 * RenderScript base master class. An instance of this class creates native
33 * worker threads for processing commands from this object. This base class
34 * does not provide any extended capabilities beyond simple data processing.
35 * For extended capabilities use derived classes such as RenderScriptGL.
36 *
37 *
38 *
Jason Samse29d4712009-07-23 15:19:03 -070039 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070040public class RenderScript {
Jason Sams3bc47d42009-11-12 15:10:25 -080041 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d72010-12-06 15:59:59 -080042 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070043 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070044 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070045
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080046 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070047
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080048 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070049 * We use a class initializer to allow the native code to cache some
50 * field offsets.
51 */
Romain Guy650a3eb2009-08-31 14:06:43 -070052 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d72010-12-06 15:59:59 -080053 static boolean sInitialized;
54 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070055
Jason Samsdba3ba52009-07-30 14:56:12 -070056
Jack Palevich60aa3ea2009-05-26 13:45:08 -070057 static {
58 sInitialized = false;
59 try {
Jason Samse29d4712009-07-23 15:19:03 -070060 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070061 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070062 sInitialized = true;
63 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080064 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
65 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070066 }
67 }
68
Jason Sams2e1872f2010-08-17 16:25:41 -070069 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070070 native int nDeviceCreate();
71 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070072 native void nDeviceSetConfig(int dev, int param, int value);
Jason Samsedbfabd2011-05-17 15:01:29 -070073 native int nContextGetUserMessage(int con, int[] data);
Jason Sams1c415172010-11-08 17:06:46 -080074 native String nContextGetErrorMessage(int con);
Jason Samsedbfabd2011-05-17 15:01:29 -070075 native int nContextPeekMessage(int con, int[] subID);
Jason Sams2e1872f2010-08-17 16:25:41 -070076 native void nContextInitToClient(int con);
77 native void nContextDeinitToClient(int con);
Jason Sams3eaa338e2009-06-10 15:04:38 -070078
Jason Sams718cd1f2009-12-23 14:35:29 -080079
Jason Sams2e1872f2010-08-17 16:25:41 -070080 // Methods below are wrapped to protect the non-threadsafe
81 // lockless fifo.
Jason Sams11c8af92010-10-13 15:31:10 -070082 native int rsnContextCreateGL(int dev, int ver,
83 int colorMin, int colorPref,
84 int alphaMin, int alphaPref,
85 int depthMin, int depthPref,
86 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070087 int samplesMin, int samplesPref, float samplesQ, int dpi);
Jason Sams11c8af92010-10-13 15:31:10 -070088 synchronized int nContextCreateGL(int dev, int ver,
89 int colorMin, int colorPref,
90 int alphaMin, int alphaPref,
91 int depthMin, int depthPref,
92 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070093 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Jason Sams11c8af92010-10-13 15:31:10 -070094 return rsnContextCreateGL(dev, ver, colorMin, colorPref,
95 alphaMin, alphaPref, depthMin, depthPref,
96 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070097 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -070098 }
99 native int rsnContextCreate(int dev, int ver);
100 synchronized int nContextCreate(int dev, int ver) {
101 return rsnContextCreate(dev, ver);
102 }
103 native void rsnContextDestroy(int con);
104 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800105 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700106 rsnContextDestroy(mContext);
107 }
108 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
109 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800110 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700111 rsnContextSetSurface(mContext, w, h, sur);
112 }
Jason Samsfaa32b32011-06-20 16:58:04 -0700113 native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
114 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
115 validate();
116 rsnContextSetSurfaceTexture(mContext, w, h, sur);
117 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700118 native void rsnContextSetPriority(int con, int p);
119 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800120 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700121 rsnContextSetPriority(mContext, p);
122 }
123 native void rsnContextDump(int con, int bits);
124 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800125 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700126 rsnContextDump(mContext, bits);
127 }
128 native void rsnContextFinish(int con);
129 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800130 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700131 rsnContextFinish(mContext);
132 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700133
Jason Sams2e1872f2010-08-17 16:25:41 -0700134 native void rsnContextBindRootScript(int con, int script);
135 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800136 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700137 rsnContextBindRootScript(mContext, script);
138 }
139 native void rsnContextBindSampler(int con, int sampler, int slot);
140 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800141 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700142 rsnContextBindSampler(mContext, sampler, slot);
143 }
144 native void rsnContextBindProgramStore(int con, int pfs);
145 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800146 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700147 rsnContextBindProgramStore(mContext, pfs);
148 }
149 native void rsnContextBindProgramFragment(int con, int pf);
150 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800151 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700152 rsnContextBindProgramFragment(mContext, pf);
153 }
154 native void rsnContextBindProgramVertex(int con, int pv);
155 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800156 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700157 rsnContextBindProgramVertex(mContext, pv);
158 }
159 native void rsnContextBindProgramRaster(int con, int pr);
160 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800161 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700162 rsnContextBindProgramRaster(mContext, pr);
163 }
164 native void rsnContextPause(int con);
165 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800166 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700167 rsnContextPause(mContext);
168 }
169 native void rsnContextResume(int con);
170 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800171 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700172 rsnContextResume(mContext);
173 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700174
Jason Sams2e1872f2010-08-17 16:25:41 -0700175 native void rsnAssignName(int con, int obj, byte[] name);
176 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800177 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700178 rsnAssignName(mContext, obj, name);
179 }
180 native String rsnGetName(int con, int obj);
181 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800182 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700183 return rsnGetName(mContext, obj);
184 }
185 native void rsnObjDestroy(int con, int id);
186 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800187 // There is a race condition here. The calling code may be run
188 // by the gc while teardown is occuring. This protects againts
189 // deleting dead objects.
190 if (mContext != 0) {
191 rsnObjDestroy(mContext, id);
192 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700193 }
Jason Samsfe08d992009-05-27 14:45:32 -0700194
Jason Sams2e1872f2010-08-17 16:25:41 -0700195 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
196 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800197 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700198 return rsnElementCreate(mContext, type, kind, norm, vecSize);
199 }
Jason Sams70d4e502010-09-02 17:35:23 -0700200 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
201 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800202 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700203 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700204 }
205 native void rsnElementGetNativeData(int con, int id, int[] elementData);
206 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800207 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700208 rsnElementGetNativeData(mContext, id, elementData);
209 }
210 native void rsnElementGetSubElements(int con, int id, int[] IDs, String[] names);
211 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800212 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700213 rsnElementGetSubElements(mContext, id, IDs, names);
214 }
Jason Sams768bc022009-09-21 19:41:04 -0700215
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800216 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
217 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800218 validate();
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800219 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
Jason Sams2e1872f2010-08-17 16:25:41 -0700220 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700221 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
222 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800223 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700224 rsnTypeGetNativeData(mContext, id, typeData);
225 }
Jason Sams768bc022009-09-21 19:41:04 -0700226
Jason Samsd4b23b52010-12-13 15:32:35 -0800227 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage);
228 synchronized int nAllocationCreateTyped(int type, int mip, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800229 validate();
Jason Samsd4b23b52010-12-13 15:32:35 -0800230 return rsnAllocationCreateTyped(mContext, type, mip, usage);
Jason Sams2e1872f2010-08-17 16:25:41 -0700231 }
Jason Sams5476b452010-12-08 16:14:36 -0800232 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
233 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800234 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800235 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700236 }
Jason Sams5476b452010-12-08 16:14:36 -0800237 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
238 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800239 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800240 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800241 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700242 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
243 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800244 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700245 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
246 }
Jason Sams5476b452010-12-08 16:14:36 -0800247 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
248 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800249 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800250 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
251 }
252
Jason Sams4ef66502010-12-10 16:03:15 -0800253 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
254 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800255 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800256 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
257 }
258
259
Jason Sams5476b452010-12-08 16:14:36 -0800260 native void rsnAllocationSyncAll(int con, int alloc, int src);
261 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800262 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800263 rsnAllocationSyncAll(mContext, alloc, src);
264 }
Jason Samsf7086092011-01-12 13:28:37 -0800265 native void rsnAllocationGenerateMipmaps(int con, int alloc);
266 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800267 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800268 rsnAllocationGenerateMipmaps(mContext, alloc);
269 }
Jason Sams4ef66502010-12-10 16:03:15 -0800270 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
271 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800272 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800273 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700274 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700275
Jason Sams49a05d72010-12-29 14:31:29 -0800276
277 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
278 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800279 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800280 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700281 }
Jason Sams49a05d72010-12-29 14:31:29 -0800282 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
283 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800284 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800285 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
286 }
287 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
288 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800289 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800290 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
291 }
292 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
293 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800294 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800295 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700296 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700297
Jason Sams49a05d72010-12-29 14:31:29 -0800298 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
299 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800300 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800301 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700302 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700303
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700304 native void rsnAllocationData2D(int con,
305 int dstAlloc, int dstXoff, int dstYoff,
306 int dstMip, int dstFace,
307 int width, int height,
308 int srcAlloc, int srcXoff, int srcYoff,
309 int srcMip, int srcFace);
310 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
311 int dstMip, int dstFace,
312 int width, int height,
313 int srcAlloc, int srcXoff, int srcYoff,
314 int srcMip, int srcFace) {
315 validate();
316 rsnAllocationData2D(mContext,
317 dstAlloc, dstXoff, dstYoff,
318 dstMip, dstFace,
319 width, height,
320 srcAlloc, srcXoff, srcYoff,
321 srcMip, srcFace);
322 }
323
Jason Samsfa445b92011-01-07 17:00:07 -0800324 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
325 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 -0800326 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800327 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
328 }
329 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
330 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 -0800331 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800332 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
333 }
Jason Sams49a05d72010-12-29 14:31:29 -0800334 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
335 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 -0800336 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800337 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700338 }
Jason Sams49a05d72010-12-29 14:31:29 -0800339 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
340 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 -0800341 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800342 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700343 }
Jason Samsfa445b92011-01-07 17:00:07 -0800344 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
345 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800346 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800347 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
348 }
Jason Sams49a05d72010-12-29 14:31:29 -0800349
Jason Samsfa445b92011-01-07 17:00:07 -0800350 native void rsnAllocationRead(int con, int id, byte[] d);
351 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800352 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800353 rsnAllocationRead(mContext, id, d);
354 }
355 native void rsnAllocationRead(int con, int id, short[] d);
356 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800357 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800358 rsnAllocationRead(mContext, id, d);
359 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700360 native void rsnAllocationRead(int con, int id, int[] d);
361 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800362 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700363 rsnAllocationRead(mContext, id, d);
364 }
365 native void rsnAllocationRead(int con, int id, float[] d);
366 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800367 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700368 rsnAllocationRead(mContext, id, d);
369 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700370 native int rsnAllocationGetType(int con, int id);
371 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800372 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700373 return rsnAllocationGetType(mContext, id);
374 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700375
Jason Sams5edc6082010-10-05 13:32:49 -0700376 native void rsnAllocationResize1D(int con, int id, int dimX);
377 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800378 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700379 rsnAllocationResize1D(mContext, id, dimX);
380 }
381 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
382 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800383 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700384 rsnAllocationResize2D(mContext, id, dimX, dimY);
385 }
386
Jason Sams2e1872f2010-08-17 16:25:41 -0700387 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
388 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800389 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700390 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
391 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800392 native int rsnFileA3DCreateFromFile(int con, String path);
393 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800394 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800395 return rsnFileA3DCreateFromFile(mContext, path);
396 }
397 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
398 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800399 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800400 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
401 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700402 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
403 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800404 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700405 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
406 }
407 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
408 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800409 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700410 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
411 }
412 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
413 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800414 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700415 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
416 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700417
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800418 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
419 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800420 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700421 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
422 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800423 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
424 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800425 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800426 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
427 }
428 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
429 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800430 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800431 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
432 }
Jason Sams22534172009-08-04 16:58:20 -0700433
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700434
Jason Sams2e1872f2010-08-17 16:25:41 -0700435 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
436 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800437 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700438 rsnScriptBindAllocation(mContext, script, alloc, slot);
439 }
440 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
441 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800442 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700443 rsnScriptSetTimeZone(mContext, script, timeZone);
444 }
445 native void rsnScriptInvoke(int con, int id, int slot);
446 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800447 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700448 rsnScriptInvoke(mContext, id, slot);
449 }
Jason Sams6e494d32011-04-27 16:33:11 -0700450 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
451 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
452 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
453 validate();
454 if (params == null) {
455 rsnScriptForEach(mContext, id, slot, ain, aout);
456 } else {
457 rsnScriptForEach(mContext, id, slot, ain, aout, params);
458 }
459 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700460 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
461 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800462 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700463 rsnScriptInvokeV(mContext, id, slot, params);
464 }
465 native void rsnScriptSetVarI(int con, int id, int slot, int val);
466 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800467 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700468 rsnScriptSetVarI(mContext, id, slot, val);
469 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700470 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
471 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800472 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700473 rsnScriptSetVarJ(mContext, id, slot, val);
474 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700475 native void rsnScriptSetVarF(int con, int id, int slot, float val);
476 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800477 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700478 rsnScriptSetVarF(mContext, id, slot, val);
479 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700480 native void rsnScriptSetVarD(int con, int id, int slot, double val);
481 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800482 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700483 rsnScriptSetVarD(mContext, id, slot, val);
484 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700485 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
486 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800487 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700488 rsnScriptSetVarV(mContext, id, slot, val);
489 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800490 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
491 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800492 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800493 rsnScriptSetVarObj(mContext, id, slot, val);
494 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700495
Jason Samse4a06c52011-03-16 16:29:28 -0700496 native int rsnScriptCCreate(int con, String resName, String cacheDir,
497 byte[] script, int length);
498 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800499 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700500 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700501 }
Jason Samsebfb4362009-09-23 13:57:02 -0700502
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700503 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
504 int wrapS, int wrapT, int wrapR, float aniso);
505 synchronized int nSamplerCreate(int magFilter, int minFilter,
506 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800507 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700508 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700509 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800510
Jason Sams331bf9b2011-04-06 11:23:54 -0700511 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
512 boolean depthMask, boolean dither,
513 int srcMode, int dstMode, int depthFunc);
514 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
515 boolean depthMask, boolean dither,
516 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800517 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700518 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
519 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700520 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700521
Jason Sams331bf9b2011-04-06 11:23:54 -0700522 native int rsnProgramRasterCreate(int con, boolean pointSmooth, boolean lineSmooth,
523 boolean pointSprite, float lineWidth, int cullMode);
524 synchronized int nProgramRasterCreate(boolean pointSmooth, boolean lineSmooth,
525 boolean pointSprite, float lineWidth, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800526 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700527 return rsnProgramRasterCreate(mContext, pointSmooth, lineSmooth, pointSprite, lineWidth,
528 cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700529 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700530
Jason Sams2e1872f2010-08-17 16:25:41 -0700531 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
532 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800533 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700534 rsnProgramBindConstants(mContext, pv, slot, mID);
535 }
536 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
537 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800538 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700539 rsnProgramBindTexture(mContext, vpf, slot, a);
540 }
541 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
542 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800543 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700544 rsnProgramBindSampler(mContext, vpf, slot, s);
545 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700546 native int rsnProgramFragmentCreate(int con, String shader, int[] params);
547 synchronized int nProgramFragmentCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800548 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700549 return rsnProgramFragmentCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700550 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700551 native int rsnProgramVertexCreate(int con, String shader, int[] params);
552 synchronized int nProgramVertexCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800553 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700554 return rsnProgramVertexCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700555 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700556
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700557 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
558 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800559 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700560 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800561 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700562 native int rsnMeshGetVertexBufferCount(int con, int id);
563 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800564 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700565 return rsnMeshGetVertexBufferCount(mContext, id);
566 }
567 native int rsnMeshGetIndexCount(int con, int id);
568 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800569 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700570 return rsnMeshGetIndexCount(mContext, id);
571 }
572 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
573 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800574 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700575 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
576 }
577 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
578 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800579 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700580 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
581 }
582
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700583
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800584 int mDev;
585 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700586 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800587 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700588
Jason Sams8cb39de2010-06-01 15:47:01 -0700589 Element mElement_U8;
590 Element mElement_I8;
591 Element mElement_U16;
592 Element mElement_I16;
593 Element mElement_U32;
594 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700595 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700596 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700597 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700598 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700599 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700600
Jason Sams8cb39de2010-06-01 15:47:01 -0700601 Element mElement_ELEMENT;
602 Element mElement_TYPE;
603 Element mElement_ALLOCATION;
604 Element mElement_SAMPLER;
605 Element mElement_SCRIPT;
606 Element mElement_MESH;
607 Element mElement_PROGRAM_FRAGMENT;
608 Element mElement_PROGRAM_VERTEX;
609 Element mElement_PROGRAM_RASTER;
610 Element mElement_PROGRAM_STORE;
Jason Samsa70f4162010-03-26 15:33:42 -0700611
Jason Sams3c0dfba2009-09-27 17:50:38 -0700612 Element mElement_A_8;
613 Element mElement_RGB_565;
614 Element mElement_RGB_888;
615 Element mElement_RGBA_5551;
616 Element mElement_RGBA_4444;
617 Element mElement_RGBA_8888;
618
Jason Sams8cb39de2010-06-01 15:47:01 -0700619 Element mElement_FLOAT_2;
620 Element mElement_FLOAT_3;
621 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700622
623 Element mElement_DOUBLE_2;
624 Element mElement_DOUBLE_3;
625 Element mElement_DOUBLE_4;
626
627 Element mElement_UCHAR_2;
628 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700629 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800630
Stephen Hines836c4a52011-06-01 14:38:10 -0700631 Element mElement_CHAR_2;
632 Element mElement_CHAR_3;
633 Element mElement_CHAR_4;
634
635 Element mElement_USHORT_2;
636 Element mElement_USHORT_3;
637 Element mElement_USHORT_4;
638
639 Element mElement_SHORT_2;
640 Element mElement_SHORT_3;
641 Element mElement_SHORT_4;
642
643 Element mElement_UINT_2;
644 Element mElement_UINT_3;
645 Element mElement_UINT_4;
646
647 Element mElement_INT_2;
648 Element mElement_INT_3;
649 Element mElement_INT_4;
650
651 Element mElement_ULONG_2;
652 Element mElement_ULONG_3;
653 Element mElement_ULONG_4;
654
655 Element mElement_LONG_2;
656 Element mElement_LONG_3;
657 Element mElement_LONG_4;
658
Jason Sams1d45c472010-08-25 14:31:48 -0700659 Element mElement_MATRIX_4X4;
660 Element mElement_MATRIX_3X3;
661 Element mElement_MATRIX_2X2;
662
Jason Sams4d339932010-05-11 14:03:58 -0700663 Sampler mSampler_CLAMP_NEAREST;
664 Sampler mSampler_CLAMP_LINEAR;
665 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
666 Sampler mSampler_WRAP_NEAREST;
667 Sampler mSampler_WRAP_LINEAR;
668 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
669
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700670 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
671 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700672 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
673 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700674
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700675 ProgramRaster mProgramRaster_CULL_BACK;
676 ProgramRaster mProgramRaster_CULL_FRONT;
677 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700678
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700679 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700680 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700681
Jason Sams27676fe2010-11-10 17:00:59 -0800682 /**
683 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800684 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800685 * fields will be filled in and then the run method called by a message
686 * handling thread. This will occur some time after sendToClient completes
687 * in the script.
688 *
689 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800690 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700691 protected int[] mData;
692 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800693 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700694 public void run() {
695 }
696 }
Jason Sams27676fe2010-11-10 17:00:59 -0800697 /**
698 * If an application is expecting messages it should set this field to an
699 * instance of RSMessage. This instance will receive all the user messages
700 * sent from sendToClient by scripts from this context.
701 *
702 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800703 RSMessageHandler mMessageCallback = null;
704
705 public void setMessageHandler(RSMessageHandler msg) {
706 mMessageCallback = msg;
707 }
708 public RSMessageHandler getMessageHandler() {
709 return mMessageCallback;
710 }
Jason Sams516c3192009-10-06 13:58:47 -0700711
Jason Sams27676fe2010-11-10 17:00:59 -0800712 /**
713 * Runtime error base class. An application should derive from this class
714 * if it wishes to install an error handler. When errors occur at runtime
715 * the fields in this class will be filled and the run method called.
716 *
717 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800718 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800719 protected String mErrorMessage;
720 protected int mErrorNum;
721 public void run() {
722 }
723 }
Jason Sams27676fe2010-11-10 17:00:59 -0800724
725 /**
726 * Application Error handler. All runtime errors will be dispatched to the
727 * instance of RSAsyncError set here. If this field is null a
728 * RSRuntimeException will instead be thrown with details about the error.
729 * This will cause program termaination.
730 *
731 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800732 RSErrorHandler mErrorCallback = null;
733
734 public void setErrorHandler(RSErrorHandler msg) {
735 mErrorCallback = msg;
736 }
737 public RSErrorHandler getErrorHandler() {
738 return mErrorCallback;
739 }
Jason Sams1c415172010-11-08 17:06:46 -0800740
Jason Sams27676fe2010-11-10 17:00:59 -0800741 /**
742 * RenderScript worker threads priority enumeration. The default value is
743 * NORMAL. Applications wishing to do background processing such as
744 * wallpapers should set their priority to LOW to avoid starving forground
745 * processes.
746 */
Jason Sams7d787b42009-11-15 12:14:26 -0800747 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700748 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
749 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800750
751 int mID;
752 Priority(int id) {
753 mID = id;
754 }
755 }
756
Jason Sams771bebb2009-12-07 12:40:12 -0800757 void validate() {
758 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700759 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800760 }
761 }
762
Jason Sams27676fe2010-11-10 17:00:59 -0800763
764 /**
765 * Change the priority of the worker threads for this context.
766 *
767 * @param p New priority to be set.
768 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800769 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800770 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800771 nContextSetPriority(p.mID);
772 }
773
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800774 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700775 RenderScript mRS;
776 boolean mRun = true;
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800777 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800778
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800779 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
780 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
781 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
782 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
783 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700784
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800785 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800786
Jason Sams516c3192009-10-06 13:58:47 -0700787 MessageThread(RenderScript rs) {
788 super("RSMessageThread");
789 mRS = rs;
790
791 }
792
793 public void run() {
794 // This function is a temporary solution. The final solution will
795 // used typed allocations where the message id is the type indicator.
796 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700797 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700798 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700799 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700800 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800801 int size = mAuxData[1];
802 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800803
804 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
805 if ((size>>2) >= rbuf.length) {
806 rbuf = new int[(size + 3) >> 2];
807 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700808 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
809 RS_MESSAGE_TO_CLIENT_USER) {
810 throw new RSDriverException("Error processing message from Renderscript.");
811 }
Jason Sams1c415172010-11-08 17:06:46 -0800812
813 if(mRS.mMessageCallback != null) {
814 mRS.mMessageCallback.mData = rbuf;
815 mRS.mMessageCallback.mID = subID;
816 mRS.mMessageCallback.mLength = size;
817 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700818 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800819 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700820 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700821 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700822 }
Jason Sams1c415172010-11-08 17:06:46 -0800823
824 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
825 String e = mRS.nContextGetErrorMessage(mRS.mContext);
826
Jason Samsadd9d962010-11-22 16:20:16 -0800827 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
828 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
829 }
830
Jason Sams1c415172010-11-08 17:06:46 -0800831 if(mRS.mErrorCallback != null) {
832 mRS.mErrorCallback.mErrorMessage = e;
833 mRS.mErrorCallback.mErrorNum = subID;
834 mRS.mErrorCallback.run();
835 } else {
836 //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
837 }
838 continue;
839 }
840
841 // 2: teardown.
842 // But we want to avoid starving other threads during
843 // teardown by yielding until the next line in the destructor
844 // can execute to set mRun = false
845 try {
846 sleep(1, 0);
847 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700848 }
Jason Sams516c3192009-10-06 13:58:47 -0700849 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800850 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700851 }
852 }
853
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800854 RenderScript(Context ctx) {
855 mApplicationContext = ctx.getApplicationContext();
856 }
857
858 /**
859 * Gets the application context associated with the RenderScript context.
860 *
861 * @return The application context.
862 */
863 public final Context getApplicationContext() {
864 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700865 }
866
Jason Sams27676fe2010-11-10 17:00:59 -0800867 /**
868 * Create a basic RenderScript context.
869 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800870 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800871 * @return RenderScript
872 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800873 public static RenderScript create(Context ctx) {
874 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800875
876 rs.mDev = rs.nDeviceCreate();
877 rs.mContext = rs.nContextCreate(rs.mDev, 0);
Jason Sams26985362011-05-03 15:01:58 -0700878 if (rs.mContext == 0) {
879 throw new RSDriverException("Failed to create RS context.");
880 }
Jason Sams704ff642010-02-09 16:05:07 -0800881 rs.mMessageThread = new MessageThread(rs);
882 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800883 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800884 }
885
Jason Sams27676fe2010-11-10 17:00:59 -0800886 /**
887 * Print the currently available debugging information about the state of
888 * the RS context to the log.
889 *
Jason Sams27676fe2010-11-10 17:00:59 -0800890 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800891 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800892 validate();
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800893 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800894 }
895
Jason Sams27676fe2010-11-10 17:00:59 -0800896 /**
897 * Wait for any commands in the fifo between the java bindings and native to
898 * be processed.
899 *
900 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700901 public void finish() {
902 nContextFinish();
903 }
904
Jason Sams27676fe2010-11-10 17:00:59 -0800905 /**
906 * Destroy this renderscript context. Once this function is called its no
907 * longer legal to use this or any objects created by this context.
908 *
909 */
Jason Samsf5b45962009-08-25 14:49:07 -0700910 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800911 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700912 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700913 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700914 try {
915 mMessageThread.join();
916 } catch(InterruptedException e) {
917 }
Jason Sams516c3192009-10-06 13:58:47 -0700918
Jason Sams2e1872f2010-08-17 16:25:41 -0700919 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700920 mContext = 0;
921
922 nDeviceDestroy(mDev);
923 mDev = 0;
924 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700925
Jason Samsa9e7a052009-09-25 14:51:22 -0700926 boolean isAlive() {
927 return mContext != 0;
928 }
929
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800930 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700931 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800932 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700933 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700934 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700935 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700936}