blob: 33b6f749d9715cb92fc35cc5ddf6003374918062 [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08002 * Copyright (C) 2008-2012 The Android Open Source Project
Jack Palevich60aa3ea2009-05-26 13:45:08 -07003 *
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/**
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080035 * Renderscript base master class. An instance of this class creates native
Jason Sams27676fe2010-11-10 17:00:59 -080036 * 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 *
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080040 * <div class="special reference">
41 * <h3>Developer Guides</h3>
42 * <p>For more information about creating an application that uses Renderscript, read the
43 * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
44 * </div>
Jason Samse29d4712009-07-23 15:19:03 -070045 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070046public class RenderScript {
Jason Sams3bc47d42009-11-12 15:10:25 -080047 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d2010-12-06 15:59:59 -080048 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070049 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070050 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070051
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080052 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070053
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080054 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070055 * We use a class initializer to allow the native code to cache some
56 * field offsets.
57 */
Romain Guy650a3eb2009-08-31 14:06:43 -070058 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080059 static boolean sInitialized;
60 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070061
Jason Samsdba3ba52009-07-30 14:56:12 -070062
Jack Palevich60aa3ea2009-05-26 13:45:08 -070063 static {
64 sInitialized = false;
65 try {
Jason Samse29d4712009-07-23 15:19:03 -070066 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070067 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070068 sInitialized = true;
69 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080070 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
71 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070072 }
73 }
74
Jason Sams2e1872f2010-08-17 16:25:41 -070075 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070076 native int nDeviceCreate();
77 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070078 native void nDeviceSetConfig(int dev, int param, int value);
Jason Samsedbfabd2011-05-17 15:01:29 -070079 native int nContextGetUserMessage(int con, int[] data);
Jason Sams1c415172010-11-08 17:06:46 -080080 native String nContextGetErrorMessage(int con);
Jason Samsedbfabd2011-05-17 15:01:29 -070081 native int nContextPeekMessage(int con, int[] subID);
Jason Sams2e1872f2010-08-17 16:25:41 -070082 native void nContextInitToClient(int con);
83 native void nContextDeinitToClient(int con);
Jason Sams3eaa3382009-06-10 15:04:38 -070084
Jason Sams718cd1f2009-12-23 14:35:29 -080085
Jason Sams2e1872f2010-08-17 16:25:41 -070086 // Methods below are wrapped to protect the non-threadsafe
87 // lockless fifo.
Stephen Hines4382467a2011-08-01 15:02:34 -070088 native int rsnContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -070089 int colorMin, int colorPref,
90 int alphaMin, int alphaPref,
91 int depthMin, int depthPref,
92 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070093 int samplesMin, int samplesPref, float samplesQ, int dpi);
Stephen Hines4382467a2011-08-01 15:02:34 -070094 synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -070095 int colorMin, int colorPref,
96 int alphaMin, int alphaPref,
97 int depthMin, int depthPref,
98 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070099 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -0700100 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -0700101 alphaMin, alphaPref, depthMin, depthPref,
102 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700103 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700104 }
Stephen Hines4382467a2011-08-01 15:02:34 -0700105 native int rsnContextCreate(int dev, int ver, int sdkVer);
106 synchronized int nContextCreate(int dev, int ver, int sdkVer) {
107 return rsnContextCreate(dev, ver, sdkVer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700108 }
109 native void rsnContextDestroy(int con);
110 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800111 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700112 rsnContextDestroy(mContext);
113 }
114 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
115 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800116 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700117 rsnContextSetSurface(mContext, w, h, sur);
118 }
Jason Samsfaa32b32011-06-20 16:58:04 -0700119 native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
120 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
121 validate();
122 rsnContextSetSurfaceTexture(mContext, w, h, sur);
123 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700124 native void rsnContextSetPriority(int con, int p);
125 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800126 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700127 rsnContextSetPriority(mContext, p);
128 }
129 native void rsnContextDump(int con, int bits);
130 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800131 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700132 rsnContextDump(mContext, bits);
133 }
134 native void rsnContextFinish(int con);
135 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800136 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700137 rsnContextFinish(mContext);
138 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700139
Jason Sams2e1872f2010-08-17 16:25:41 -0700140 native void rsnContextBindRootScript(int con, int script);
141 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800142 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700143 rsnContextBindRootScript(mContext, script);
144 }
145 native void rsnContextBindSampler(int con, int sampler, int slot);
146 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800147 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700148 rsnContextBindSampler(mContext, sampler, slot);
149 }
150 native void rsnContextBindProgramStore(int con, int pfs);
151 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800152 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700153 rsnContextBindProgramStore(mContext, pfs);
154 }
155 native void rsnContextBindProgramFragment(int con, int pf);
156 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800157 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700158 rsnContextBindProgramFragment(mContext, pf);
159 }
160 native void rsnContextBindProgramVertex(int con, int pv);
161 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800162 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700163 rsnContextBindProgramVertex(mContext, pv);
164 }
165 native void rsnContextBindProgramRaster(int con, int pr);
166 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800167 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700168 rsnContextBindProgramRaster(mContext, pr);
169 }
170 native void rsnContextPause(int con);
171 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800172 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700173 rsnContextPause(mContext);
174 }
175 native void rsnContextResume(int con);
176 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800177 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700178 rsnContextResume(mContext);
179 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700180
Jason Sams2e1872f2010-08-17 16:25:41 -0700181 native void rsnAssignName(int con, int obj, byte[] name);
182 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800183 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700184 rsnAssignName(mContext, obj, name);
185 }
186 native String rsnGetName(int con, int obj);
187 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800188 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700189 return rsnGetName(mContext, obj);
190 }
191 native void rsnObjDestroy(int con, int id);
192 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800193 // There is a race condition here. The calling code may be run
194 // by the gc while teardown is occuring. This protects againts
195 // deleting dead objects.
196 if (mContext != 0) {
197 rsnObjDestroy(mContext, id);
198 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700199 }
Jason Samsfe08d992009-05-27 14:45:32 -0700200
Jason Sams2e1872f2010-08-17 16:25:41 -0700201 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
202 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800203 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700204 return rsnElementCreate(mContext, type, kind, norm, vecSize);
205 }
Jason Sams70d4e502010-09-02 17:35:23 -0700206 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
207 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800208 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700209 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700210 }
211 native void rsnElementGetNativeData(int con, int id, int[] elementData);
212 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800213 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700214 rsnElementGetNativeData(mContext, id, elementData);
215 }
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700216 native void rsnElementGetSubElements(int con, int id,
217 int[] IDs, String[] names, int[] arraySizes);
218 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800219 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700220 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700221 }
Jason Sams768bc022009-09-21 19:41:04 -0700222
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800223 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
224 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800225 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800226 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
Jason Sams2e1872f2010-08-17 16:25:41 -0700227 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700228 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
229 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800230 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700231 rsnTypeGetNativeData(mContext, id, typeData);
232 }
Jason Sams768bc022009-09-21 19:41:04 -0700233
Jason Sams857d0c72011-11-23 15:02:15 -0800234 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
235 synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800236 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800237 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700238 }
Jason Sams5476b452010-12-08 16:14:36 -0800239 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
240 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800241 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800242 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700243 }
Jason Sams5476b452010-12-08 16:14:36 -0800244 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
245 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800246 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800247 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800248 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700249 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
250 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800251 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700252 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
253 }
Jason Sams5476b452010-12-08 16:14:36 -0800254 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
255 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800256 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800257 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
258 }
259
Jason Sams4ef66502010-12-10 16:03:15 -0800260 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
261 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800262 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800263 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
264 }
265
266
Jason Sams5476b452010-12-08 16:14:36 -0800267 native void rsnAllocationSyncAll(int con, int alloc, int src);
268 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800269 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800270 rsnAllocationSyncAll(mContext, alloc, src);
271 }
Jason Sams615e7ce2012-01-13 14:01:20 -0800272 native int rsnAllocationGetSurfaceTextureID(int con, int alloc);
273 synchronized int nAllocationGetSurfaceTextureID(int alloc) {
274 validate();
275 return rsnAllocationGetSurfaceTextureID(mContext, alloc);
276 }
277
Jason Samsf7086092011-01-12 13:28:37 -0800278 native void rsnAllocationGenerateMipmaps(int con, int alloc);
279 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800280 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800281 rsnAllocationGenerateMipmaps(mContext, alloc);
282 }
Jason Sams4ef66502010-12-10 16:03:15 -0800283 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
284 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800285 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800286 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700287 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700288
Jason Sams49a05d72010-12-29 14:31:29 -0800289
290 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
291 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800292 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800293 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700294 }
Jason Sams49a05d72010-12-29 14:31:29 -0800295 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
296 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800297 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800298 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
299 }
300 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
301 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800302 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800303 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
304 }
305 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
306 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800307 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800308 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700309 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700310
Jason Sams49a05d72010-12-29 14:31:29 -0800311 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
312 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800313 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800314 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700315 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700316
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700317 native void rsnAllocationData2D(int con,
318 int dstAlloc, int dstXoff, int dstYoff,
319 int dstMip, int dstFace,
320 int width, int height,
321 int srcAlloc, int srcXoff, int srcYoff,
322 int srcMip, int srcFace);
323 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
324 int dstMip, int dstFace,
325 int width, int height,
326 int srcAlloc, int srcXoff, int srcYoff,
327 int srcMip, int srcFace) {
328 validate();
329 rsnAllocationData2D(mContext,
330 dstAlloc, dstXoff, dstYoff,
331 dstMip, dstFace,
332 width, height,
333 srcAlloc, srcXoff, srcYoff,
334 srcMip, srcFace);
335 }
336
Jason Samsfa445b92011-01-07 17:00:07 -0800337 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
338 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 -0800339 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800340 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
341 }
342 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
343 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 -0800344 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800345 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
346 }
Jason Sams49a05d72010-12-29 14:31:29 -0800347 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
348 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 -0800349 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800350 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700351 }
Jason Sams49a05d72010-12-29 14:31:29 -0800352 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
353 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 -0800354 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800355 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700356 }
Jason Samsfa445b92011-01-07 17:00:07 -0800357 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
358 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800359 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800360 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
361 }
Jason Sams49a05d72010-12-29 14:31:29 -0800362
Jason Samsfa445b92011-01-07 17:00:07 -0800363 native void rsnAllocationRead(int con, int id, byte[] d);
364 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800365 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800366 rsnAllocationRead(mContext, id, d);
367 }
368 native void rsnAllocationRead(int con, int id, short[] d);
369 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800370 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800371 rsnAllocationRead(mContext, id, d);
372 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700373 native void rsnAllocationRead(int con, int id, int[] d);
374 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800375 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700376 rsnAllocationRead(mContext, id, d);
377 }
378 native void rsnAllocationRead(int con, int id, float[] d);
379 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800380 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700381 rsnAllocationRead(mContext, id, d);
382 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700383 native int rsnAllocationGetType(int con, int id);
384 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800385 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700386 return rsnAllocationGetType(mContext, id);
387 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700388
Jason Sams5edc6082010-10-05 13:32:49 -0700389 native void rsnAllocationResize1D(int con, int id, int dimX);
390 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800391 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700392 rsnAllocationResize1D(mContext, id, dimX);
393 }
394 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
395 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800396 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700397 rsnAllocationResize2D(mContext, id, dimX, dimY);
398 }
399
Jason Sams2e1872f2010-08-17 16:25:41 -0700400 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
401 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800402 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700403 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
404 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800405 native int rsnFileA3DCreateFromFile(int con, String path);
406 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800407 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800408 return rsnFileA3DCreateFromFile(mContext, path);
409 }
410 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
411 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800412 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800413 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
414 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700415 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
416 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800417 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700418 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
419 }
420 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
421 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800422 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700423 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
424 }
425 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
426 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800427 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700428 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
429 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700430
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800431 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
432 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800433 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700434 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
435 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800436 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
437 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800438 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800439 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
440 }
441 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
442 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800443 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800444 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
445 }
Jason Sams22534172009-08-04 16:58:20 -0700446
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700447
Jason Sams2e1872f2010-08-17 16:25:41 -0700448 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
449 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800450 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700451 rsnScriptBindAllocation(mContext, script, alloc, slot);
452 }
453 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
454 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800455 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700456 rsnScriptSetTimeZone(mContext, script, timeZone);
457 }
458 native void rsnScriptInvoke(int con, int id, int slot);
459 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800460 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700461 rsnScriptInvoke(mContext, id, slot);
462 }
Jason Sams6e494d32011-04-27 16:33:11 -0700463 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
464 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
465 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
466 validate();
467 if (params == null) {
468 rsnScriptForEach(mContext, id, slot, ain, aout);
469 } else {
470 rsnScriptForEach(mContext, id, slot, ain, aout, params);
471 }
472 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700473 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
474 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800475 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700476 rsnScriptInvokeV(mContext, id, slot, params);
477 }
478 native void rsnScriptSetVarI(int con, int id, int slot, int val);
479 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800480 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700481 rsnScriptSetVarI(mContext, id, slot, val);
482 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700483 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
484 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800485 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700486 rsnScriptSetVarJ(mContext, id, slot, val);
487 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700488 native void rsnScriptSetVarF(int con, int id, int slot, float val);
489 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800490 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700491 rsnScriptSetVarF(mContext, id, slot, val);
492 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700493 native void rsnScriptSetVarD(int con, int id, int slot, double val);
494 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800495 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700496 rsnScriptSetVarD(mContext, id, slot, val);
497 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700498 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
499 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800500 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700501 rsnScriptSetVarV(mContext, id, slot, val);
502 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800503 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
504 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800505 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800506 rsnScriptSetVarObj(mContext, id, slot, val);
507 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700508
Jason Samse4a06c52011-03-16 16:29:28 -0700509 native int rsnScriptCCreate(int con, String resName, String cacheDir,
510 byte[] script, int length);
511 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800512 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700513 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700514 }
Jason Samsebfb4362009-09-23 13:57:02 -0700515
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700516 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
517 int wrapS, int wrapT, int wrapR, float aniso);
518 synchronized int nSamplerCreate(int magFilter, int minFilter,
519 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800520 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700521 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700522 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800523
Jason Sams331bf9b2011-04-06 11:23:54 -0700524 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
525 boolean depthMask, boolean dither,
526 int srcMode, int dstMode, int depthFunc);
527 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
528 boolean depthMask, boolean dither,
529 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800530 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700531 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
532 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700533 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700534
Jason Sams94aaed32011-09-23 14:18:53 -0700535 native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
536 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800537 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700538 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700539 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700540
Jason Sams2e1872f2010-08-17 16:25:41 -0700541 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
542 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800543 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700544 rsnProgramBindConstants(mContext, pv, slot, mID);
545 }
546 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
547 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800548 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700549 rsnProgramBindTexture(mContext, vpf, slot, a);
550 }
551 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
552 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800553 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700554 rsnProgramBindSampler(mContext, vpf, slot, s);
555 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800556 native int rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
557 synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800558 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800559 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700560 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800561 native int rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
562 synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800563 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800564 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700565 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700566
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700567 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
568 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800569 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700570 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800571 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700572 native int rsnMeshGetVertexBufferCount(int con, int id);
573 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800574 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700575 return rsnMeshGetVertexBufferCount(mContext, id);
576 }
577 native int rsnMeshGetIndexCount(int con, int id);
578 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800579 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700580 return rsnMeshGetIndexCount(mContext, id);
581 }
582 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
583 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800584 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700585 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
586 }
587 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
588 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800589 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700590 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
591 }
592
Jason Samsf15ed012011-10-31 13:23:43 -0700593 native int rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
594 synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
595 validate();
596 return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
597 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700598
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800599 int mDev;
600 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700601 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800602 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700603
Jason Sams8cb39de2010-06-01 15:47:01 -0700604 Element mElement_U8;
605 Element mElement_I8;
606 Element mElement_U16;
607 Element mElement_I16;
608 Element mElement_U32;
609 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700610 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700611 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700612 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700613 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700614 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700615
Jason Sams8cb39de2010-06-01 15:47:01 -0700616 Element mElement_ELEMENT;
617 Element mElement_TYPE;
618 Element mElement_ALLOCATION;
619 Element mElement_SAMPLER;
620 Element mElement_SCRIPT;
621 Element mElement_MESH;
622 Element mElement_PROGRAM_FRAGMENT;
623 Element mElement_PROGRAM_VERTEX;
624 Element mElement_PROGRAM_RASTER;
625 Element mElement_PROGRAM_STORE;
Jason Samsa70f4162010-03-26 15:33:42 -0700626
Jason Sams3c0dfba2009-09-27 17:50:38 -0700627 Element mElement_A_8;
628 Element mElement_RGB_565;
629 Element mElement_RGB_888;
630 Element mElement_RGBA_5551;
631 Element mElement_RGBA_4444;
632 Element mElement_RGBA_8888;
633
Jason Sams8cb39de2010-06-01 15:47:01 -0700634 Element mElement_FLOAT_2;
635 Element mElement_FLOAT_3;
636 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700637
638 Element mElement_DOUBLE_2;
639 Element mElement_DOUBLE_3;
640 Element mElement_DOUBLE_4;
641
642 Element mElement_UCHAR_2;
643 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700644 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800645
Stephen Hines836c4a52011-06-01 14:38:10 -0700646 Element mElement_CHAR_2;
647 Element mElement_CHAR_3;
648 Element mElement_CHAR_4;
649
650 Element mElement_USHORT_2;
651 Element mElement_USHORT_3;
652 Element mElement_USHORT_4;
653
654 Element mElement_SHORT_2;
655 Element mElement_SHORT_3;
656 Element mElement_SHORT_4;
657
658 Element mElement_UINT_2;
659 Element mElement_UINT_3;
660 Element mElement_UINT_4;
661
662 Element mElement_INT_2;
663 Element mElement_INT_3;
664 Element mElement_INT_4;
665
666 Element mElement_ULONG_2;
667 Element mElement_ULONG_3;
668 Element mElement_ULONG_4;
669
670 Element mElement_LONG_2;
671 Element mElement_LONG_3;
672 Element mElement_LONG_4;
673
Jason Sams1d45c472010-08-25 14:31:48 -0700674 Element mElement_MATRIX_4X4;
675 Element mElement_MATRIX_3X3;
676 Element mElement_MATRIX_2X2;
677
Jason Sams4d339932010-05-11 14:03:58 -0700678 Sampler mSampler_CLAMP_NEAREST;
679 Sampler mSampler_CLAMP_LINEAR;
680 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
681 Sampler mSampler_WRAP_NEAREST;
682 Sampler mSampler_WRAP_LINEAR;
683 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
684
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700685 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
686 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700687 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
688 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700689
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700690 ProgramRaster mProgramRaster_CULL_BACK;
691 ProgramRaster mProgramRaster_CULL_FRONT;
692 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700693
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700694 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700695 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700696
Jason Sams27676fe2010-11-10 17:00:59 -0800697 /**
698 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800699 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800700 * fields will be filled in and then the run method called by a message
701 * handling thread. This will occur some time after sendToClient completes
702 * in the script.
703 *
704 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800705 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700706 protected int[] mData;
707 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800708 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700709 public void run() {
710 }
711 }
Jason Sams27676fe2010-11-10 17:00:59 -0800712 /**
713 * If an application is expecting messages it should set this field to an
714 * instance of RSMessage. This instance will receive all the user messages
715 * sent from sendToClient by scripts from this context.
716 *
717 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800718 RSMessageHandler mMessageCallback = null;
719
720 public void setMessageHandler(RSMessageHandler msg) {
721 mMessageCallback = msg;
722 }
723 public RSMessageHandler getMessageHandler() {
724 return mMessageCallback;
725 }
Jason Sams516c3192009-10-06 13:58:47 -0700726
Jason Sams27676fe2010-11-10 17:00:59 -0800727 /**
728 * Runtime error base class. An application should derive from this class
729 * if it wishes to install an error handler. When errors occur at runtime
730 * the fields in this class will be filled and the run method called.
731 *
732 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800733 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800734 protected String mErrorMessage;
735 protected int mErrorNum;
736 public void run() {
737 }
738 }
Jason Sams27676fe2010-11-10 17:00:59 -0800739
740 /**
741 * Application Error handler. All runtime errors will be dispatched to the
742 * instance of RSAsyncError set here. If this field is null a
743 * RSRuntimeException will instead be thrown with details about the error.
744 * This will cause program termaination.
745 *
746 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800747 RSErrorHandler mErrorCallback = null;
748
749 public void setErrorHandler(RSErrorHandler msg) {
750 mErrorCallback = msg;
751 }
752 public RSErrorHandler getErrorHandler() {
753 return mErrorCallback;
754 }
Jason Sams1c415172010-11-08 17:06:46 -0800755
Jason Sams27676fe2010-11-10 17:00:59 -0800756 /**
757 * RenderScript worker threads priority enumeration. The default value is
758 * NORMAL. Applications wishing to do background processing such as
759 * wallpapers should set their priority to LOW to avoid starving forground
760 * processes.
761 */
Jason Sams7d787b42009-11-15 12:14:26 -0800762 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700763 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
764 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800765
766 int mID;
767 Priority(int id) {
768 mID = id;
769 }
770 }
771
Jason Sams771bebb2009-12-07 12:40:12 -0800772 void validate() {
773 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700774 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800775 }
776 }
777
Jason Sams27676fe2010-11-10 17:00:59 -0800778
779 /**
780 * Change the priority of the worker threads for this context.
781 *
782 * @param p New priority to be set.
783 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800784 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800785 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800786 nContextSetPriority(p.mID);
787 }
788
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800789 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700790 RenderScript mRS;
791 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800792 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800793
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800794 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
795 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
796 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
797 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
798 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700799
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800800 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800801
Jason Sams516c3192009-10-06 13:58:47 -0700802 MessageThread(RenderScript rs) {
803 super("RSMessageThread");
804 mRS = rs;
805
806 }
807
808 public void run() {
809 // This function is a temporary solution. The final solution will
810 // used typed allocations where the message id is the type indicator.
811 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700812 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700813 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700814 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700815 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800816 int size = mAuxData[1];
817 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800818
819 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
820 if ((size>>2) >= rbuf.length) {
821 rbuf = new int[(size + 3) >> 2];
822 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700823 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
824 RS_MESSAGE_TO_CLIENT_USER) {
825 throw new RSDriverException("Error processing message from Renderscript.");
826 }
Jason Sams1c415172010-11-08 17:06:46 -0800827
828 if(mRS.mMessageCallback != null) {
829 mRS.mMessageCallback.mData = rbuf;
830 mRS.mMessageCallback.mID = subID;
831 mRS.mMessageCallback.mLength = size;
832 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700833 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800834 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700835 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700836 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700837 }
Jason Sams1c415172010-11-08 17:06:46 -0800838
839 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
840 String e = mRS.nContextGetErrorMessage(mRS.mContext);
841
Jason Samsadd9d962010-11-22 16:20:16 -0800842 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
843 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
844 }
845
Jason Sams1c415172010-11-08 17:06:46 -0800846 if(mRS.mErrorCallback != null) {
847 mRS.mErrorCallback.mErrorMessage = e;
848 mRS.mErrorCallback.mErrorNum = subID;
849 mRS.mErrorCallback.run();
850 } else {
Stephen Hinesbe74bdd2012-02-03 15:29:36 -0800851 // Do not throw here. In these cases, we do not have
852 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -0800853 }
854 continue;
855 }
856
857 // 2: teardown.
858 // But we want to avoid starving other threads during
859 // teardown by yielding until the next line in the destructor
860 // can execute to set mRun = false
861 try {
862 sleep(1, 0);
863 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700864 }
Jason Sams516c3192009-10-06 13:58:47 -0700865 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800866 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700867 }
868 }
869
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800870 RenderScript(Context ctx) {
871 mApplicationContext = ctx.getApplicationContext();
872 }
873
874 /**
875 * Gets the application context associated with the RenderScript context.
876 *
877 * @return The application context.
878 */
879 public final Context getApplicationContext() {
880 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700881 }
882
Stephen Hines4382467a2011-08-01 15:02:34 -0700883 static int getTargetSdkVersion(Context ctx) {
Jason Sams85397d82011-10-06 17:54:45 -0700884 return ctx.getApplicationInfo().targetSdkVersion;
Stephen Hines4382467a2011-08-01 15:02:34 -0700885 }
886
Jason Sams27676fe2010-11-10 17:00:59 -0800887 /**
888 * Create a basic RenderScript context.
889 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800890 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800891 * @return RenderScript
892 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800893 public static RenderScript create(Context ctx) {
894 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800895
Stephen Hines4382467a2011-08-01 15:02:34 -0700896 int sdkVersion = getTargetSdkVersion(ctx);
897
Jason Sams704ff642010-02-09 16:05:07 -0800898 rs.mDev = rs.nDeviceCreate();
Stephen Hines4382467a2011-08-01 15:02:34 -0700899 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion);
Jason Sams26985362011-05-03 15:01:58 -0700900 if (rs.mContext == 0) {
901 throw new RSDriverException("Failed to create RS context.");
902 }
Jason Sams704ff642010-02-09 16:05:07 -0800903 rs.mMessageThread = new MessageThread(rs);
904 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800905 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800906 }
907
Jason Sams27676fe2010-11-10 17:00:59 -0800908 /**
909 * Print the currently available debugging information about the state of
910 * the RS context to the log.
911 *
Jason Sams27676fe2010-11-10 17:00:59 -0800912 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800913 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800914 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800915 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800916 }
917
Jason Sams27676fe2010-11-10 17:00:59 -0800918 /**
919 * Wait for any commands in the fifo between the java bindings and native to
920 * be processed.
921 *
922 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700923 public void finish() {
924 nContextFinish();
925 }
926
Jason Sams27676fe2010-11-10 17:00:59 -0800927 /**
928 * Destroy this renderscript context. Once this function is called its no
929 * longer legal to use this or any objects created by this context.
930 *
931 */
Jason Samsf5b45962009-08-25 14:49:07 -0700932 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800933 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700934 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700935 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700936 try {
937 mMessageThread.join();
938 } catch(InterruptedException e) {
939 }
Jason Sams516c3192009-10-06 13:58:47 -0700940
Jason Sams2e1872f2010-08-17 16:25:41 -0700941 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700942 mContext = 0;
943
944 nDeviceDestroy(mDev);
945 mDev = 0;
946 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700947
Jason Samsa9e7a052009-09-25 14:51:22 -0700948 boolean isAlive() {
949 return mContext != 0;
950 }
951
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800952 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700953 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800954 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700955 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700956 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700957 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700958}