blob: 571b8952ebd6f98a4e5846e057492a89572f7019 [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jason Sams94d8e90a2009-06-10 16:09:05 -070017package android.renderscript;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070018
Jason Sams43ee06852009-08-12 17:54:11 -070019import java.lang.reflect.Field;
Jason Sams36e612a2009-07-31 16:26:13 -070020
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080021import android.content.Context;
Stephen Hines4382467a2011-08-01 15:02:34 -070022import android.content.pm.ApplicationInfo;
23import android.content.pm.PackageManager;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080024import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070025import android.graphics.Bitmap;
Romain Guy650a3eb2009-08-31 14:06:43 -070026import android.graphics.BitmapFactory;
Jason Samsfaa32b32011-06-20 16:58:04 -070027import android.graphics.SurfaceTexture;
Glenn Kasten260c77a2011-06-01 17:25:54 -070028import android.os.Process;
Jason Sams36e612a2009-07-31 16:26:13 -070029import android.util.Log;
30import android.view.Surface;
Jack Palevich43702d82009-05-28 13:38:16 -070031
Jack Palevich60aa3ea2009-05-26 13:45:08 -070032
Stephen Hines4382467a2011-08-01 15:02:34 -070033
Jason Samse29d4712009-07-23 15:19:03 -070034/**
Jason Sams27676fe2010-11-10 17:00:59 -080035 * RenderScript base master class. An instance of this class creates native
36 * worker threads for processing commands from this object. This base class
37 * does not provide any extended capabilities beyond simple data processing.
38 * For extended capabilities use derived classes such as RenderScriptGL.
39 *
40 *
41 *
Jason Samse29d4712009-07-23 15:19:03 -070042 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070043public class RenderScript {
Jason Sams3bc47d42009-11-12 15:10:25 -080044 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d2010-12-06 15:59:59 -080045 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070046 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070047 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070048
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080049 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070050
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080051 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070052 * We use a class initializer to allow the native code to cache some
53 * field offsets.
54 */
Romain Guy650a3eb2009-08-31 14:06:43 -070055 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080056 static boolean sInitialized;
57 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070058
Jason Samsdba3ba52009-07-30 14:56:12 -070059
Jack Palevich60aa3ea2009-05-26 13:45:08 -070060 static {
61 sInitialized = false;
62 try {
Jason Samse29d4712009-07-23 15:19:03 -070063 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070064 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070065 sInitialized = true;
66 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080067 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
68 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070069 }
70 }
71
Jason Sams2e1872f2010-08-17 16:25:41 -070072 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070073 native int nDeviceCreate();
74 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070075 native void nDeviceSetConfig(int dev, int param, int value);
Jason Samsedbfabd2011-05-17 15:01:29 -070076 native int nContextGetUserMessage(int con, int[] data);
Jason Sams1c415172010-11-08 17:06:46 -080077 native String nContextGetErrorMessage(int con);
Jason Samsedbfabd2011-05-17 15:01:29 -070078 native int nContextPeekMessage(int con, int[] subID);
Jason Sams2e1872f2010-08-17 16:25:41 -070079 native void nContextInitToClient(int con);
80 native void nContextDeinitToClient(int con);
Jason Sams3eaa3382009-06-10 15:04:38 -070081
Jason Sams718cd1f2009-12-23 14:35:29 -080082
Jason Sams2e1872f2010-08-17 16:25:41 -070083 // Methods below are wrapped to protect the non-threadsafe
84 // lockless fifo.
Stephen Hines4382467a2011-08-01 15:02:34 -070085 native int rsnContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -070086 int colorMin, int colorPref,
87 int alphaMin, int alphaPref,
88 int depthMin, int depthPref,
89 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070090 int samplesMin, int samplesPref, float samplesQ, int dpi);
Stephen Hines4382467a2011-08-01 15:02:34 -070091 synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -070092 int colorMin, int colorPref,
93 int alphaMin, int alphaPref,
94 int depthMin, int depthPref,
95 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070096 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -070097 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -070098 alphaMin, alphaPref, depthMin, depthPref,
99 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700100 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700101 }
Stephen Hines4382467a2011-08-01 15:02:34 -0700102 native int rsnContextCreate(int dev, int ver, int sdkVer);
103 synchronized int nContextCreate(int dev, int ver, int sdkVer) {
104 return rsnContextCreate(dev, ver, sdkVer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700105 }
106 native void rsnContextDestroy(int con);
107 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800108 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700109 rsnContextDestroy(mContext);
110 }
111 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
112 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800113 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700114 rsnContextSetSurface(mContext, w, h, sur);
115 }
Jason Samsfaa32b32011-06-20 16:58:04 -0700116 native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
117 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
118 validate();
119 rsnContextSetSurfaceTexture(mContext, w, h, sur);
120 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700121 native void rsnContextSetPriority(int con, int p);
122 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800123 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700124 rsnContextSetPriority(mContext, p);
125 }
126 native void rsnContextDump(int con, int bits);
127 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800128 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700129 rsnContextDump(mContext, bits);
130 }
131 native void rsnContextFinish(int con);
132 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800133 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700134 rsnContextFinish(mContext);
135 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700136
Jason Sams2e1872f2010-08-17 16:25:41 -0700137 native void rsnContextBindRootScript(int con, int script);
138 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800139 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700140 rsnContextBindRootScript(mContext, script);
141 }
142 native void rsnContextBindSampler(int con, int sampler, int slot);
143 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800144 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700145 rsnContextBindSampler(mContext, sampler, slot);
146 }
147 native void rsnContextBindProgramStore(int con, int pfs);
148 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800149 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700150 rsnContextBindProgramStore(mContext, pfs);
151 }
152 native void rsnContextBindProgramFragment(int con, int pf);
153 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800154 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700155 rsnContextBindProgramFragment(mContext, pf);
156 }
157 native void rsnContextBindProgramVertex(int con, int pv);
158 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800159 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700160 rsnContextBindProgramVertex(mContext, pv);
161 }
162 native void rsnContextBindProgramRaster(int con, int pr);
163 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800164 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700165 rsnContextBindProgramRaster(mContext, pr);
166 }
167 native void rsnContextPause(int con);
168 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800169 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700170 rsnContextPause(mContext);
171 }
172 native void rsnContextResume(int con);
173 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800174 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700175 rsnContextResume(mContext);
176 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700177
Jason Sams2e1872f2010-08-17 16:25:41 -0700178 native void rsnAssignName(int con, int obj, byte[] name);
179 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800180 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700181 rsnAssignName(mContext, obj, name);
182 }
183 native String rsnGetName(int con, int obj);
184 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800185 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700186 return rsnGetName(mContext, obj);
187 }
188 native void rsnObjDestroy(int con, int id);
189 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800190 // There is a race condition here. The calling code may be run
191 // by the gc while teardown is occuring. This protects againts
192 // deleting dead objects.
193 if (mContext != 0) {
194 rsnObjDestroy(mContext, id);
195 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700196 }
Jason Samsfe08d992009-05-27 14:45:32 -0700197
Jason Sams2e1872f2010-08-17 16:25:41 -0700198 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
199 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800200 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700201 return rsnElementCreate(mContext, type, kind, norm, vecSize);
202 }
Jason Sams70d4e502010-09-02 17:35:23 -0700203 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
204 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800205 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700206 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700207 }
208 native void rsnElementGetNativeData(int con, int id, int[] elementData);
209 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800210 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700211 rsnElementGetNativeData(mContext, id, elementData);
212 }
213 native void rsnElementGetSubElements(int con, int id, int[] IDs, String[] names);
214 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800215 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700216 rsnElementGetSubElements(mContext, id, IDs, names);
217 }
Jason Sams768bc022009-09-21 19:41:04 -0700218
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800219 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
220 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800221 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800222 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
Jason Sams2e1872f2010-08-17 16:25:41 -0700223 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700224 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
225 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800226 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700227 rsnTypeGetNativeData(mContext, id, typeData);
228 }
Jason Sams768bc022009-09-21 19:41:04 -0700229
Jason Samsd4b23b52010-12-13 15:32:35 -0800230 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage);
231 synchronized int nAllocationCreateTyped(int type, int mip, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800232 validate();
Jason Samsd4b23b52010-12-13 15:32:35 -0800233 return rsnAllocationCreateTyped(mContext, type, mip, usage);
Jason Sams2e1872f2010-08-17 16:25:41 -0700234 }
Jason Sams5476b452010-12-08 16:14:36 -0800235 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
236 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800237 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800238 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700239 }
Jason Sams5476b452010-12-08 16:14:36 -0800240 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
241 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800242 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800243 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800244 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700245 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
246 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800247 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700248 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
249 }
Jason Sams5476b452010-12-08 16:14:36 -0800250 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
251 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800252 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800253 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
254 }
255
Jason Sams4ef66502010-12-10 16:03:15 -0800256 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
257 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800258 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800259 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
260 }
261
262
Jason Sams5476b452010-12-08 16:14:36 -0800263 native void rsnAllocationSyncAll(int con, int alloc, int src);
264 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800265 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800266 rsnAllocationSyncAll(mContext, alloc, src);
267 }
Jason Samsf7086092011-01-12 13:28:37 -0800268 native void rsnAllocationGenerateMipmaps(int con, int alloc);
269 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800270 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800271 rsnAllocationGenerateMipmaps(mContext, alloc);
272 }
Jason Sams4ef66502010-12-10 16:03:15 -0800273 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
274 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800275 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800276 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700277 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700278
Jason Sams49a05d72010-12-29 14:31:29 -0800279
280 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
281 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800282 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800283 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700284 }
Jason Sams49a05d72010-12-29 14:31:29 -0800285 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
286 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800287 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800288 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
289 }
290 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
291 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] 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);
294 }
295 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
296 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] 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);
Jason Sams2e1872f2010-08-17 16:25:41 -0700299 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700300
Jason Sams49a05d72010-12-29 14:31:29 -0800301 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
302 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800303 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800304 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700305 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700306
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700307 native void rsnAllocationData2D(int con,
308 int dstAlloc, int dstXoff, int dstYoff,
309 int dstMip, int dstFace,
310 int width, int height,
311 int srcAlloc, int srcXoff, int srcYoff,
312 int srcMip, int srcFace);
313 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
314 int dstMip, int dstFace,
315 int width, int height,
316 int srcAlloc, int srcXoff, int srcYoff,
317 int srcMip, int srcFace) {
318 validate();
319 rsnAllocationData2D(mContext,
320 dstAlloc, dstXoff, dstYoff,
321 dstMip, dstFace,
322 width, height,
323 srcAlloc, srcXoff, srcYoff,
324 srcMip, srcFace);
325 }
326
Jason Samsfa445b92011-01-07 17:00:07 -0800327 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
328 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 -0800329 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800330 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
331 }
332 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
333 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 -0800334 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800335 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
336 }
Jason Sams49a05d72010-12-29 14:31:29 -0800337 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
338 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 -0800339 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800340 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700341 }
Jason Sams49a05d72010-12-29 14:31:29 -0800342 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
343 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 -0800344 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800345 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700346 }
Jason Samsfa445b92011-01-07 17:00:07 -0800347 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
348 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800349 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800350 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
351 }
Jason Sams49a05d72010-12-29 14:31:29 -0800352
Jason Samsfa445b92011-01-07 17:00:07 -0800353 native void rsnAllocationRead(int con, int id, byte[] d);
354 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800355 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800356 rsnAllocationRead(mContext, id, d);
357 }
358 native void rsnAllocationRead(int con, int id, short[] d);
359 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800360 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800361 rsnAllocationRead(mContext, id, d);
362 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700363 native void rsnAllocationRead(int con, int id, int[] d);
364 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800365 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700366 rsnAllocationRead(mContext, id, d);
367 }
368 native void rsnAllocationRead(int con, int id, float[] d);
369 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800370 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700371 rsnAllocationRead(mContext, id, d);
372 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700373 native int rsnAllocationGetType(int con, int id);
374 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800375 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700376 return rsnAllocationGetType(mContext, id);
377 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700378
Jason Sams5edc6082010-10-05 13:32:49 -0700379 native void rsnAllocationResize1D(int con, int id, int dimX);
380 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800381 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700382 rsnAllocationResize1D(mContext, id, dimX);
383 }
384 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
385 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800386 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700387 rsnAllocationResize2D(mContext, id, dimX, dimY);
388 }
389
Jason Sams2e1872f2010-08-17 16:25:41 -0700390 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
391 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800392 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700393 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
394 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800395 native int rsnFileA3DCreateFromFile(int con, String path);
396 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800397 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800398 return rsnFileA3DCreateFromFile(mContext, path);
399 }
400 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
401 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800402 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800403 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
404 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700405 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
406 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800407 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700408 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
409 }
410 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
411 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800412 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700413 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
414 }
415 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
416 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800417 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700418 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
419 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700420
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800421 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
422 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800423 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700424 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
425 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800426 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
427 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800428 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800429 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
430 }
431 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
432 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800433 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800434 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
435 }
Jason Sams22534172009-08-04 16:58:20 -0700436
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700437
Jason Sams2e1872f2010-08-17 16:25:41 -0700438 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
439 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800440 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700441 rsnScriptBindAllocation(mContext, script, alloc, slot);
442 }
443 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
444 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800445 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700446 rsnScriptSetTimeZone(mContext, script, timeZone);
447 }
448 native void rsnScriptInvoke(int con, int id, int slot);
449 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800450 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700451 rsnScriptInvoke(mContext, id, slot);
452 }
Jason Sams6e494d32011-04-27 16:33:11 -0700453 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
454 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
455 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
456 validate();
457 if (params == null) {
458 rsnScriptForEach(mContext, id, slot, ain, aout);
459 } else {
460 rsnScriptForEach(mContext, id, slot, ain, aout, params);
461 }
462 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700463 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
464 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800465 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700466 rsnScriptInvokeV(mContext, id, slot, params);
467 }
468 native void rsnScriptSetVarI(int con, int id, int slot, int val);
469 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800470 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700471 rsnScriptSetVarI(mContext, id, slot, val);
472 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700473 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
474 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800475 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700476 rsnScriptSetVarJ(mContext, id, slot, val);
477 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700478 native void rsnScriptSetVarF(int con, int id, int slot, float val);
479 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800480 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700481 rsnScriptSetVarF(mContext, id, slot, val);
482 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700483 native void rsnScriptSetVarD(int con, int id, int slot, double val);
484 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800485 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700486 rsnScriptSetVarD(mContext, id, slot, val);
487 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700488 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
489 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800490 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700491 rsnScriptSetVarV(mContext, id, slot, val);
492 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800493 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
494 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800495 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800496 rsnScriptSetVarObj(mContext, id, slot, val);
497 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700498
Jason Samse4a06c52011-03-16 16:29:28 -0700499 native int rsnScriptCCreate(int con, String resName, String cacheDir,
500 byte[] script, int length);
501 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800502 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700503 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700504 }
Jason Samsebfb4362009-09-23 13:57:02 -0700505
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700506 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
507 int wrapS, int wrapT, int wrapR, float aniso);
508 synchronized int nSamplerCreate(int magFilter, int minFilter,
509 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800510 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700511 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700512 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800513
Jason Sams331bf9b2011-04-06 11:23:54 -0700514 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
515 boolean depthMask, boolean dither,
516 int srcMode, int dstMode, int depthFunc);
517 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
518 boolean depthMask, boolean dither,
519 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800520 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700521 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
522 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700523 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700524
Jason Sams331bf9b2011-04-06 11:23:54 -0700525 native int rsnProgramRasterCreate(int con, boolean pointSmooth, boolean lineSmooth,
526 boolean pointSprite, float lineWidth, int cullMode);
527 synchronized int nProgramRasterCreate(boolean pointSmooth, boolean lineSmooth,
528 boolean pointSprite, float lineWidth, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800529 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700530 return rsnProgramRasterCreate(mContext, pointSmooth, lineSmooth, pointSprite, lineWidth,
531 cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700532 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700533
Jason Sams2e1872f2010-08-17 16:25:41 -0700534 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
535 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800536 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700537 rsnProgramBindConstants(mContext, pv, slot, mID);
538 }
539 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
540 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800541 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700542 rsnProgramBindTexture(mContext, vpf, slot, a);
543 }
544 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
545 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800546 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700547 rsnProgramBindSampler(mContext, vpf, slot, s);
548 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700549 native int rsnProgramFragmentCreate(int con, String shader, int[] params);
550 synchronized int nProgramFragmentCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800551 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700552 return rsnProgramFragmentCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700553 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700554 native int rsnProgramVertexCreate(int con, String shader, int[] params);
555 synchronized int nProgramVertexCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800556 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700557 return rsnProgramVertexCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700558 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700559
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700560 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
561 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800562 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700563 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800564 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700565 native int rsnMeshGetVertexBufferCount(int con, int id);
566 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800567 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700568 return rsnMeshGetVertexBufferCount(mContext, id);
569 }
570 native int rsnMeshGetIndexCount(int con, int id);
571 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800572 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700573 return rsnMeshGetIndexCount(mContext, id);
574 }
575 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
576 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800577 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700578 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
579 }
580 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
581 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800582 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700583 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
584 }
585
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700586
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800587 int mDev;
588 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700589 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800590 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700591
Jason Sams8cb39de2010-06-01 15:47:01 -0700592 Element mElement_U8;
593 Element mElement_I8;
594 Element mElement_U16;
595 Element mElement_I16;
596 Element mElement_U32;
597 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700598 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700599 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700600 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700601 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700602 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700603
Jason Sams8cb39de2010-06-01 15:47:01 -0700604 Element mElement_ELEMENT;
605 Element mElement_TYPE;
606 Element mElement_ALLOCATION;
607 Element mElement_SAMPLER;
608 Element mElement_SCRIPT;
609 Element mElement_MESH;
610 Element mElement_PROGRAM_FRAGMENT;
611 Element mElement_PROGRAM_VERTEX;
612 Element mElement_PROGRAM_RASTER;
613 Element mElement_PROGRAM_STORE;
Jason Samsa70f4162010-03-26 15:33:42 -0700614
Jason Sams3c0dfba2009-09-27 17:50:38 -0700615 Element mElement_A_8;
616 Element mElement_RGB_565;
617 Element mElement_RGB_888;
618 Element mElement_RGBA_5551;
619 Element mElement_RGBA_4444;
620 Element mElement_RGBA_8888;
621
Jason Sams8cb39de2010-06-01 15:47:01 -0700622 Element mElement_FLOAT_2;
623 Element mElement_FLOAT_3;
624 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700625
626 Element mElement_DOUBLE_2;
627 Element mElement_DOUBLE_3;
628 Element mElement_DOUBLE_4;
629
630 Element mElement_UCHAR_2;
631 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700632 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800633
Stephen Hines836c4a52011-06-01 14:38:10 -0700634 Element mElement_CHAR_2;
635 Element mElement_CHAR_3;
636 Element mElement_CHAR_4;
637
638 Element mElement_USHORT_2;
639 Element mElement_USHORT_3;
640 Element mElement_USHORT_4;
641
642 Element mElement_SHORT_2;
643 Element mElement_SHORT_3;
644 Element mElement_SHORT_4;
645
646 Element mElement_UINT_2;
647 Element mElement_UINT_3;
648 Element mElement_UINT_4;
649
650 Element mElement_INT_2;
651 Element mElement_INT_3;
652 Element mElement_INT_4;
653
654 Element mElement_ULONG_2;
655 Element mElement_ULONG_3;
656 Element mElement_ULONG_4;
657
658 Element mElement_LONG_2;
659 Element mElement_LONG_3;
660 Element mElement_LONG_4;
661
Jason Sams1d45c472010-08-25 14:31:48 -0700662 Element mElement_MATRIX_4X4;
663 Element mElement_MATRIX_3X3;
664 Element mElement_MATRIX_2X2;
665
Jason Sams4d339932010-05-11 14:03:58 -0700666 Sampler mSampler_CLAMP_NEAREST;
667 Sampler mSampler_CLAMP_LINEAR;
668 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
669 Sampler mSampler_WRAP_NEAREST;
670 Sampler mSampler_WRAP_LINEAR;
671 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
672
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700673 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
674 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700675 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
676 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700677
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700678 ProgramRaster mProgramRaster_CULL_BACK;
679 ProgramRaster mProgramRaster_CULL_FRONT;
680 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700681
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700682 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700683 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700684
Jason Sams27676fe2010-11-10 17:00:59 -0800685 /**
686 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800687 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800688 * fields will be filled in and then the run method called by a message
689 * handling thread. This will occur some time after sendToClient completes
690 * in the script.
691 *
692 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800693 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700694 protected int[] mData;
695 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800696 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700697 public void run() {
698 }
699 }
Jason Sams27676fe2010-11-10 17:00:59 -0800700 /**
701 * If an application is expecting messages it should set this field to an
702 * instance of RSMessage. This instance will receive all the user messages
703 * sent from sendToClient by scripts from this context.
704 *
705 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800706 RSMessageHandler mMessageCallback = null;
707
708 public void setMessageHandler(RSMessageHandler msg) {
709 mMessageCallback = msg;
710 }
711 public RSMessageHandler getMessageHandler() {
712 return mMessageCallback;
713 }
Jason Sams516c3192009-10-06 13:58:47 -0700714
Jason Sams27676fe2010-11-10 17:00:59 -0800715 /**
716 * Runtime error base class. An application should derive from this class
717 * if it wishes to install an error handler. When errors occur at runtime
718 * the fields in this class will be filled and the run method called.
719 *
720 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800721 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800722 protected String mErrorMessage;
723 protected int mErrorNum;
724 public void run() {
725 }
726 }
Jason Sams27676fe2010-11-10 17:00:59 -0800727
728 /**
729 * Application Error handler. All runtime errors will be dispatched to the
730 * instance of RSAsyncError set here. If this field is null a
731 * RSRuntimeException will instead be thrown with details about the error.
732 * This will cause program termaination.
733 *
734 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800735 RSErrorHandler mErrorCallback = null;
736
737 public void setErrorHandler(RSErrorHandler msg) {
738 mErrorCallback = msg;
739 }
740 public RSErrorHandler getErrorHandler() {
741 return mErrorCallback;
742 }
Jason Sams1c415172010-11-08 17:06:46 -0800743
Jason Sams27676fe2010-11-10 17:00:59 -0800744 /**
745 * RenderScript worker threads priority enumeration. The default value is
746 * NORMAL. Applications wishing to do background processing such as
747 * wallpapers should set their priority to LOW to avoid starving forground
748 * processes.
749 */
Jason Sams7d787b42009-11-15 12:14:26 -0800750 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700751 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
752 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800753
754 int mID;
755 Priority(int id) {
756 mID = id;
757 }
758 }
759
Jason Sams771bebb2009-12-07 12:40:12 -0800760 void validate() {
761 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700762 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800763 }
764 }
765
Jason Sams27676fe2010-11-10 17:00:59 -0800766
767 /**
768 * Change the priority of the worker threads for this context.
769 *
770 * @param p New priority to be set.
771 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800772 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800773 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800774 nContextSetPriority(p.mID);
775 }
776
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800777 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700778 RenderScript mRS;
779 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800780 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800781
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800782 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
783 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
784 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
785 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
786 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700787
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800788 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800789
Jason Sams516c3192009-10-06 13:58:47 -0700790 MessageThread(RenderScript rs) {
791 super("RSMessageThread");
792 mRS = rs;
793
794 }
795
796 public void run() {
797 // This function is a temporary solution. The final solution will
798 // used typed allocations where the message id is the type indicator.
799 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700800 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700801 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700802 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700803 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800804 int size = mAuxData[1];
805 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800806
807 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
808 if ((size>>2) >= rbuf.length) {
809 rbuf = new int[(size + 3) >> 2];
810 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700811 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
812 RS_MESSAGE_TO_CLIENT_USER) {
813 throw new RSDriverException("Error processing message from Renderscript.");
814 }
Jason Sams1c415172010-11-08 17:06:46 -0800815
816 if(mRS.mMessageCallback != null) {
817 mRS.mMessageCallback.mData = rbuf;
818 mRS.mMessageCallback.mID = subID;
819 mRS.mMessageCallback.mLength = size;
820 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700821 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800822 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700823 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700824 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700825 }
Jason Sams1c415172010-11-08 17:06:46 -0800826
827 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
828 String e = mRS.nContextGetErrorMessage(mRS.mContext);
829
Jason Samsadd9d962010-11-22 16:20:16 -0800830 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
831 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
832 }
833
Jason Sams1c415172010-11-08 17:06:46 -0800834 if(mRS.mErrorCallback != null) {
835 mRS.mErrorCallback.mErrorMessage = e;
836 mRS.mErrorCallback.mErrorNum = subID;
837 mRS.mErrorCallback.run();
838 } else {
839 //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
840 }
841 continue;
842 }
843
844 // 2: teardown.
845 // But we want to avoid starving other threads during
846 // teardown by yielding until the next line in the destructor
847 // can execute to set mRun = false
848 try {
849 sleep(1, 0);
850 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700851 }
Jason Sams516c3192009-10-06 13:58:47 -0700852 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800853 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700854 }
855 }
856
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800857 RenderScript(Context ctx) {
858 mApplicationContext = ctx.getApplicationContext();
859 }
860
861 /**
862 * Gets the application context associated with the RenderScript context.
863 *
864 * @return The application context.
865 */
866 public final Context getApplicationContext() {
867 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700868 }
869
Stephen Hines4382467a2011-08-01 15:02:34 -0700870 static int getTargetSdkVersion(Context ctx) {
871 try {
872 PackageManager pm = ctx.getPackageManager();
873 ApplicationInfo app = pm.getApplicationInfo(ctx.getPackageName(), 0);
874 return app.targetSdkVersion;
875 } catch (Exception e) {
876 throw new RSDriverException("Error calculating target SDK version for RS.");
877 }
878 }
879
Jason Sams27676fe2010-11-10 17:00:59 -0800880 /**
881 * Create a basic RenderScript context.
882 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800883 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800884 * @return RenderScript
885 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800886 public static RenderScript create(Context ctx) {
887 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800888
Stephen Hines4382467a2011-08-01 15:02:34 -0700889 int sdkVersion = getTargetSdkVersion(ctx);
890
Jason Sams704ff642010-02-09 16:05:07 -0800891 rs.mDev = rs.nDeviceCreate();
Stephen Hines4382467a2011-08-01 15:02:34 -0700892 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion);
Jason Sams26985362011-05-03 15:01:58 -0700893 if (rs.mContext == 0) {
894 throw new RSDriverException("Failed to create RS context.");
895 }
Jason Sams704ff642010-02-09 16:05:07 -0800896 rs.mMessageThread = new MessageThread(rs);
897 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800898 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800899 }
900
Jason Sams27676fe2010-11-10 17:00:59 -0800901 /**
902 * Print the currently available debugging information about the state of
903 * the RS context to the log.
904 *
Jason Sams27676fe2010-11-10 17:00:59 -0800905 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800906 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800907 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800908 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800909 }
910
Jason Sams27676fe2010-11-10 17:00:59 -0800911 /**
912 * Wait for any commands in the fifo between the java bindings and native to
913 * be processed.
914 *
915 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700916 public void finish() {
917 nContextFinish();
918 }
919
Jason Sams27676fe2010-11-10 17:00:59 -0800920 /**
921 * Destroy this renderscript context. Once this function is called its no
922 * longer legal to use this or any objects created by this context.
923 *
924 */
Jason Samsf5b45962009-08-25 14:49:07 -0700925 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800926 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700927 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700928 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700929 try {
930 mMessageThread.join();
931 } catch(InterruptedException e) {
932 }
Jason Sams516c3192009-10-06 13:58:47 -0700933
Jason Sams2e1872f2010-08-17 16:25:41 -0700934 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700935 mContext = 0;
936
937 nDeviceDestroy(mDev);
938 mDev = 0;
939 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700940
Jason Samsa9e7a052009-09-25 14:51:22 -0700941 boolean isAlive() {
942 return mContext != 0;
943 }
944
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800945 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700946 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800947 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700948 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700949 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700950 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700951}