blob: ad10832b8966f4bb81a4bd045b650afbe16db532 [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/**
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 Samsd4b23b52010-12-13 15:32:35 -0800234 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage);
235 synchronized int nAllocationCreateTyped(int type, int mip, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800236 validate();
Jason Samsd4b23b52010-12-13 15:32:35 -0800237 return rsnAllocationCreateTyped(mContext, type, mip, usage);
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 Samsf7086092011-01-12 13:28:37 -0800272 native void rsnAllocationGenerateMipmaps(int con, int alloc);
273 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800274 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800275 rsnAllocationGenerateMipmaps(mContext, alloc);
276 }
Jason Sams4ef66502010-12-10 16:03:15 -0800277 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
278 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800279 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800280 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700281 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700282
Jason Sams49a05d72010-12-29 14:31:29 -0800283
284 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
285 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800286 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800287 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700288 }
Jason Sams49a05d72010-12-29 14:31:29 -0800289 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
290 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800291 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800292 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
293 }
294 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
295 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800296 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800297 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
298 }
299 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
300 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800301 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800302 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700303 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700304
Jason Sams49a05d72010-12-29 14:31:29 -0800305 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
306 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800307 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800308 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700309 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700310
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700311 native void rsnAllocationData2D(int con,
312 int dstAlloc, int dstXoff, int dstYoff,
313 int dstMip, int dstFace,
314 int width, int height,
315 int srcAlloc, int srcXoff, int srcYoff,
316 int srcMip, int srcFace);
317 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
318 int dstMip, int dstFace,
319 int width, int height,
320 int srcAlloc, int srcXoff, int srcYoff,
321 int srcMip, int srcFace) {
322 validate();
323 rsnAllocationData2D(mContext,
324 dstAlloc, dstXoff, dstYoff,
325 dstMip, dstFace,
326 width, height,
327 srcAlloc, srcXoff, srcYoff,
328 srcMip, srcFace);
329 }
330
Jason Samsfa445b92011-01-07 17:00:07 -0800331 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
332 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 -0800333 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800334 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
335 }
336 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
337 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 -0800338 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800339 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
340 }
Jason Sams49a05d72010-12-29 14:31:29 -0800341 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
342 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 -0800343 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800344 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700345 }
Jason Sams49a05d72010-12-29 14:31:29 -0800346 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
347 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 -0800348 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800349 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700350 }
Jason Samsfa445b92011-01-07 17:00:07 -0800351 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
352 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800353 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800354 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
355 }
Jason Sams49a05d72010-12-29 14:31:29 -0800356
Jason Samsfa445b92011-01-07 17:00:07 -0800357 native void rsnAllocationRead(int con, int id, byte[] d);
358 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800359 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800360 rsnAllocationRead(mContext, id, d);
361 }
362 native void rsnAllocationRead(int con, int id, short[] d);
363 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800364 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800365 rsnAllocationRead(mContext, id, d);
366 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700367 native void rsnAllocationRead(int con, int id, int[] d);
368 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800369 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700370 rsnAllocationRead(mContext, id, d);
371 }
372 native void rsnAllocationRead(int con, int id, float[] d);
373 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800374 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700375 rsnAllocationRead(mContext, id, d);
376 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700377 native int rsnAllocationGetType(int con, int id);
378 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800379 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700380 return rsnAllocationGetType(mContext, id);
381 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700382
Jason Sams5edc6082010-10-05 13:32:49 -0700383 native void rsnAllocationResize1D(int con, int id, int dimX);
384 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800385 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700386 rsnAllocationResize1D(mContext, id, dimX);
387 }
388 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
389 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800390 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700391 rsnAllocationResize2D(mContext, id, dimX, dimY);
392 }
393
Jason Sams2e1872f2010-08-17 16:25:41 -0700394 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
395 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800396 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700397 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
398 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800399 native int rsnFileA3DCreateFromFile(int con, String path);
400 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800401 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800402 return rsnFileA3DCreateFromFile(mContext, path);
403 }
404 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
405 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800406 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800407 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
408 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700409 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
410 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800411 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700412 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
413 }
414 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
415 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800416 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700417 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
418 }
419 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
420 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800421 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700422 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
423 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700424
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800425 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
426 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800427 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700428 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
429 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800430 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
431 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800432 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800433 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
434 }
435 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
436 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800437 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800438 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
439 }
Jason Sams22534172009-08-04 16:58:20 -0700440
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700441
Jason Sams2e1872f2010-08-17 16:25:41 -0700442 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
443 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800444 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700445 rsnScriptBindAllocation(mContext, script, alloc, slot);
446 }
447 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
448 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800449 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700450 rsnScriptSetTimeZone(mContext, script, timeZone);
451 }
452 native void rsnScriptInvoke(int con, int id, int slot);
453 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800454 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700455 rsnScriptInvoke(mContext, id, slot);
456 }
Jason Sams6e494d32011-04-27 16:33:11 -0700457 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
458 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
459 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
460 validate();
461 if (params == null) {
462 rsnScriptForEach(mContext, id, slot, ain, aout);
463 } else {
464 rsnScriptForEach(mContext, id, slot, ain, aout, params);
465 }
466 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700467 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
468 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800469 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700470 rsnScriptInvokeV(mContext, id, slot, params);
471 }
472 native void rsnScriptSetVarI(int con, int id, int slot, int val);
473 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800474 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700475 rsnScriptSetVarI(mContext, id, slot, val);
476 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700477 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
478 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800479 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700480 rsnScriptSetVarJ(mContext, id, slot, val);
481 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700482 native void rsnScriptSetVarF(int con, int id, int slot, float val);
483 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800484 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700485 rsnScriptSetVarF(mContext, id, slot, val);
486 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700487 native void rsnScriptSetVarD(int con, int id, int slot, double val);
488 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800489 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700490 rsnScriptSetVarD(mContext, id, slot, val);
491 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700492 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
493 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800494 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700495 rsnScriptSetVarV(mContext, id, slot, val);
496 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800497 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
498 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800499 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800500 rsnScriptSetVarObj(mContext, id, slot, val);
501 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700502
Jason Samse4a06c52011-03-16 16:29:28 -0700503 native int rsnScriptCCreate(int con, String resName, String cacheDir,
504 byte[] script, int length);
505 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800506 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700507 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700508 }
Jason Samsebfb4362009-09-23 13:57:02 -0700509
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700510 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
511 int wrapS, int wrapT, int wrapR, float aniso);
512 synchronized int nSamplerCreate(int magFilter, int minFilter,
513 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800514 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700515 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700516 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800517
Jason Sams331bf9b2011-04-06 11:23:54 -0700518 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
519 boolean depthMask, boolean dither,
520 int srcMode, int dstMode, int depthFunc);
521 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
522 boolean depthMask, boolean dither,
523 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800524 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700525 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
526 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700527 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700528
Jason Sams94aaed32011-09-23 14:18:53 -0700529 native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
530 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800531 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700532 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700533 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700534
Jason Sams2e1872f2010-08-17 16:25:41 -0700535 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
536 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800537 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700538 rsnProgramBindConstants(mContext, pv, slot, mID);
539 }
540 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
541 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800542 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700543 rsnProgramBindTexture(mContext, vpf, slot, a);
544 }
545 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
546 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800547 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700548 rsnProgramBindSampler(mContext, vpf, slot, s);
549 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700550 native int rsnProgramFragmentCreate(int con, String shader, int[] params);
551 synchronized int nProgramFragmentCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800552 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700553 return rsnProgramFragmentCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700554 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700555 native int rsnProgramVertexCreate(int con, String shader, int[] params);
556 synchronized int nProgramVertexCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800557 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700558 return rsnProgramVertexCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700559 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700560
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700561 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
562 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800563 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700564 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800565 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700566 native int rsnMeshGetVertexBufferCount(int con, int id);
567 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800568 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700569 return rsnMeshGetVertexBufferCount(mContext, id);
570 }
571 native int rsnMeshGetIndexCount(int con, int id);
572 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800573 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700574 return rsnMeshGetIndexCount(mContext, id);
575 }
576 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
577 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800578 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700579 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
580 }
581 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
582 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800583 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700584 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
585 }
586
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700587
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800588 int mDev;
589 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700590 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800591 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700592
Jason Sams8cb39de2010-06-01 15:47:01 -0700593 Element mElement_U8;
594 Element mElement_I8;
595 Element mElement_U16;
596 Element mElement_I16;
597 Element mElement_U32;
598 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700599 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700600 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700601 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700602 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700603 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700604
Jason Sams8cb39de2010-06-01 15:47:01 -0700605 Element mElement_ELEMENT;
606 Element mElement_TYPE;
607 Element mElement_ALLOCATION;
608 Element mElement_SAMPLER;
609 Element mElement_SCRIPT;
610 Element mElement_MESH;
611 Element mElement_PROGRAM_FRAGMENT;
612 Element mElement_PROGRAM_VERTEX;
613 Element mElement_PROGRAM_RASTER;
614 Element mElement_PROGRAM_STORE;
Jason Samsa70f4162010-03-26 15:33:42 -0700615
Jason Sams3c0dfba2009-09-27 17:50:38 -0700616 Element mElement_A_8;
617 Element mElement_RGB_565;
618 Element mElement_RGB_888;
619 Element mElement_RGBA_5551;
620 Element mElement_RGBA_4444;
621 Element mElement_RGBA_8888;
622
Jason Sams8cb39de2010-06-01 15:47:01 -0700623 Element mElement_FLOAT_2;
624 Element mElement_FLOAT_3;
625 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700626
627 Element mElement_DOUBLE_2;
628 Element mElement_DOUBLE_3;
629 Element mElement_DOUBLE_4;
630
631 Element mElement_UCHAR_2;
632 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700633 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800634
Stephen Hines836c4a52011-06-01 14:38:10 -0700635 Element mElement_CHAR_2;
636 Element mElement_CHAR_3;
637 Element mElement_CHAR_4;
638
639 Element mElement_USHORT_2;
640 Element mElement_USHORT_3;
641 Element mElement_USHORT_4;
642
643 Element mElement_SHORT_2;
644 Element mElement_SHORT_3;
645 Element mElement_SHORT_4;
646
647 Element mElement_UINT_2;
648 Element mElement_UINT_3;
649 Element mElement_UINT_4;
650
651 Element mElement_INT_2;
652 Element mElement_INT_3;
653 Element mElement_INT_4;
654
655 Element mElement_ULONG_2;
656 Element mElement_ULONG_3;
657 Element mElement_ULONG_4;
658
659 Element mElement_LONG_2;
660 Element mElement_LONG_3;
661 Element mElement_LONG_4;
662
Jason Sams1d45c472010-08-25 14:31:48 -0700663 Element mElement_MATRIX_4X4;
664 Element mElement_MATRIX_3X3;
665 Element mElement_MATRIX_2X2;
666
Jason Sams4d339932010-05-11 14:03:58 -0700667 Sampler mSampler_CLAMP_NEAREST;
668 Sampler mSampler_CLAMP_LINEAR;
669 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
670 Sampler mSampler_WRAP_NEAREST;
671 Sampler mSampler_WRAP_LINEAR;
672 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
673
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700674 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
675 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700676 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
677 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700678
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700679 ProgramRaster mProgramRaster_CULL_BACK;
680 ProgramRaster mProgramRaster_CULL_FRONT;
681 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700682
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700683 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700684 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700685
Jason Sams27676fe2010-11-10 17:00:59 -0800686 /**
687 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800688 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800689 * fields will be filled in and then the run method called by a message
690 * handling thread. This will occur some time after sendToClient completes
691 * in the script.
692 *
693 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800694 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700695 protected int[] mData;
696 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800697 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700698 public void run() {
699 }
700 }
Jason Sams27676fe2010-11-10 17:00:59 -0800701 /**
702 * If an application is expecting messages it should set this field to an
703 * instance of RSMessage. This instance will receive all the user messages
704 * sent from sendToClient by scripts from this context.
705 *
706 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800707 RSMessageHandler mMessageCallback = null;
708
709 public void setMessageHandler(RSMessageHandler msg) {
710 mMessageCallback = msg;
711 }
712 public RSMessageHandler getMessageHandler() {
713 return mMessageCallback;
714 }
Jason Sams516c3192009-10-06 13:58:47 -0700715
Jason Sams27676fe2010-11-10 17:00:59 -0800716 /**
717 * Runtime error base class. An application should derive from this class
718 * if it wishes to install an error handler. When errors occur at runtime
719 * the fields in this class will be filled and the run method called.
720 *
721 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800722 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800723 protected String mErrorMessage;
724 protected int mErrorNum;
725 public void run() {
726 }
727 }
Jason Sams27676fe2010-11-10 17:00:59 -0800728
729 /**
730 * Application Error handler. All runtime errors will be dispatched to the
731 * instance of RSAsyncError set here. If this field is null a
732 * RSRuntimeException will instead be thrown with details about the error.
733 * This will cause program termaination.
734 *
735 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800736 RSErrorHandler mErrorCallback = null;
737
738 public void setErrorHandler(RSErrorHandler msg) {
739 mErrorCallback = msg;
740 }
741 public RSErrorHandler getErrorHandler() {
742 return mErrorCallback;
743 }
Jason Sams1c415172010-11-08 17:06:46 -0800744
Jason Sams27676fe2010-11-10 17:00:59 -0800745 /**
746 * RenderScript worker threads priority enumeration. The default value is
747 * NORMAL. Applications wishing to do background processing such as
748 * wallpapers should set their priority to LOW to avoid starving forground
749 * processes.
750 */
Jason Sams7d787b42009-11-15 12:14:26 -0800751 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700752 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
753 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800754
755 int mID;
756 Priority(int id) {
757 mID = id;
758 }
759 }
760
Jason Sams771bebb2009-12-07 12:40:12 -0800761 void validate() {
762 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700763 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800764 }
765 }
766
Jason Sams27676fe2010-11-10 17:00:59 -0800767
768 /**
769 * Change the priority of the worker threads for this context.
770 *
771 * @param p New priority to be set.
772 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800773 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800774 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800775 nContextSetPriority(p.mID);
776 }
777
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800778 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700779 RenderScript mRS;
780 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800781 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800782
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800783 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
784 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
785 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
786 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
787 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700788
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800789 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800790
Jason Sams516c3192009-10-06 13:58:47 -0700791 MessageThread(RenderScript rs) {
792 super("RSMessageThread");
793 mRS = rs;
794
795 }
796
797 public void run() {
798 // This function is a temporary solution. The final solution will
799 // used typed allocations where the message id is the type indicator.
800 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700801 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700802 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700803 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700804 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800805 int size = mAuxData[1];
806 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800807
808 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
809 if ((size>>2) >= rbuf.length) {
810 rbuf = new int[(size + 3) >> 2];
811 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700812 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
813 RS_MESSAGE_TO_CLIENT_USER) {
814 throw new RSDriverException("Error processing message from Renderscript.");
815 }
Jason Sams1c415172010-11-08 17:06:46 -0800816
817 if(mRS.mMessageCallback != null) {
818 mRS.mMessageCallback.mData = rbuf;
819 mRS.mMessageCallback.mID = subID;
820 mRS.mMessageCallback.mLength = size;
821 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700822 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800823 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700824 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700825 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700826 }
Jason Sams1c415172010-11-08 17:06:46 -0800827
828 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
829 String e = mRS.nContextGetErrorMessage(mRS.mContext);
830
Jason Samsadd9d962010-11-22 16:20:16 -0800831 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
832 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
833 }
834
Jason Sams1c415172010-11-08 17:06:46 -0800835 if(mRS.mErrorCallback != null) {
836 mRS.mErrorCallback.mErrorMessage = e;
837 mRS.mErrorCallback.mErrorNum = subID;
838 mRS.mErrorCallback.run();
839 } else {
840 //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
841 }
842 continue;
843 }
844
845 // 2: teardown.
846 // But we want to avoid starving other threads during
847 // teardown by yielding until the next line in the destructor
848 // can execute to set mRun = false
849 try {
850 sleep(1, 0);
851 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700852 }
Jason Sams516c3192009-10-06 13:58:47 -0700853 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800854 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700855 }
856 }
857
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800858 RenderScript(Context ctx) {
859 mApplicationContext = ctx.getApplicationContext();
860 }
861
862 /**
863 * Gets the application context associated with the RenderScript context.
864 *
865 * @return The application context.
866 */
867 public final Context getApplicationContext() {
868 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700869 }
870
Stephen Hines4382467a2011-08-01 15:02:34 -0700871 static int getTargetSdkVersion(Context ctx) {
Jason Sams85397d82011-10-06 17:54:45 -0700872 return ctx.getApplicationInfo().targetSdkVersion;
Stephen Hines4382467a2011-08-01 15:02:34 -0700873 }
874
Jason Sams27676fe2010-11-10 17:00:59 -0800875 /**
876 * Create a basic RenderScript context.
877 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800878 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800879 * @return RenderScript
880 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800881 public static RenderScript create(Context ctx) {
882 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800883
Stephen Hines4382467a2011-08-01 15:02:34 -0700884 int sdkVersion = getTargetSdkVersion(ctx);
885
Jason Sams704ff642010-02-09 16:05:07 -0800886 rs.mDev = rs.nDeviceCreate();
Stephen Hines4382467a2011-08-01 15:02:34 -0700887 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion);
Jason Sams26985362011-05-03 15:01:58 -0700888 if (rs.mContext == 0) {
889 throw new RSDriverException("Failed to create RS context.");
890 }
Jason Sams704ff642010-02-09 16:05:07 -0800891 rs.mMessageThread = new MessageThread(rs);
892 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800893 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800894 }
895
Jason Sams27676fe2010-11-10 17:00:59 -0800896 /**
897 * Print the currently available debugging information about the state of
898 * the RS context to the log.
899 *
Jason Sams27676fe2010-11-10 17:00:59 -0800900 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800901 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800902 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800903 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800904 }
905
Jason Sams27676fe2010-11-10 17:00:59 -0800906 /**
907 * Wait for any commands in the fifo between the java bindings and native to
908 * be processed.
909 *
910 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700911 public void finish() {
912 nContextFinish();
913 }
914
Jason Sams27676fe2010-11-10 17:00:59 -0800915 /**
916 * Destroy this renderscript context. Once this function is called its no
917 * longer legal to use this or any objects created by this context.
918 *
919 */
Jason Samsf5b45962009-08-25 14:49:07 -0700920 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800921 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700922 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700923 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700924 try {
925 mMessageThread.join();
926 } catch(InterruptedException e) {
927 }
Jason Sams516c3192009-10-06 13:58:47 -0700928
Jason Sams2e1872f2010-08-17 16:25:41 -0700929 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700930 mContext = 0;
931
932 nDeviceDestroy(mDev);
933 mDev = 0;
934 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700935
Jason Samsa9e7a052009-09-25 14:51:22 -0700936 boolean isAlive() {
937 return mContext != 0;
938 }
939
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800940 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700941 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800942 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700943 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700944 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700945 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700946}