blob: feb74b8a94cb81cfda243f74a907d152af5332d8 [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jason Sams94d8e90a2009-06-10 16:09:05 -070017package android.renderscript;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070018
Jason Sams43ee06852009-08-12 17:54:11 -070019import java.lang.reflect.Field;
Jason Sams36e612a2009-07-31 16:26:13 -070020
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080021import android.content.Context;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080022import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070023import android.graphics.Bitmap;
Romain Guy650a3eb2009-08-31 14:06:43 -070024import android.graphics.BitmapFactory;
Jason Sams36e612a2009-07-31 16:26:13 -070025import android.util.Log;
26import android.view.Surface;
Jack Palevich43702d82009-05-28 13:38:16 -070027
Jack Palevich60aa3ea2009-05-26 13:45:08 -070028
Jason Samse29d4712009-07-23 15:19:03 -070029/**
Jason Sams27676fe2010-11-10 17:00:59 -080030 * RenderScript base master class. An instance of this class creates native
31 * worker threads for processing commands from this object. This base class
32 * does not provide any extended capabilities beyond simple data processing.
33 * For extended capabilities use derived classes such as RenderScriptGL.
34 *
35 *
36 *
Jason Samse29d4712009-07-23 15:19:03 -070037 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070038public class RenderScript {
Jason Sams3bc47d42009-11-12 15:10:25 -080039 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d2010-12-06 15:59:59 -080040 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070041 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070042 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070043
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080044 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070045
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080046 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070047 * We use a class initializer to allow the native code to cache some
48 * field offsets.
49 */
Romain Guy650a3eb2009-08-31 14:06:43 -070050 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080051 static boolean sInitialized;
52 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070053
Jason Samsdba3ba52009-07-30 14:56:12 -070054
Jack Palevich60aa3ea2009-05-26 13:45:08 -070055 static {
56 sInitialized = false;
57 try {
Jason Samse29d4712009-07-23 15:19:03 -070058 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070059 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070060 sInitialized = true;
61 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080062 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
63 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070064 }
65 }
66
Jason Sams2e1872f2010-08-17 16:25:41 -070067 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070068 native int nDeviceCreate();
69 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070070 native void nDeviceSetConfig(int dev, int param, int value);
Jason Sams1c415172010-11-08 17:06:46 -080071 native void nContextGetUserMessage(int con, int[] data);
72 native String nContextGetErrorMessage(int con);
73 native int nContextPeekMessage(int con, int[] subID, boolean wait);
Jason Sams2e1872f2010-08-17 16:25:41 -070074 native void nContextInitToClient(int con);
75 native void nContextDeinitToClient(int con);
Jason Sams3eaa3382009-06-10 15:04:38 -070076
Jason Sams718cd1f2009-12-23 14:35:29 -080077
Jason Sams2e1872f2010-08-17 16:25:41 -070078 // Methods below are wrapped to protect the non-threadsafe
79 // lockless fifo.
Jason Sams11c8af92010-10-13 15:31:10 -070080 native int rsnContextCreateGL(int dev, int ver,
81 int colorMin, int colorPref,
82 int alphaMin, int alphaPref,
83 int depthMin, int depthPref,
84 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070085 int samplesMin, int samplesPref, float samplesQ, int dpi);
Jason Sams11c8af92010-10-13 15:31:10 -070086 synchronized int nContextCreateGL(int dev, int ver,
87 int colorMin, int colorPref,
88 int alphaMin, int alphaPref,
89 int depthMin, int depthPref,
90 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070091 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Jason Sams11c8af92010-10-13 15:31:10 -070092 return rsnContextCreateGL(dev, ver, colorMin, colorPref,
93 alphaMin, alphaPref, depthMin, depthPref,
94 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070095 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -070096 }
97 native int rsnContextCreate(int dev, int ver);
98 synchronized int nContextCreate(int dev, int ver) {
99 return rsnContextCreate(dev, ver);
100 }
101 native void rsnContextDestroy(int con);
102 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800103 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700104 rsnContextDestroy(mContext);
105 }
106 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
107 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800108 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700109 rsnContextSetSurface(mContext, w, h, sur);
110 }
111 native void rsnContextSetPriority(int con, int p);
112 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800113 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700114 rsnContextSetPriority(mContext, p);
115 }
116 native void rsnContextDump(int con, int bits);
117 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800118 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700119 rsnContextDump(mContext, bits);
120 }
121 native void rsnContextFinish(int con);
122 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800123 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700124 rsnContextFinish(mContext);
125 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700126
Jason Sams2e1872f2010-08-17 16:25:41 -0700127 native void rsnContextBindRootScript(int con, int script);
128 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800129 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700130 rsnContextBindRootScript(mContext, script);
131 }
132 native void rsnContextBindSampler(int con, int sampler, int slot);
133 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800134 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700135 rsnContextBindSampler(mContext, sampler, slot);
136 }
137 native void rsnContextBindProgramStore(int con, int pfs);
138 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800139 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700140 rsnContextBindProgramStore(mContext, pfs);
141 }
142 native void rsnContextBindProgramFragment(int con, int pf);
143 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800144 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700145 rsnContextBindProgramFragment(mContext, pf);
146 }
147 native void rsnContextBindProgramVertex(int con, int pv);
148 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800149 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700150 rsnContextBindProgramVertex(mContext, pv);
151 }
152 native void rsnContextBindProgramRaster(int con, int pr);
153 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800154 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700155 rsnContextBindProgramRaster(mContext, pr);
156 }
157 native void rsnContextPause(int con);
158 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800159 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700160 rsnContextPause(mContext);
161 }
162 native void rsnContextResume(int con);
163 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800164 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700165 rsnContextResume(mContext);
166 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700167
Jason Sams2e1872f2010-08-17 16:25:41 -0700168 native void rsnAssignName(int con, int obj, byte[] name);
169 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800170 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700171 rsnAssignName(mContext, obj, name);
172 }
173 native String rsnGetName(int con, int obj);
174 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800175 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700176 return rsnGetName(mContext, obj);
177 }
178 native void rsnObjDestroy(int con, int id);
179 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800180 // There is a race condition here. The calling code may be run
181 // by the gc while teardown is occuring. This protects againts
182 // deleting dead objects.
183 if (mContext != 0) {
184 rsnObjDestroy(mContext, id);
185 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700186 }
Jason Samsfe08d992009-05-27 14:45:32 -0700187
Jason Sams2e1872f2010-08-17 16:25:41 -0700188 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
189 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800190 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700191 return rsnElementCreate(mContext, type, kind, norm, vecSize);
192 }
Jason Sams70d4e502010-09-02 17:35:23 -0700193 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
194 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800195 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700196 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700197 }
198 native void rsnElementGetNativeData(int con, int id, int[] elementData);
199 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800200 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700201 rsnElementGetNativeData(mContext, id, elementData);
202 }
203 native void rsnElementGetSubElements(int con, int id, int[] IDs, String[] names);
204 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800205 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700206 rsnElementGetSubElements(mContext, id, IDs, names);
207 }
Jason Sams768bc022009-09-21 19:41:04 -0700208
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800209 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
210 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800211 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800212 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
Jason Sams2e1872f2010-08-17 16:25:41 -0700213 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700214 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
215 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800216 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700217 rsnTypeGetNativeData(mContext, id, typeData);
218 }
Jason Sams768bc022009-09-21 19:41:04 -0700219
Jason Samsd4b23b52010-12-13 15:32:35 -0800220 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage);
221 synchronized int nAllocationCreateTyped(int type, int mip, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800222 validate();
Jason Samsd4b23b52010-12-13 15:32:35 -0800223 return rsnAllocationCreateTyped(mContext, type, mip, usage);
Jason Sams2e1872f2010-08-17 16:25:41 -0700224 }
Jason Sams5476b452010-12-08 16:14:36 -0800225 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
226 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800227 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800228 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700229 }
Jason Sams5476b452010-12-08 16:14:36 -0800230 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
231 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800232 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800233 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800234 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700235 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
236 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800237 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700238 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
239 }
Jason Sams5476b452010-12-08 16:14:36 -0800240 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
241 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800242 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800243 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
244 }
245
Jason Sams4ef66502010-12-10 16:03:15 -0800246 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
247 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800248 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800249 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
250 }
251
252
Jason Sams5476b452010-12-08 16:14:36 -0800253 native void rsnAllocationSyncAll(int con, int alloc, int src);
254 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800255 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800256 rsnAllocationSyncAll(mContext, alloc, src);
257 }
Jason Samsf7086092011-01-12 13:28:37 -0800258 native void rsnAllocationGenerateMipmaps(int con, int alloc);
259 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800260 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800261 rsnAllocationGenerateMipmaps(mContext, alloc);
262 }
Jason Sams4ef66502010-12-10 16:03:15 -0800263 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
264 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800265 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800266 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700267 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700268
Jason Sams49a05d72010-12-29 14:31:29 -0800269
270 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
271 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800272 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800273 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700274 }
Jason Sams49a05d72010-12-29 14:31:29 -0800275 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
276 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800277 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800278 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
279 }
280 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
281 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] 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);
284 }
285 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
286 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] 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);
Jason Sams2e1872f2010-08-17 16:25:41 -0700289 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700290
Jason Sams49a05d72010-12-29 14:31:29 -0800291 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
292 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800293 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800294 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700295 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700296
Jason Samsfa445b92011-01-07 17:00:07 -0800297 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
298 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 -0800299 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800300 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
301 }
302 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
303 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 -0800304 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800305 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
306 }
Jason Sams49a05d72010-12-29 14:31:29 -0800307 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
308 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 -0800309 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800310 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700311 }
Jason Sams49a05d72010-12-29 14:31:29 -0800312 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
313 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 -0800314 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800315 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700316 }
Jason Samsfa445b92011-01-07 17:00:07 -0800317 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
318 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800319 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800320 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
321 }
Jason Sams49a05d72010-12-29 14:31:29 -0800322
Jason Samsfa445b92011-01-07 17:00:07 -0800323 native void rsnAllocationRead(int con, int id, byte[] d);
324 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800325 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800326 rsnAllocationRead(mContext, id, d);
327 }
328 native void rsnAllocationRead(int con, int id, short[] d);
329 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800330 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800331 rsnAllocationRead(mContext, id, d);
332 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700333 native void rsnAllocationRead(int con, int id, int[] d);
334 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800335 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700336 rsnAllocationRead(mContext, id, d);
337 }
338 native void rsnAllocationRead(int con, int id, float[] d);
339 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800340 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700341 rsnAllocationRead(mContext, id, d);
342 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700343 native int rsnAllocationGetType(int con, int id);
344 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800345 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700346 return rsnAllocationGetType(mContext, id);
347 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700348
Jason Sams5edc6082010-10-05 13:32:49 -0700349 native void rsnAllocationResize1D(int con, int id, int dimX);
350 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800351 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700352 rsnAllocationResize1D(mContext, id, dimX);
353 }
354 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
355 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800356 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700357 rsnAllocationResize2D(mContext, id, dimX, dimY);
358 }
359
Jason Sams2e1872f2010-08-17 16:25:41 -0700360 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
361 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800362 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700363 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
364 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800365 native int rsnFileA3DCreateFromFile(int con, String path);
366 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800367 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800368 return rsnFileA3DCreateFromFile(mContext, path);
369 }
370 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
371 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800372 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800373 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
374 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700375 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
376 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800377 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700378 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
379 }
380 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
381 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800382 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700383 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
384 }
385 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
386 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800387 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700388 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
389 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700390
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800391 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
392 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800393 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700394 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
395 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800396 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
397 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800398 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800399 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
400 }
401 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
402 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800403 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800404 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
405 }
Jason Sams22534172009-08-04 16:58:20 -0700406
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700407
Jason Sams2e1872f2010-08-17 16:25:41 -0700408 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
409 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800410 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700411 rsnScriptBindAllocation(mContext, script, alloc, slot);
412 }
413 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
414 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800415 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700416 rsnScriptSetTimeZone(mContext, script, timeZone);
417 }
418 native void rsnScriptInvoke(int con, int id, int slot);
419 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800420 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700421 rsnScriptInvoke(mContext, id, slot);
422 }
Jason Sams6e494d32011-04-27 16:33:11 -0700423 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
424 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
425 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
426 validate();
427 if (params == null) {
428 rsnScriptForEach(mContext, id, slot, ain, aout);
429 } else {
430 rsnScriptForEach(mContext, id, slot, ain, aout, params);
431 }
432 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700433 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
434 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800435 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700436 rsnScriptInvokeV(mContext, id, slot, params);
437 }
438 native void rsnScriptSetVarI(int con, int id, int slot, int val);
439 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800440 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700441 rsnScriptSetVarI(mContext, id, slot, val);
442 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700443 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
444 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800445 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700446 rsnScriptSetVarJ(mContext, id, slot, val);
447 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700448 native void rsnScriptSetVarF(int con, int id, int slot, float val);
449 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800450 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700451 rsnScriptSetVarF(mContext, id, slot, val);
452 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700453 native void rsnScriptSetVarD(int con, int id, int slot, double val);
454 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800455 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700456 rsnScriptSetVarD(mContext, id, slot, val);
457 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700458 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
459 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800460 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700461 rsnScriptSetVarV(mContext, id, slot, val);
462 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800463 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
464 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800465 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800466 rsnScriptSetVarObj(mContext, id, slot, val);
467 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700468
Jason Samse4a06c52011-03-16 16:29:28 -0700469 native int rsnScriptCCreate(int con, String resName, String cacheDir,
470 byte[] script, int length);
471 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800472 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700473 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700474 }
Jason Samsebfb4362009-09-23 13:57:02 -0700475
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700476 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
477 int wrapS, int wrapT, int wrapR, float aniso);
478 synchronized int nSamplerCreate(int magFilter, int minFilter,
479 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800480 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700481 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700482 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800483
Jason Sams331bf9b2011-04-06 11:23:54 -0700484 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
485 boolean depthMask, boolean dither,
486 int srcMode, int dstMode, int depthFunc);
487 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
488 boolean depthMask, boolean dither,
489 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800490 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700491 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
492 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700493 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700494
Jason Sams331bf9b2011-04-06 11:23:54 -0700495 native int rsnProgramRasterCreate(int con, boolean pointSmooth, boolean lineSmooth,
496 boolean pointSprite, float lineWidth, int cullMode);
497 synchronized int nProgramRasterCreate(boolean pointSmooth, boolean lineSmooth,
498 boolean pointSprite, float lineWidth, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800499 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700500 return rsnProgramRasterCreate(mContext, pointSmooth, lineSmooth, pointSprite, lineWidth,
501 cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700502 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700503
Jason Sams2e1872f2010-08-17 16:25:41 -0700504 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
505 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800506 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700507 rsnProgramBindConstants(mContext, pv, slot, mID);
508 }
509 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
510 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800511 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700512 rsnProgramBindTexture(mContext, vpf, slot, a);
513 }
514 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
515 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800516 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700517 rsnProgramBindSampler(mContext, vpf, slot, s);
518 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700519 native int rsnProgramFragmentCreate(int con, String shader, int[] params);
520 synchronized int nProgramFragmentCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800521 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700522 return rsnProgramFragmentCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700523 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700524 native int rsnProgramVertexCreate(int con, String shader, int[] params);
525 synchronized int nProgramVertexCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800526 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700527 return rsnProgramVertexCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700528 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700529
Jason Sams2e1872f2010-08-17 16:25:41 -0700530 native int rsnMeshCreate(int con, int vtxCount, int indexCount);
531 synchronized int nMeshCreate(int vtxCount, int indexCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800532 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700533 return rsnMeshCreate(mContext, vtxCount, indexCount);
534 }
535 native void rsnMeshBindVertex(int con, int id, int alloc, int slot);
536 synchronized void nMeshBindVertex(int id, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800537 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700538 rsnMeshBindVertex(mContext, id, alloc, slot);
539 }
540 native void rsnMeshBindIndex(int con, int id, int alloc, int prim, int slot);
541 synchronized void nMeshBindIndex(int id, int alloc, int prim, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800542 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700543 rsnMeshBindIndex(mContext, id, alloc, prim, slot);
544 }
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800545 native void rsnMeshInitVertexAttribs(int con, int id);
546 synchronized void nMeshInitVertexAttribs(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800547 validate();
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800548 rsnMeshInitVertexAttribs(mContext, id);
549 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700550 native int rsnMeshGetVertexBufferCount(int con, int id);
551 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800552 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700553 return rsnMeshGetVertexBufferCount(mContext, id);
554 }
555 native int rsnMeshGetIndexCount(int con, int id);
556 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800557 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700558 return rsnMeshGetIndexCount(mContext, id);
559 }
560 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
561 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800562 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700563 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
564 }
565 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
566 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800567 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700568 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
569 }
570
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700571
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800572 int mDev;
573 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700574 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800575 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700576
Jason Sams8cb39de2010-06-01 15:47:01 -0700577 Element mElement_U8;
578 Element mElement_I8;
579 Element mElement_U16;
580 Element mElement_I16;
581 Element mElement_U32;
582 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700583 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700584 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700585 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700586 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700587 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700588
Jason Sams8cb39de2010-06-01 15:47:01 -0700589 Element mElement_ELEMENT;
590 Element mElement_TYPE;
591 Element mElement_ALLOCATION;
592 Element mElement_SAMPLER;
593 Element mElement_SCRIPT;
594 Element mElement_MESH;
595 Element mElement_PROGRAM_FRAGMENT;
596 Element mElement_PROGRAM_VERTEX;
597 Element mElement_PROGRAM_RASTER;
598 Element mElement_PROGRAM_STORE;
Jason Samsa70f4162010-03-26 15:33:42 -0700599
Jason Sams3c0dfba2009-09-27 17:50:38 -0700600 Element mElement_A_8;
601 Element mElement_RGB_565;
602 Element mElement_RGB_888;
603 Element mElement_RGBA_5551;
604 Element mElement_RGBA_4444;
605 Element mElement_RGBA_8888;
606
Jason Sams8cb39de2010-06-01 15:47:01 -0700607 Element mElement_FLOAT_2;
608 Element mElement_FLOAT_3;
609 Element mElement_FLOAT_4;
610 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800611
Jason Sams1d45c472010-08-25 14:31:48 -0700612 Element mElement_MATRIX_4X4;
613 Element mElement_MATRIX_3X3;
614 Element mElement_MATRIX_2X2;
615
Jason Sams4d339932010-05-11 14:03:58 -0700616 Sampler mSampler_CLAMP_NEAREST;
617 Sampler mSampler_CLAMP_LINEAR;
618 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
619 Sampler mSampler_WRAP_NEAREST;
620 Sampler mSampler_WRAP_LINEAR;
621 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
622
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700623 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
624 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700625 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
626 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700627
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700628 ProgramRaster mProgramRaster_CULL_BACK;
629 ProgramRaster mProgramRaster_CULL_FRONT;
630 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700631
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700632 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700633 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700634
Jason Sams27676fe2010-11-10 17:00:59 -0800635 /**
636 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800637 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800638 * fields will be filled in and then the run method called by a message
639 * handling thread. This will occur some time after sendToClient completes
640 * in the script.
641 *
642 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800643 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700644 protected int[] mData;
645 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800646 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700647 public void run() {
648 }
649 }
Jason Sams27676fe2010-11-10 17:00:59 -0800650 /**
651 * If an application is expecting messages it should set this field to an
652 * instance of RSMessage. This instance will receive all the user messages
653 * sent from sendToClient by scripts from this context.
654 *
655 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800656 RSMessageHandler mMessageCallback = null;
657
658 public void setMessageHandler(RSMessageHandler msg) {
659 mMessageCallback = msg;
660 }
661 public RSMessageHandler getMessageHandler() {
662 return mMessageCallback;
663 }
Jason Sams516c3192009-10-06 13:58:47 -0700664
Jason Sams27676fe2010-11-10 17:00:59 -0800665 /**
666 * Runtime error base class. An application should derive from this class
667 * if it wishes to install an error handler. When errors occur at runtime
668 * the fields in this class will be filled and the run method called.
669 *
670 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800671 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800672 protected String mErrorMessage;
673 protected int mErrorNum;
674 public void run() {
675 }
676 }
Jason Sams27676fe2010-11-10 17:00:59 -0800677
678 /**
679 * Application Error handler. All runtime errors will be dispatched to the
680 * instance of RSAsyncError set here. If this field is null a
681 * RSRuntimeException will instead be thrown with details about the error.
682 * This will cause program termaination.
683 *
684 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800685 RSErrorHandler mErrorCallback = null;
686
687 public void setErrorHandler(RSErrorHandler msg) {
688 mErrorCallback = msg;
689 }
690 public RSErrorHandler getErrorHandler() {
691 return mErrorCallback;
692 }
Jason Sams1c415172010-11-08 17:06:46 -0800693
Jason Sams27676fe2010-11-10 17:00:59 -0800694 /**
695 * RenderScript worker threads priority enumeration. The default value is
696 * NORMAL. Applications wishing to do background processing such as
697 * wallpapers should set their priority to LOW to avoid starving forground
698 * processes.
699 */
Jason Sams7d787b42009-11-15 12:14:26 -0800700 public enum Priority {
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800701 // Remap these numbers to opaque...
Jason Sams7d787b42009-11-15 12:14:26 -0800702 LOW (5), //ANDROID_PRIORITY_BACKGROUND + 5
703 NORMAL (-4); //ANDROID_PRIORITY_DISPLAY
704
705 int mID;
706 Priority(int id) {
707 mID = id;
708 }
709 }
710
Jason Sams771bebb2009-12-07 12:40:12 -0800711 void validate() {
712 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700713 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800714 }
715 }
716
Jason Sams27676fe2010-11-10 17:00:59 -0800717
718 /**
719 * Change the priority of the worker threads for this context.
720 *
721 * @param p New priority to be set.
722 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800723 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800724 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800725 nContextSetPriority(p.mID);
726 }
727
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800728 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700729 RenderScript mRS;
730 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800731 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800732
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800733 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
734 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
735 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
736 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
737 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700738
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800739 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800740
Jason Sams516c3192009-10-06 13:58:47 -0700741 MessageThread(RenderScript rs) {
742 super("RSMessageThread");
743 mRS = rs;
744
745 }
746
747 public void run() {
748 // This function is a temporary solution. The final solution will
749 // used typed allocations where the message id is the type indicator.
750 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700751 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700752 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700753 rbuf[0] = 0;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800754 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData, true);
755 int size = mAuxData[1];
756 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800757
758 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
759 if ((size>>2) >= rbuf.length) {
760 rbuf = new int[(size + 3) >> 2];
761 }
762 mRS.nContextGetUserMessage(mRS.mContext, rbuf);
763
764 if(mRS.mMessageCallback != null) {
765 mRS.mMessageCallback.mData = rbuf;
766 mRS.mMessageCallback.mID = subID;
767 mRS.mMessageCallback.mLength = size;
768 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700769 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800770 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700771 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700772 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700773 }
Jason Sams1c415172010-11-08 17:06:46 -0800774
775 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
776 String e = mRS.nContextGetErrorMessage(mRS.mContext);
777
Jason Samsadd9d962010-11-22 16:20:16 -0800778 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
779 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
780 }
781
Jason Sams1c415172010-11-08 17:06:46 -0800782 if(mRS.mErrorCallback != null) {
783 mRS.mErrorCallback.mErrorMessage = e;
784 mRS.mErrorCallback.mErrorNum = subID;
785 mRS.mErrorCallback.run();
786 } else {
787 //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
788 }
789 continue;
790 }
791
792 // 2: teardown.
793 // But we want to avoid starving other threads during
794 // teardown by yielding until the next line in the destructor
795 // can execute to set mRun = false
796 try {
797 sleep(1, 0);
798 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700799 }
Jason Sams516c3192009-10-06 13:58:47 -0700800 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800801 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700802 }
803 }
804
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800805 RenderScript(Context ctx) {
806 mApplicationContext = ctx.getApplicationContext();
807 }
808
809 /**
810 * Gets the application context associated with the RenderScript context.
811 *
812 * @return The application context.
813 */
814 public final Context getApplicationContext() {
815 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700816 }
817
Jason Sams27676fe2010-11-10 17:00:59 -0800818 /**
819 * Create a basic RenderScript context.
820 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800821 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800822 * @return RenderScript
823 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800824 public static RenderScript create(Context ctx) {
825 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800826
827 rs.mDev = rs.nDeviceCreate();
828 rs.mContext = rs.nContextCreate(rs.mDev, 0);
Jason Sams26985362011-05-03 15:01:58 -0700829 if (rs.mContext == 0) {
830 throw new RSDriverException("Failed to create RS context.");
831 }
Jason Sams704ff642010-02-09 16:05:07 -0800832 rs.mMessageThread = new MessageThread(rs);
833 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800834 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800835 }
836
Jason Sams27676fe2010-11-10 17:00:59 -0800837 /**
838 * Print the currently available debugging information about the state of
839 * the RS context to the log.
840 *
Jason Sams27676fe2010-11-10 17:00:59 -0800841 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800842 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800843 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800844 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800845 }
846
Jason Sams27676fe2010-11-10 17:00:59 -0800847 /**
848 * Wait for any commands in the fifo between the java bindings and native to
849 * be processed.
850 *
851 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700852 public void finish() {
853 nContextFinish();
854 }
855
Jason Sams27676fe2010-11-10 17:00:59 -0800856 /**
857 * Destroy this renderscript context. Once this function is called its no
858 * longer legal to use this or any objects created by this context.
859 *
860 */
Jason Samsf5b45962009-08-25 14:49:07 -0700861 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800862 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700863 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700864 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700865 try {
866 mMessageThread.join();
867 } catch(InterruptedException e) {
868 }
Jason Sams516c3192009-10-06 13:58:47 -0700869
Jason Sams2e1872f2010-08-17 16:25:41 -0700870 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700871 mContext = 0;
872
873 nDeviceDestroy(mDev);
874 mDev = 0;
875 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700876
Jason Samsa9e7a052009-09-25 14:51:22 -0700877 boolean isAlive() {
878 return mContext != 0;
879 }
880
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800881 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700882 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800883 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700884 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700885 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700886 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700887}