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