blob: 130563386174f8d3ff50064fd6fd4a71a2f15d95 [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;
Stephen Hines4382467a2011-08-01 15:02:34 -070022import android.content.pm.ApplicationInfo;
23import android.content.pm.PackageManager;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080024import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070025import android.graphics.Bitmap;
Romain Guy650a3eb2009-08-31 14:06:43 -070026import android.graphics.BitmapFactory;
Jason Samsfaa32b32011-06-20 16:58:04 -070027import android.graphics.SurfaceTexture;
Glenn Kasten260c77a2011-06-01 17:25:54 -070028import android.os.Process;
Jason Sams36e612a2009-07-31 16:26:13 -070029import android.util.Log;
30import android.view.Surface;
Jack Palevich43702d82009-05-28 13:38:16 -070031
Jack Palevich60aa3ea2009-05-26 13:45:08 -070032
Stephen Hines4382467a2011-08-01 15:02:34 -070033
Jason Samse29d4712009-07-23 15:19:03 -070034/**
Jason Sams27676fe2010-11-10 17:00:59 -080035 * RenderScript base master class. An instance of this class creates native
36 * worker threads for processing commands from this object. This base class
37 * does not provide any extended capabilities beyond simple data processing.
38 * For extended capabilities use derived classes such as RenderScriptGL.
39 *
40 *
41 *
Jason Samse29d4712009-07-23 15:19:03 -070042 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070043public class RenderScript {
Jason Sams3bc47d42009-11-12 15:10:25 -080044 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d2010-12-06 15:59:59 -080045 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070046 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070047 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070048
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080049 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070050
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080051 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070052 * We use a class initializer to allow the native code to cache some
53 * field offsets.
54 */
Romain Guy650a3eb2009-08-31 14:06:43 -070055 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080056 static boolean sInitialized;
57 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070058
Jason Samsdba3ba52009-07-30 14:56:12 -070059
Jack Palevich60aa3ea2009-05-26 13:45:08 -070060 static {
61 sInitialized = false;
62 try {
Jason Samse29d4712009-07-23 15:19:03 -070063 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070064 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070065 sInitialized = true;
66 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080067 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
68 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070069 }
70 }
71
Jason Sams2e1872f2010-08-17 16:25:41 -070072 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070073 native int nDeviceCreate();
74 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070075 native void nDeviceSetConfig(int dev, int param, int value);
Jason Samsedbfabd2011-05-17 15:01:29 -070076 native int nContextGetUserMessage(int con, int[] data);
Jason Sams1c415172010-11-08 17:06:46 -080077 native String nContextGetErrorMessage(int con);
Jason Samsedbfabd2011-05-17 15:01:29 -070078 native int nContextPeekMessage(int con, int[] subID);
Jason Sams2e1872f2010-08-17 16:25:41 -070079 native void nContextInitToClient(int con);
80 native void nContextDeinitToClient(int con);
Jason Sams3eaa3382009-06-10 15:04:38 -070081
Jason Sams718cd1f2009-12-23 14:35:29 -080082
Jason Sams2e1872f2010-08-17 16:25:41 -070083 // Methods below are wrapped to protect the non-threadsafe
84 // lockless fifo.
Stephen Hines4382467a2011-08-01 15:02:34 -070085 native int rsnContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -070086 int colorMin, int colorPref,
87 int alphaMin, int alphaPref,
88 int depthMin, int depthPref,
89 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070090 int samplesMin, int samplesPref, float samplesQ, int dpi);
Stephen Hines4382467a2011-08-01 15:02:34 -070091 synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -070092 int colorMin, int colorPref,
93 int alphaMin, int alphaPref,
94 int depthMin, int depthPref,
95 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070096 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -070097 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -070098 alphaMin, alphaPref, depthMin, depthPref,
99 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700100 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700101 }
Stephen Hines4382467a2011-08-01 15:02:34 -0700102 native int rsnContextCreate(int dev, int ver, int sdkVer);
103 synchronized int nContextCreate(int dev, int ver, int sdkVer) {
104 return rsnContextCreate(dev, ver, sdkVer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700105 }
106 native void rsnContextDestroy(int con);
107 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800108 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700109 rsnContextDestroy(mContext);
110 }
111 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
112 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800113 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700114 rsnContextSetSurface(mContext, w, h, sur);
115 }
Jason Samsfaa32b32011-06-20 16:58:04 -0700116 native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
117 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
118 validate();
119 rsnContextSetSurfaceTexture(mContext, w, h, sur);
120 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700121 native void rsnContextSetPriority(int con, int p);
122 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800123 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700124 rsnContextSetPriority(mContext, p);
125 }
126 native void rsnContextDump(int con, int bits);
127 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800128 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700129 rsnContextDump(mContext, bits);
130 }
131 native void rsnContextFinish(int con);
132 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800133 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700134 rsnContextFinish(mContext);
135 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700136
Jason Sams2e1872f2010-08-17 16:25:41 -0700137 native void rsnContextBindRootScript(int con, int script);
138 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800139 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700140 rsnContextBindRootScript(mContext, script);
141 }
142 native void rsnContextBindSampler(int con, int sampler, int slot);
143 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800144 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700145 rsnContextBindSampler(mContext, sampler, slot);
146 }
147 native void rsnContextBindProgramStore(int con, int pfs);
148 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800149 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700150 rsnContextBindProgramStore(mContext, pfs);
151 }
152 native void rsnContextBindProgramFragment(int con, int pf);
153 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800154 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700155 rsnContextBindProgramFragment(mContext, pf);
156 }
157 native void rsnContextBindProgramVertex(int con, int pv);
158 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800159 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700160 rsnContextBindProgramVertex(mContext, pv);
161 }
162 native void rsnContextBindProgramRaster(int con, int pr);
163 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800164 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700165 rsnContextBindProgramRaster(mContext, pr);
166 }
167 native void rsnContextPause(int con);
168 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800169 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700170 rsnContextPause(mContext);
171 }
172 native void rsnContextResume(int con);
173 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800174 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700175 rsnContextResume(mContext);
176 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700177
Jason Sams2e1872f2010-08-17 16:25:41 -0700178 native void rsnAssignName(int con, int obj, byte[] name);
179 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800180 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700181 rsnAssignName(mContext, obj, name);
182 }
183 native String rsnGetName(int con, int obj);
184 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800185 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700186 return rsnGetName(mContext, obj);
187 }
188 native void rsnObjDestroy(int con, int id);
189 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800190 // There is a race condition here. The calling code may be run
191 // by the gc while teardown is occuring. This protects againts
192 // deleting dead objects.
193 if (mContext != 0) {
194 rsnObjDestroy(mContext, id);
195 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700196 }
Jason Samsfe08d992009-05-27 14:45:32 -0700197
Jason Sams2e1872f2010-08-17 16:25:41 -0700198 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
199 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800200 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700201 return rsnElementCreate(mContext, type, kind, norm, vecSize);
202 }
Jason Sams70d4e502010-09-02 17:35:23 -0700203 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
204 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800205 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700206 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700207 }
208 native void rsnElementGetNativeData(int con, int id, int[] elementData);
209 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800210 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700211 rsnElementGetNativeData(mContext, id, elementData);
212 }
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700213 native void rsnElementGetSubElements(int con, int id,
214 int[] IDs, String[] names, int[] arraySizes);
215 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800216 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700217 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700218 }
Jason Sams768bc022009-09-21 19:41:04 -0700219
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800220 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
221 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800222 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800223 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
Jason Sams2e1872f2010-08-17 16:25:41 -0700224 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700225 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
226 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800227 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700228 rsnTypeGetNativeData(mContext, id, typeData);
229 }
Jason Sams768bc022009-09-21 19:41:04 -0700230
Jason Samsd4b23b52010-12-13 15:32:35 -0800231 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage);
232 synchronized int nAllocationCreateTyped(int type, int mip, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800233 validate();
Jason Samsd4b23b52010-12-13 15:32:35 -0800234 return rsnAllocationCreateTyped(mContext, type, mip, usage);
Jason Sams2e1872f2010-08-17 16:25:41 -0700235 }
Jason Sams5476b452010-12-08 16:14:36 -0800236 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
237 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800238 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800239 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700240 }
Jason Sams5476b452010-12-08 16:14:36 -0800241 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
242 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800243 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800244 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800245 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700246 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
247 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800248 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700249 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
250 }
Jason Sams5476b452010-12-08 16:14:36 -0800251 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
252 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800253 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800254 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
255 }
256
Jason Sams4ef66502010-12-10 16:03:15 -0800257 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
258 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800259 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800260 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
261 }
262
263
Jason Sams5476b452010-12-08 16:14:36 -0800264 native void rsnAllocationSyncAll(int con, int alloc, int src);
265 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800266 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800267 rsnAllocationSyncAll(mContext, alloc, src);
268 }
Jason Samsf7086092011-01-12 13:28:37 -0800269 native void rsnAllocationGenerateMipmaps(int con, int alloc);
270 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800271 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800272 rsnAllocationGenerateMipmaps(mContext, alloc);
273 }
Jason Sams4ef66502010-12-10 16:03:15 -0800274 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
275 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800276 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800277 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700278 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700279
Jason Sams49a05d72010-12-29 14:31:29 -0800280
281 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
282 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] 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);
Jason Sams2e1872f2010-08-17 16:25:41 -0700285 }
Jason Sams49a05d72010-12-29 14:31:29 -0800286 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
287 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] 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);
290 }
291 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
292 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800293 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800294 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
295 }
296 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
297 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800298 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800299 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700300 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700301
Jason Sams49a05d72010-12-29 14:31:29 -0800302 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
303 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800304 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800305 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700306 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700307
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700308 native void rsnAllocationData2D(int con,
309 int dstAlloc, int dstXoff, int dstYoff,
310 int dstMip, int dstFace,
311 int width, int height,
312 int srcAlloc, int srcXoff, int srcYoff,
313 int srcMip, int srcFace);
314 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
315 int dstMip, int dstFace,
316 int width, int height,
317 int srcAlloc, int srcXoff, int srcYoff,
318 int srcMip, int srcFace) {
319 validate();
320 rsnAllocationData2D(mContext,
321 dstAlloc, dstXoff, dstYoff,
322 dstMip, dstFace,
323 width, height,
324 srcAlloc, srcXoff, srcYoff,
325 srcMip, srcFace);
326 }
327
Jason Samsfa445b92011-01-07 17:00:07 -0800328 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
329 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 -0800330 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800331 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
332 }
333 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
334 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 -0800335 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800336 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
337 }
Jason Sams49a05d72010-12-29 14:31:29 -0800338 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
339 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 -0800340 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800341 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700342 }
Jason Sams49a05d72010-12-29 14:31:29 -0800343 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
344 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 -0800345 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800346 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700347 }
Jason Samsfa445b92011-01-07 17:00:07 -0800348 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
349 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800350 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800351 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
352 }
Jason Sams49a05d72010-12-29 14:31:29 -0800353
Jason Samsfa445b92011-01-07 17:00:07 -0800354 native void rsnAllocationRead(int con, int id, byte[] d);
355 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800356 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800357 rsnAllocationRead(mContext, id, d);
358 }
359 native void rsnAllocationRead(int con, int id, short[] d);
360 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800361 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800362 rsnAllocationRead(mContext, id, d);
363 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700364 native void rsnAllocationRead(int con, int id, int[] d);
365 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800366 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700367 rsnAllocationRead(mContext, id, d);
368 }
369 native void rsnAllocationRead(int con, int id, float[] d);
370 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800371 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700372 rsnAllocationRead(mContext, id, d);
373 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700374 native int rsnAllocationGetType(int con, int id);
375 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800376 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700377 return rsnAllocationGetType(mContext, id);
378 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700379
Jason Sams5edc6082010-10-05 13:32:49 -0700380 native void rsnAllocationResize1D(int con, int id, int dimX);
381 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800382 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700383 rsnAllocationResize1D(mContext, id, dimX);
384 }
385 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
386 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800387 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700388 rsnAllocationResize2D(mContext, id, dimX, dimY);
389 }
390
Jason Sams2e1872f2010-08-17 16:25:41 -0700391 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
392 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800393 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700394 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
395 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800396 native int rsnFileA3DCreateFromFile(int con, String path);
397 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800398 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800399 return rsnFileA3DCreateFromFile(mContext, path);
400 }
401 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
402 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800403 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800404 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
405 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700406 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
407 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800408 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700409 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
410 }
411 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
412 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800413 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700414 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
415 }
416 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
417 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800418 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700419 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
420 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700421
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800422 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
423 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800424 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700425 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
426 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800427 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
428 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800429 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800430 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
431 }
432 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
433 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800434 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800435 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
436 }
Jason Sams22534172009-08-04 16:58:20 -0700437
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700438
Jason Sams2e1872f2010-08-17 16:25:41 -0700439 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
440 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800441 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700442 rsnScriptBindAllocation(mContext, script, alloc, slot);
443 }
444 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
445 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800446 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700447 rsnScriptSetTimeZone(mContext, script, timeZone);
448 }
449 native void rsnScriptInvoke(int con, int id, int slot);
450 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800451 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700452 rsnScriptInvoke(mContext, id, slot);
453 }
Jason Sams6e494d32011-04-27 16:33:11 -0700454 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
455 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
456 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
457 validate();
458 if (params == null) {
459 rsnScriptForEach(mContext, id, slot, ain, aout);
460 } else {
461 rsnScriptForEach(mContext, id, slot, ain, aout, params);
462 }
463 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700464 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
465 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800466 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700467 rsnScriptInvokeV(mContext, id, slot, params);
468 }
469 native void rsnScriptSetVarI(int con, int id, int slot, int val);
470 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800471 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700472 rsnScriptSetVarI(mContext, id, slot, val);
473 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700474 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
475 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800476 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700477 rsnScriptSetVarJ(mContext, id, slot, val);
478 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700479 native void rsnScriptSetVarF(int con, int id, int slot, float val);
480 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800481 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700482 rsnScriptSetVarF(mContext, id, slot, val);
483 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700484 native void rsnScriptSetVarD(int con, int id, int slot, double val);
485 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800486 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700487 rsnScriptSetVarD(mContext, id, slot, val);
488 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700489 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
490 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800491 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700492 rsnScriptSetVarV(mContext, id, slot, val);
493 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800494 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
495 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800496 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800497 rsnScriptSetVarObj(mContext, id, slot, val);
498 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700499
Jason Samse4a06c52011-03-16 16:29:28 -0700500 native int rsnScriptCCreate(int con, String resName, String cacheDir,
501 byte[] script, int length);
502 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800503 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700504 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700505 }
Jason Samsebfb4362009-09-23 13:57:02 -0700506
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700507 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
508 int wrapS, int wrapT, int wrapR, float aniso);
509 synchronized int nSamplerCreate(int magFilter, int minFilter,
510 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800511 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700512 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700513 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800514
Jason Sams331bf9b2011-04-06 11:23:54 -0700515 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
516 boolean depthMask, boolean dither,
517 int srcMode, int dstMode, int depthFunc);
518 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
519 boolean depthMask, boolean dither,
520 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800521 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700522 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
523 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700524 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700525
Jason Sams94aaed32011-09-23 14:18:53 -0700526 native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
527 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800528 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700529 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700530 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700531
Jason Sams2e1872f2010-08-17 16:25:41 -0700532 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
533 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800534 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700535 rsnProgramBindConstants(mContext, pv, slot, mID);
536 }
537 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
538 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800539 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700540 rsnProgramBindTexture(mContext, vpf, slot, a);
541 }
542 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
543 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800544 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700545 rsnProgramBindSampler(mContext, vpf, slot, s);
546 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700547 native int rsnProgramFragmentCreate(int con, String shader, int[] params);
548 synchronized int nProgramFragmentCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800549 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700550 return rsnProgramFragmentCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700551 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700552 native int rsnProgramVertexCreate(int con, String shader, int[] params);
553 synchronized int nProgramVertexCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800554 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700555 return rsnProgramVertexCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700556 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700557
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700558 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
559 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800560 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700561 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800562 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700563 native int rsnMeshGetVertexBufferCount(int con, int id);
564 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800565 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700566 return rsnMeshGetVertexBufferCount(mContext, id);
567 }
568 native int rsnMeshGetIndexCount(int con, int id);
569 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800570 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700571 return rsnMeshGetIndexCount(mContext, id);
572 }
573 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
574 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800575 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700576 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
577 }
578 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
579 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800580 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700581 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
582 }
583
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700584
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800585 int mDev;
586 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700587 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800588 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700589
Jason Sams8cb39de2010-06-01 15:47:01 -0700590 Element mElement_U8;
591 Element mElement_I8;
592 Element mElement_U16;
593 Element mElement_I16;
594 Element mElement_U32;
595 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700596 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700597 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700598 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700599 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700600 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700601
Jason Sams8cb39de2010-06-01 15:47:01 -0700602 Element mElement_ELEMENT;
603 Element mElement_TYPE;
604 Element mElement_ALLOCATION;
605 Element mElement_SAMPLER;
606 Element mElement_SCRIPT;
607 Element mElement_MESH;
608 Element mElement_PROGRAM_FRAGMENT;
609 Element mElement_PROGRAM_VERTEX;
610 Element mElement_PROGRAM_RASTER;
611 Element mElement_PROGRAM_STORE;
Jason Samsa70f4162010-03-26 15:33:42 -0700612
Jason Sams3c0dfba2009-09-27 17:50:38 -0700613 Element mElement_A_8;
614 Element mElement_RGB_565;
615 Element mElement_RGB_888;
616 Element mElement_RGBA_5551;
617 Element mElement_RGBA_4444;
618 Element mElement_RGBA_8888;
619
Jason Sams8cb39de2010-06-01 15:47:01 -0700620 Element mElement_FLOAT_2;
621 Element mElement_FLOAT_3;
622 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700623
624 Element mElement_DOUBLE_2;
625 Element mElement_DOUBLE_3;
626 Element mElement_DOUBLE_4;
627
628 Element mElement_UCHAR_2;
629 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700630 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800631
Stephen Hines836c4a52011-06-01 14:38:10 -0700632 Element mElement_CHAR_2;
633 Element mElement_CHAR_3;
634 Element mElement_CHAR_4;
635
636 Element mElement_USHORT_2;
637 Element mElement_USHORT_3;
638 Element mElement_USHORT_4;
639
640 Element mElement_SHORT_2;
641 Element mElement_SHORT_3;
642 Element mElement_SHORT_4;
643
644 Element mElement_UINT_2;
645 Element mElement_UINT_3;
646 Element mElement_UINT_4;
647
648 Element mElement_INT_2;
649 Element mElement_INT_3;
650 Element mElement_INT_4;
651
652 Element mElement_ULONG_2;
653 Element mElement_ULONG_3;
654 Element mElement_ULONG_4;
655
656 Element mElement_LONG_2;
657 Element mElement_LONG_3;
658 Element mElement_LONG_4;
659
Jason Sams1d45c472010-08-25 14:31:48 -0700660 Element mElement_MATRIX_4X4;
661 Element mElement_MATRIX_3X3;
662 Element mElement_MATRIX_2X2;
663
Jason Sams4d339932010-05-11 14:03:58 -0700664 Sampler mSampler_CLAMP_NEAREST;
665 Sampler mSampler_CLAMP_LINEAR;
666 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
667 Sampler mSampler_WRAP_NEAREST;
668 Sampler mSampler_WRAP_LINEAR;
669 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
670
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700671 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
672 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700673 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
674 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700675
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700676 ProgramRaster mProgramRaster_CULL_BACK;
677 ProgramRaster mProgramRaster_CULL_FRONT;
678 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700679
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700680 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700681 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700682
Jason Sams27676fe2010-11-10 17:00:59 -0800683 /**
684 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800685 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800686 * fields will be filled in and then the run method called by a message
687 * handling thread. This will occur some time after sendToClient completes
688 * in the script.
689 *
690 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800691 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700692 protected int[] mData;
693 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800694 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700695 public void run() {
696 }
697 }
Jason Sams27676fe2010-11-10 17:00:59 -0800698 /**
699 * If an application is expecting messages it should set this field to an
700 * instance of RSMessage. This instance will receive all the user messages
701 * sent from sendToClient by scripts from this context.
702 *
703 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800704 RSMessageHandler mMessageCallback = null;
705
706 public void setMessageHandler(RSMessageHandler msg) {
707 mMessageCallback = msg;
708 }
709 public RSMessageHandler getMessageHandler() {
710 return mMessageCallback;
711 }
Jason Sams516c3192009-10-06 13:58:47 -0700712
Jason Sams27676fe2010-11-10 17:00:59 -0800713 /**
714 * Runtime error base class. An application should derive from this class
715 * if it wishes to install an error handler. When errors occur at runtime
716 * the fields in this class will be filled and the run method called.
717 *
718 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800719 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800720 protected String mErrorMessage;
721 protected int mErrorNum;
722 public void run() {
723 }
724 }
Jason Sams27676fe2010-11-10 17:00:59 -0800725
726 /**
727 * Application Error handler. All runtime errors will be dispatched to the
728 * instance of RSAsyncError set here. If this field is null a
729 * RSRuntimeException will instead be thrown with details about the error.
730 * This will cause program termaination.
731 *
732 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800733 RSErrorHandler mErrorCallback = null;
734
735 public void setErrorHandler(RSErrorHandler msg) {
736 mErrorCallback = msg;
737 }
738 public RSErrorHandler getErrorHandler() {
739 return mErrorCallback;
740 }
Jason Sams1c415172010-11-08 17:06:46 -0800741
Jason Sams27676fe2010-11-10 17:00:59 -0800742 /**
743 * RenderScript worker threads priority enumeration. The default value is
744 * NORMAL. Applications wishing to do background processing such as
745 * wallpapers should set their priority to LOW to avoid starving forground
746 * processes.
747 */
Jason Sams7d787b42009-11-15 12:14:26 -0800748 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700749 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
750 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800751
752 int mID;
753 Priority(int id) {
754 mID = id;
755 }
756 }
757
Jason Sams771bebb2009-12-07 12:40:12 -0800758 void validate() {
759 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700760 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800761 }
762 }
763
Jason Sams27676fe2010-11-10 17:00:59 -0800764
765 /**
766 * Change the priority of the worker threads for this context.
767 *
768 * @param p New priority to be set.
769 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800770 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800771 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800772 nContextSetPriority(p.mID);
773 }
774
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800775 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700776 RenderScript mRS;
777 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800778 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800779
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800780 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
781 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
782 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
783 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
784 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700785
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800786 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800787
Jason Sams516c3192009-10-06 13:58:47 -0700788 MessageThread(RenderScript rs) {
789 super("RSMessageThread");
790 mRS = rs;
791
792 }
793
794 public void run() {
795 // This function is a temporary solution. The final solution will
796 // used typed allocations where the message id is the type indicator.
797 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700798 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700799 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700800 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700801 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800802 int size = mAuxData[1];
803 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800804
805 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
806 if ((size>>2) >= rbuf.length) {
807 rbuf = new int[(size + 3) >> 2];
808 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700809 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
810 RS_MESSAGE_TO_CLIENT_USER) {
811 throw new RSDriverException("Error processing message from Renderscript.");
812 }
Jason Sams1c415172010-11-08 17:06:46 -0800813
814 if(mRS.mMessageCallback != null) {
815 mRS.mMessageCallback.mData = rbuf;
816 mRS.mMessageCallback.mID = subID;
817 mRS.mMessageCallback.mLength = size;
818 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700819 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800820 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700821 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700822 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700823 }
Jason Sams1c415172010-11-08 17:06:46 -0800824
825 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
826 String e = mRS.nContextGetErrorMessage(mRS.mContext);
827
Jason Samsadd9d962010-11-22 16:20:16 -0800828 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
829 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
830 }
831
Jason Sams1c415172010-11-08 17:06:46 -0800832 if(mRS.mErrorCallback != null) {
833 mRS.mErrorCallback.mErrorMessage = e;
834 mRS.mErrorCallback.mErrorNum = subID;
835 mRS.mErrorCallback.run();
836 } else {
837 //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
838 }
839 continue;
840 }
841
842 // 2: teardown.
843 // But we want to avoid starving other threads during
844 // teardown by yielding until the next line in the destructor
845 // can execute to set mRun = false
846 try {
847 sleep(1, 0);
848 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700849 }
Jason Sams516c3192009-10-06 13:58:47 -0700850 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800851 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700852 }
853 }
854
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800855 RenderScript(Context ctx) {
856 mApplicationContext = ctx.getApplicationContext();
857 }
858
859 /**
860 * Gets the application context associated with the RenderScript context.
861 *
862 * @return The application context.
863 */
864 public final Context getApplicationContext() {
865 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700866 }
867
Stephen Hines4382467a2011-08-01 15:02:34 -0700868 static int getTargetSdkVersion(Context ctx) {
Jason Sams85397d82011-10-06 17:54:45 -0700869 return ctx.getApplicationInfo().targetSdkVersion;
Stephen Hines4382467a2011-08-01 15:02:34 -0700870 }
871
Jason Sams27676fe2010-11-10 17:00:59 -0800872 /**
873 * Create a basic RenderScript context.
874 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800875 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800876 * @return RenderScript
877 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800878 public static RenderScript create(Context ctx) {
879 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800880
Stephen Hines4382467a2011-08-01 15:02:34 -0700881 int sdkVersion = getTargetSdkVersion(ctx);
882
Jason Sams704ff642010-02-09 16:05:07 -0800883 rs.mDev = rs.nDeviceCreate();
Stephen Hines4382467a2011-08-01 15:02:34 -0700884 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion);
Jason Sams26985362011-05-03 15:01:58 -0700885 if (rs.mContext == 0) {
886 throw new RSDriverException("Failed to create RS context.");
887 }
Jason Sams704ff642010-02-09 16:05:07 -0800888 rs.mMessageThread = new MessageThread(rs);
889 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800890 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800891 }
892
Jason Sams27676fe2010-11-10 17:00:59 -0800893 /**
894 * Print the currently available debugging information about the state of
895 * the RS context to the log.
896 *
Jason Sams27676fe2010-11-10 17:00:59 -0800897 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800898 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800899 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800900 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800901 }
902
Jason Sams27676fe2010-11-10 17:00:59 -0800903 /**
904 * Wait for any commands in the fifo between the java bindings and native to
905 * be processed.
906 *
907 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700908 public void finish() {
909 nContextFinish();
910 }
911
Jason Sams27676fe2010-11-10 17:00:59 -0800912 /**
913 * Destroy this renderscript context. Once this function is called its no
914 * longer legal to use this or any objects created by this context.
915 *
916 */
Jason Samsf5b45962009-08-25 14:49:07 -0700917 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800918 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700919 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700920 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700921 try {
922 mMessageThread.join();
923 } catch(InterruptedException e) {
924 }
Jason Sams516c3192009-10-06 13:58:47 -0700925
Jason Sams2e1872f2010-08-17 16:25:41 -0700926 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700927 mContext = 0;
928
929 nDeviceDestroy(mDev);
930 mDev = 0;
931 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700932
Jason Samsa9e7a052009-09-25 14:51:22 -0700933 boolean isAlive() {
934 return mContext != 0;
935 }
936
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800937 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700938 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800939 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700940 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700941 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700942 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700943}