RenderScript.java revision 96ed4cfa62dd09aafb3f9da01e047661b4fe3c95
160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich/* 260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Copyright (C) 2008 The Android Open Source Project 360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * 460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Licensed under the Apache License, Version 2.0 (the "License"); 560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * you may not use this file except in compliance with the License. 660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * You may obtain a copy of the License at 760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * 860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * http://www.apache.org/licenses/LICENSE-2.0 960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * 1060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Unless required by applicable law or agreed to in writing, software 1160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * distributed under the License is distributed on an "AS IS" BASIS, 1260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * See the License for the specific language governing permissions and 1460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * limitations under the License. 1560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich */ 1660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 1794d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samspackage android.renderscript; 1860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 1943ee06857bb7f99446d1d84f8789016c5d105558Jason Samsimport java.lang.reflect.Field; 2036e612a488511940b61f09803b270aa1c61b68e0Jason Sams 21b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap; 22650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guyimport android.graphics.BitmapFactory; 2336e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Config; 2436e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Log; 2536e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.view.Surface; 2643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich 2760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 28e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams/** 29e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams * @hide 30e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams * 31e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams **/ 3260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RenderScript { 333bc47d438171dce294e816366d53bc9eca772c5bJason Sams static final String LOG_TAG = "RenderScript_jni"; 34704ff64b099406bb328898a7443921f22dbffd6dJason Sams protected static final boolean DEBUG = false; 35650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy @SuppressWarnings({"UnusedDeclaration", "deprecation"}) 36704ff64b099406bb328898a7443921f22dbffd6dJason Sams protected static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV; 3760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 3860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 3960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 4002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams /* 4160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * We use a class initializer to allow the native code to cache some 4260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * field offsets. 4360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich */ 44650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) 45704ff64b099406bb328898a7443921f22dbffd6dJason Sams protected static boolean sInitialized; 46704ff64b099406bb328898a7443921f22dbffd6dJason Sams native protected static void _nInit(); 4760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 48dba3ba5b5bf6026abceced921b1b0d231b0faefdJason Sams 4960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich static { 5060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich sInitialized = false; 5160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich try { 52e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams System.loadLibrary("rs_jni"); 5360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich _nInit(); 5460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich sInitialized = true; 5560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } catch (UnsatisfiedLinkError e) { 5660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich Log.d(LOG_TAG, "RenderScript JNI library not found!"); 5760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 5960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 60ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams native void nInitElements(int a8, int rgba4444, int rgba8888, int rgb565); 61ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 6236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nDeviceCreate(); 6336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nDeviceDestroy(int dev); 64ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nDeviceSetConfig(int dev, int param, int value); 65704ff64b099406bb328898a7443921f22dbffd6dJason Sams native int nContextCreateGL(int dev, int ver, boolean useDepth); 66704ff64b099406bb328898a7443921f22dbffd6dJason Sams native int nContextCreate(int dev, int ver); 6736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextDestroy(int con); 683bc47d438171dce294e816366d53bc9eca772c5bJason Sams native void nContextSetSurface(int w, int h, Surface sur); 697d787b4722eaeb79cab42c36060336e092b77b5fJason Sams native void nContextSetPriority(int p); 70715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams native void nContextDump(int bits); 7196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams native void nContextFinish(); 7260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 7336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindRootScript(int script); 7436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindSampler(int sampler, int slot); 7554db59c3594e887a412a24713fc3daa1c2404593Jason Sams native void nContextBindProgramStore(int pfs); 7636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindProgramFragment(int pf); 7736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindProgramVertex(int pf); 78ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nContextBindProgramRaster(int pr); 7965e7aa56f56097418d617663683544c25b3988eaJason Sams native void nContextPause(); 8065e7aa56f56097418d617663683544c25b3988eaJason Sams native void nContextResume(); 81516c31911578db8ce53529483c3ded918ac7dc6bJason Sams native int nContextGetMessage(int[] data, boolean wait); 82516c31911578db8ce53529483c3ded918ac7dc6bJason Sams native void nContextInitToClient(); 83516c31911578db8ce53529483c3ded918ac7dc6bJason Sams native void nContextDeinitToClient(); 8436e612a488511940b61f09803b270aa1c61b68e0Jason Sams 8536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAssignName(int obj, byte[] name); 867ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams native void nObjDestroy(int id); 87730ee65d4ddb307898053b623120bad1655fadadJason Sams native void nObjDestroyOOB(int id); 8836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nFileOpen(byte[] name); 8936e612a488511940b61f09803b270aa1c61b68e0Jason Sams 90718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 91718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams native int nElementCreate(int type, int kind, boolean norm, int vecSize); 92718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams native int nElementCreate2(int[] elements, String[] names); 9336e612a488511940b61f09803b270aa1c61b68e0Jason Sams 9436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nTypeBegin(int elementID); 9536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nTypeAdd(int dim, int val); 9636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nTypeCreate(); 9743ee06857bb7f99446d1d84f8789016c5d105558Jason Sams native void nTypeFinalDestroy(Type t); 9843ee06857bb7f99446d1d84f8789016c5d105558Jason Sams native void nTypeSetupFields(Type t, int[] types, int[] bits, Field[] IDs); 9936e612a488511940b61f09803b270aa1c61b68e0Jason Sams 10036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAllocationCreateTyped(int type); 10136e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAllocationCreateFromBitmap(int dstFmt, boolean genMips, Bitmap bmp); 1028a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams native int nAllocationCreateBitmapRef(int type, Bitmap bmp); 10336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAllocationCreateFromBitmapBoxed(int dstFmt, boolean genMips, Bitmap bmp); 104650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy native int nAllocationCreateFromAssetStream(int dstFmt, boolean genMips, int assetStream); 10536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 106c2908e60c9b021fb4bb69acff8d49981dd4dade8Jason Sams native void nAllocationUploadToTexture(int alloc, boolean genMips, int baseMioLevel); 10707ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationUploadToBufferObject(int alloc); 108768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 10907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData1D(int id, int off, int count, int[] d, int sizeBytes); 110768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams native void nAllocationSubData1D(int id, int off, int count, short[] d, int sizeBytes); 111768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams native void nAllocationSubData1D(int id, int off, int count, byte[] d, int sizeBytes); 11207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData1D(int id, int off, int count, float[] d, int sizeBytes); 113768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 11407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, int[] d, int sizeBytes); 11507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, float[] d, int sizeBytes); 11640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAllocationRead(int id, int[] d); 11740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAllocationRead(int id, float[] d); 1182525a815220652b37e2e390fe8c62394a6d0e574Jason Sams native void nAllocationSubDataFromObject(int id, Type t, int offset, Object o); 1195f43fd289abbd5380b6068766daf721b555d0053Jason Sams native void nAllocationSubReadFromObject(int id, Type t, int offset, Object o); 12036e612a488511940b61f09803b270aa1c61b68e0Jason Sams 121aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk native int nFileA3DCreateFromAssetStream(int assetStream); 122aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk native int nFileA3DGetNumIndexEntries(int fileA3D); 123aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk native void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names); 124aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk native int nFileA3DGetEntryByIndex(int fileA3D, int index); 125aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 12636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DBindAllocation(int ad, int alloc); 12736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DSetConstraint(int ad, int dim, int value); 12836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DData(int ad, int[] d); 12936e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DData(int ad, float[] d); 130bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter1DSubData(int ad, int off, int count, int[] d); 13136e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DSubData(int ad, int off, int count, float[] d); 13236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAdapter1DCreate(); 13336e612a488511940b61f09803b270aa1c61b68e0Jason Sams 134bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DBindAllocation(int ad, int alloc); 135bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DSetConstraint(int ad, int dim, int value); 136bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DData(int ad, int[] d); 137bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DData(int ad, float[] d); 138bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, int[] d); 139bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, float[] d); 140bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native int nAdapter2DCreate(); 141bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 14222534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptBindAllocation(int script, int alloc, int slot); 14322534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptSetTimeZone(int script, byte[] timeZone); 144be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams native void nScriptInvoke(int id, int slot); 1454d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams native void nScriptInvokeV(int id, int slot, byte[] params); 1464d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams native void nScriptSetVarI(int id, int slot, int val); 1474d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams native void nScriptSetVarF(int id, int slot, float val); 1484d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams native void nScriptSetVarV(int id, int slot, byte[] val); 14922534176fb5c1257130ef4ee589739ca42766a32Jason Sams 15036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nScriptCBegin(); 15136e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nScriptCSetScript(byte[] script, int offset, int length); 15236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nScriptCCreate(); 15336e612a488511940b61f09803b270aa1c61b68e0Jason Sams 15436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nSamplerBegin(); 15536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nSamplerSet(int param, int value); 15636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nSamplerCreate(); 15736e612a488511940b61f09803b270aa1c61b68e0Jason Sams 15854db59c3594e887a412a24713fc3daa1c2404593Jason Sams native void nProgramStoreBegin(int in, int out); 15954db59c3594e887a412a24713fc3daa1c2404593Jason Sams native void nProgramStoreDepthFunc(int func); 16054db59c3594e887a412a24713fc3daa1c2404593Jason Sams native void nProgramStoreDepthMask(boolean enable); 16154db59c3594e887a412a24713fc3daa1c2404593Jason Sams native void nProgramStoreColorMask(boolean r, boolean g, boolean b, boolean a); 16254db59c3594e887a412a24713fc3daa1c2404593Jason Sams native void nProgramStoreBlendFunc(int src, int dst); 16354db59c3594e887a412a24713fc3daa1c2404593Jason Sams native void nProgramStoreDither(boolean enable); 16454db59c3594e887a412a24713fc3daa1c2404593Jason Sams native int nProgramStoreCreate(); 16536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 166ebfb436a49673693b98469683451bd9ede797557Jason Sams native int nProgramRasterCreate(int in, int out, boolean pointSmooth, boolean lineSmooth, boolean pointSprite); 167ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nProgramRasterSetLineWidth(int pr, float v); 168ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nProgramRasterSetPointSize(int pr, float v); 169ebfb436a49673693b98469683451bd9ede797557Jason Sams 1700011bcf57ff711a221a3a4c73f2a79125111647dJason Sams native void nProgramBindConstants(int pv, int slot, int mID); 17168afd01ec9fd37774d8291192952a25e5605b6fbJason Sams native void nProgramBindTexture(int vpf, int slot, int a); 17268afd01ec9fd37774d8291192952a25e5605b6fbJason Sams native void nProgramBindSampler(int vpf, int slot, int s); 1730011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 17468afd01ec9fd37774d8291192952a25e5605b6fbJason Sams native int nProgramFragmentCreate(int[] params); 1757e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams native int nProgramFragmentCreate2(String shader, int[] params); 17636e612a488511940b61f09803b270aa1c61b68e0Jason Sams 1770011bcf57ff711a221a3a4c73f2a79125111647dJason Sams native int nProgramVertexCreate(boolean texMat); 1780011bcf57ff711a221a3a4c73f2a79125111647dJason Sams native int nProgramVertexCreate2(String shader, int[] params); 17936e612a488511940b61f09803b270aa1c61b68e0Jason Sams 18036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightBegin(); 18136e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetIsMono(boolean isMono); 18236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetIsLocal(boolean isLocal); 18336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nLightCreate(); 18436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetColor(int l, float r, float g, float b); 18536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetPosition(int l, float x, float y, float z); 186bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams 1871bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams native int nSimpleMeshCreate(int batchID, int idxID, int[] vtxID, int prim); 1881bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams native void nSimpleMeshBindVertex(int id, int alloc, int slot); 1891bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams native void nSimpleMeshBindIndex(int id, int alloc); 1901bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams 19140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAnimationBegin(int attribCount, int keyframeCount); 19240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAnimationAdd(float time, float[] attribs); 19340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native int nAnimationCreate(); 19460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 195704ff64b099406bb328898a7443921f22dbffd6dJason Sams protected int mDev; 196704ff64b099406bb328898a7443921f22dbffd6dJason Sams protected int mContext; 197650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy @SuppressWarnings({"FieldCanBeLocal"}) 198704ff64b099406bb328898a7443921f22dbffd6dJason Sams protected MessageThread mMessageThread; 19960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 2008cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_U8; 2018cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_I8; 2028cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_U16; 2038cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_I16; 2048cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_U32; 2058cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_I32; 2068cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_F32; 2078cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams 2088cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_ELEMENT; 2098cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_TYPE; 2108cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_ALLOCATION; 2118cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_SAMPLER; 2128cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_SCRIPT; 2138cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_MESH; 2148cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_PROGRAM_FRAGMENT; 2158cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_PROGRAM_VERTEX; 2168cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_PROGRAM_RASTER; 2178cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_PROGRAM_STORE; 218a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 2193c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_A_8; 2203c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGB_565; 2213c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGB_888; 2223c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGBA_5551; 2233c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGBA_4444; 2243c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGBA_8888; 2253c0dfbab807a459622aeade4940daddf482dec66Jason Sams 2268cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_FLOAT_2; 2278cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_FLOAT_3; 2288cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_FLOAT_4; 2298cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_UCHAR_4; 2307d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 2314d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_CLAMP_NEAREST; 2324d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_CLAMP_LINEAR; 2334d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR; 2344d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_WRAP_NEAREST; 2354d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_WRAP_LINEAR; 2364d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_WRAP_LINEAR_MIP_LINEAR; 2374d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 23860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich /////////////////////////////////////////////////////////////////////////////////// 23943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich // 24060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 241516c31911578db8ce53529483c3ded918ac7dc6bJason Sams public static class RSMessage implements Runnable { 242516c31911578db8ce53529483c3ded918ac7dc6bJason Sams protected int[] mData; 243516c31911578db8ce53529483c3ded918ac7dc6bJason Sams protected int mID; 244516c31911578db8ce53529483c3ded918ac7dc6bJason Sams public void run() { 245516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 246516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 247516c31911578db8ce53529483c3ded918ac7dc6bJason Sams public RSMessage mMessageCallback = null; 248516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 2497d787b4722eaeb79cab42c36060336e092b77b5fJason Sams public enum Priority { 2507d787b4722eaeb79cab42c36060336e092b77b5fJason Sams LOW (5), //ANDROID_PRIORITY_BACKGROUND + 5 2517d787b4722eaeb79cab42c36060336e092b77b5fJason Sams NORMAL (-4); //ANDROID_PRIORITY_DISPLAY 2527d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 2537d787b4722eaeb79cab42c36060336e092b77b5fJason Sams int mID; 2547d787b4722eaeb79cab42c36060336e092b77b5fJason Sams Priority(int id) { 2557d787b4722eaeb79cab42c36060336e092b77b5fJason Sams mID = id; 2567d787b4722eaeb79cab42c36060336e092b77b5fJason Sams } 2577d787b4722eaeb79cab42c36060336e092b77b5fJason Sams } 2587d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 259771bebb94054d06f97284379c93a2620613513c3Jason Sams void validate() { 260771bebb94054d06f97284379c93a2620613513c3Jason Sams if (mContext == 0) { 261771bebb94054d06f97284379c93a2620613513c3Jason Sams throw new IllegalStateException("Calling RS with no Context active."); 262771bebb94054d06f97284379c93a2620613513c3Jason Sams } 263771bebb94054d06f97284379c93a2620613513c3Jason Sams } 264771bebb94054d06f97284379c93a2620613513c3Jason Sams 2657d787b4722eaeb79cab42c36060336e092b77b5fJason Sams public void contextSetPriority(Priority p) { 2665dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams validate(); 2677d787b4722eaeb79cab42c36060336e092b77b5fJason Sams nContextSetPriority(p.mID); 2687d787b4722eaeb79cab42c36060336e092b77b5fJason Sams } 2697d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 270704ff64b099406bb328898a7443921f22dbffd6dJason Sams protected static class MessageThread extends Thread { 271516c31911578db8ce53529483c3ded918ac7dc6bJason Sams RenderScript mRS; 272516c31911578db8ce53529483c3ded918ac7dc6bJason Sams boolean mRun = true; 273516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 274516c31911578db8ce53529483c3ded918ac7dc6bJason Sams MessageThread(RenderScript rs) { 275516c31911578db8ce53529483c3ded918ac7dc6bJason Sams super("RSMessageThread"); 276516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS = rs; 277516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 278516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 279516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 280516c31911578db8ce53529483c3ded918ac7dc6bJason Sams public void run() { 281516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // This function is a temporary solution. The final solution will 282516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // used typed allocations where the message id is the type indicator. 283516c31911578db8ce53529483c3ded918ac7dc6bJason Sams int[] rbuf = new int[16]; 284516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS.nContextInitToClient(); 285516c31911578db8ce53529483c3ded918ac7dc6bJason Sams while(mRun) { 286516c31911578db8ce53529483c3ded918ac7dc6bJason Sams int msg = mRS.nContextGetMessage(rbuf, true); 287516c31911578db8ce53529483c3ded918ac7dc6bJason Sams if (msg == 0) { 288516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // Should only happen during teardown. 289516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // But we want to avoid starving other threads during 290516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // teardown by yielding until the next line in the destructor 291516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // can execute to set mRun = false 292516c31911578db8ce53529483c3ded918ac7dc6bJason Sams try { 293516c31911578db8ce53529483c3ded918ac7dc6bJason Sams sleep(1, 0); 294516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } catch(InterruptedException e) { 295516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 296516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 297516c31911578db8ce53529483c3ded918ac7dc6bJason Sams if(mRS.mMessageCallback != null) { 298516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS.mMessageCallback.mData = rbuf; 299516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS.mMessageCallback.mID = msg; 300516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS.mMessageCallback.run(); 301516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 302516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 3033bc47d438171dce294e816366d53bc9eca772c5bJason Sams Log.d(LOG_TAG, "MessageThread exiting."); 304516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 305516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 306516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 307704ff64b099406bb328898a7443921f22dbffd6dJason Sams protected RenderScript() { 30860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 30960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 310704ff64b099406bb328898a7443921f22dbffd6dJason Sams public static RenderScript create() { 311704ff64b099406bb328898a7443921f22dbffd6dJason Sams RenderScript rs = new RenderScript(); 312704ff64b099406bb328898a7443921f22dbffd6dJason Sams 313704ff64b099406bb328898a7443921f22dbffd6dJason Sams rs.mDev = rs.nDeviceCreate(); 314704ff64b099406bb328898a7443921f22dbffd6dJason Sams rs.mContext = rs.nContextCreate(rs.mDev, 0); 315704ff64b099406bb328898a7443921f22dbffd6dJason Sams rs.mMessageThread = new MessageThread(rs); 316704ff64b099406bb328898a7443921f22dbffd6dJason Sams rs.mMessageThread.start(); 317704ff64b099406bb328898a7443921f22dbffd6dJason Sams Element.initPredefined(rs); 318704ff64b099406bb328898a7443921f22dbffd6dJason Sams return rs; 319efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } 320efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 321715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams public void contextDump(int bits) { 3225dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams validate(); 323715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams nContextDump(bits); 324715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams } 325715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams 32696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams public void finish() { 32796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams nContextFinish(); 32896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams } 32996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams 330f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams public void destroy() { 3315dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams validate(); 332516c31911578db8ce53529483c3ded918ac7dc6bJason Sams nContextDeinitToClient(); 333516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mMessageThread.mRun = false; 334516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 335f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams nContextDestroy(mContext); 336f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams mContext = 0; 337f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams 338f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams nDeviceDestroy(mDev); 339f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams mDev = 0; 340f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams } 34102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 342a9e7a05b84470257637c97d65f6562aa832c66efJason Sams boolean isAlive() { 343a9e7a05b84470257637c97d65f6562aa832c66efJason Sams return mContext != 0; 344a9e7a05b84470257637c97d65f6562aa832c66efJason Sams } 345a9e7a05b84470257637c97d65f6562aa832c66efJason Sams 34660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich /////////////////////////////////////////////////////////////////////////////////// 34760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich // Root state 34860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 349704ff64b099406bb328898a7443921f22dbffd6dJason Sams protected int safeID(BaseObj o) { 3506b9dec00afec359f091ed353f371f08ff150278aJason Sams if(o != null) { 3516b9dec00afec359f091ed353f371f08ff150278aJason Sams return o.mID; 352d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams } 3536b9dec00afec359f091ed353f371f08ff150278aJason Sams return 0; 35460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 35560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich} 35660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 35736e612a488511940b61f09803b270aa1c61b68e0Jason Sams 358