198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/* 298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Copyright (C) 2012 The Android Open Source Project 398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * you may not use this file except in compliance with the License. 698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * You may obtain a copy of the License at 798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 1098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Unless required by applicable law or agreed to in writing, software 1198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * See the License for the specific language governing permissions and 1498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * limitations under the License. 1598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 1698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 1798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspackage android.support.v8.renderscript; 1898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 19ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsimport android.util.SparseArray; 20ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 2198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/** 227d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * The parent class for all executable scripts. This should not be used by 237d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * applications. 2498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams **/ 2598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspublic class Script extends BaseObj { 26ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 27059fede7f200350b6131fc131f76248085485722Miao Wang * Determine if Incremental Intrinsic Support is needed 28059fede7f200350b6131fc131f76248085485722Miao Wang * 29059fede7f200350b6131fc131f76248085485722Miao Wang */ 30059fede7f200350b6131fc131f76248085485722Miao Wang private boolean mUseIncSupp; 31059fede7f200350b6131fc131f76248085485722Miao Wang protected void setIncSupp(boolean useInc) { 32059fede7f200350b6131fc131f76248085485722Miao Wang mUseIncSupp = useInc; 33059fede7f200350b6131fc131f76248085485722Miao Wang } 34059fede7f200350b6131fc131f76248085485722Miao Wang protected boolean isIncSupp() { 35059fede7f200350b6131fc131f76248085485722Miao Wang return mUseIncSupp; 36059fede7f200350b6131fc131f76248085485722Miao Wang } 37059fede7f200350b6131fc131f76248085485722Miao Wang /** 38059fede7f200350b6131fc131f76248085485722Miao Wang * An allocation for the compat context will be created when needed 39059fede7f200350b6131fc131f76248085485722Miao Wang * e.g. foreach(ain, aout), setVar(ain); 40059fede7f200350b6131fc131f76248085485722Miao Wang * 41059fede7f200350b6131fc131f76248085485722Miao Wang */ 4235ef270f319aeac81d562897c480b507102dc9aeMiao Wang long getDummyAlloc(Allocation ain) { 43059fede7f200350b6131fc131f76248085485722Miao Wang long dInElement = 0; 44059fede7f200350b6131fc131f76248085485722Miao Wang long dInType = 0; 45059fede7f200350b6131fc131f76248085485722Miao Wang long dummyAlloc = 0; 46059fede7f200350b6131fc131f76248085485722Miao Wang if (ain != null) { 47e536825342e722b68c498042fea387b5c5504f44Miao Wang Type inType = ain.getType(); 48e536825342e722b68c498042fea387b5c5504f44Miao Wang dInElement = inType.getElement().getDummyElement(mRS); 49e536825342e722b68c498042fea387b5c5504f44Miao Wang dInType = inType.getDummyType(mRS, dInElement); 50e536825342e722b68c498042fea387b5c5504f44Miao Wang int xBytesSize = inType.getX() * inType.getElement().getBytesSize(); 51e536825342e722b68c498042fea387b5c5504f44Miao Wang dummyAlloc = mRS.nIncAllocationCreateTyped(ain.getID(mRS), dInType, xBytesSize); 52059fede7f200350b6131fc131f76248085485722Miao Wang ain.setIncAllocID(dummyAlloc); 53059fede7f200350b6131fc131f76248085485722Miao Wang } 54059fede7f200350b6131fc131f76248085485722Miao Wang 55059fede7f200350b6131fc131f76248085485722Miao Wang return dummyAlloc; 56059fede7f200350b6131fc131f76248085485722Miao Wang } 57059fede7f200350b6131fc131f76248085485722Miao Wang /** 58ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * KernelID is an identifier for a Script + root function pair. It is used 59ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * as an identifier for ScriptGroup creation. 60ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * This class should not be directly created. Instead use the method in the 62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * reflected or intrinsic code "getKernelID_funcname()". 63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 64ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 65ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public static final class KernelID extends BaseObj { 66ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray android.renderscript.Script.KernelID mN; 67ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Script mScript; 68ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int mSlot; 69ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int mSig; 703d9b60c9ae71c4c09df0b4e59c825a5d631e1254Miao Wang KernelID(long id, RenderScript rs, Script s, int slot, int sig) { 71ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams super(id, rs); 72ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mScript = s; 73ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mSlot = slot; 74ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mSig = sig; 75ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 76ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 77ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 78ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams private final SparseArray<KernelID> mKIDs = new SparseArray<KernelID>(); 79ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 80ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Only to be used by generated reflected classes. 81ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 82ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 83ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param slot 84ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param sig 85ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ein 86ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param eout 87ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 88ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return KernelID 89ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 90ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams protected KernelID createKernelID(int slot, int sig, Element ein, Element eout) { 91ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams KernelID k = mKIDs.get(slot); 92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if (k != null) { 93ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return k; 94ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 95059fede7f200350b6131fc131f76248085485722Miao Wang 96059fede7f200350b6131fc131f76248085485722Miao Wang long id = mRS.nScriptKernelIDCreate(getID(mRS), slot, sig, mUseIncSupp); 97ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if (id == 0) { 98ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams throw new RSDriverException("Failed to create KernelID"); 99ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 100ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 101ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams k = new KernelID(id, mRS, this, slot, sig); 102ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 103ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mKIDs.put(slot, k); 104ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return k; 105ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 106ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 107ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 108b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni * InvokeID is an identifier for a invoke function. It is used 109b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni * as an identifier for ScriptGroup creation. 110b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni * 111b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni * This class should not be directly created. Instead use the method in the 112b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni * reflected or intrinsic code "getInvokeID_funcname()". 113b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni * 114b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni */ 115b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni public static final class InvokeID extends BaseObj { 116b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni Script mScript; 117b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni int mSlot; 118b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni InvokeID(long id, RenderScript rs, Script s, int slot) { 119b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni super(id, rs); 120b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni mScript = s; 121b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni mSlot = slot; 122b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni } 123b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni } 124b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni 125b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni private final SparseArray<InvokeID> mIIDs = new SparseArray<InvokeID>(); 126b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni /** 127b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni * Only to be used by generated reflected classes. 128b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni */ 129b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni protected InvokeID createInvokeID(int slot) { 130b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni InvokeID i = mIIDs.get(slot); 131b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni if (i != null) { 132b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni return i; 133b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni } 134b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni 135b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni long id = mRS.nScriptInvokeIDCreate(getID(mRS), slot); 136b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni if (id == 0) { 137b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni throw new RSDriverException("Failed to create KernelID"); 138b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni } 139b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni 140b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni i = new InvokeID(id, mRS, this, slot); 141b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni mIIDs.put(slot, i); 142b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni return i; 143b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni } 144b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni 145b9da3f66de38ee08c42e4612087b81d7331bdf74Yang Ni /** 146ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * FieldID is an identifier for a Script + exported field pair. It is used 147ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * as an identifier for ScriptGroup creation. 148ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 149ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * This class should not be directly created. Instead use the method in the 150ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * reflected or intrinsic code "getFieldID_funcname()". 151ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 152ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 153ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public static final class FieldID extends BaseObj { 154ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray android.renderscript.Script.FieldID mN; 155ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Script mScript; 156ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int mSlot; 1573d9b60c9ae71c4c09df0b4e59c825a5d631e1254Miao Wang FieldID(long id, RenderScript rs, Script s, int slot) { 158ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams super(id, rs); 159ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mScript = s; 160ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mSlot = slot; 161ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 162ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 163ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 164ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams private final SparseArray<FieldID> mFIDs = new SparseArray(); 165ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 166ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Only to be used by generated reflected classes. 167ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 168ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param slot 169ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param e 170ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 171ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return FieldID 172ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 173ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams protected FieldID createFieldID(int slot, Element e) { 174ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams FieldID f = mFIDs.get(slot); 175ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if (f != null) { 176ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return f; 177ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 178ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 179059fede7f200350b6131fc131f76248085485722Miao Wang long id = mRS.nScriptFieldIDCreate(getID(mRS), slot, mUseIncSupp); 180ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if (id == 0) { 181ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams throw new RSDriverException("Failed to create FieldID"); 182ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 183ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 184ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams f = new FieldID(id, mRS, this, slot); 185ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mFIDs.put(slot, f); 186ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return f; 187ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 188ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 18998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 19098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 19198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 19298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param slot 19398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 19498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected void invoke(int slot) { 195059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptInvoke(getID(mRS), slot, mUseIncSupp); 19698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 19798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 19898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 19998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 20098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 20198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param slot 20298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param v 20398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 20498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected void invoke(int slot, FieldPacker v) { 20598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (v != null) { 206059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptInvokeV(getID(mRS), slot, v.getData(), mUseIncSupp); 20798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } else { 208059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptInvoke(getID(mRS), slot, mUseIncSupp); 20998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 21098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 21198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 21298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 21398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 21498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 215ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * @param va 216ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * @param slot 217ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray */ 218ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray public void bindAllocation(Allocation va, int slot) { 219ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mRS.validate(); 220ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray if (va != null) { 221059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptBindAllocation(getID(mRS), va.getID(mRS), slot, mUseIncSupp); 222ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } else { 223059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptBindAllocation(getID(mRS), 0, slot, mUseIncSupp); 224ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 225ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 226ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 227ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray public void setTimeZone(String timeZone) { 228ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mRS.validate(); 229ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray try { 230059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptSetTimeZone(getID(mRS), timeZone.getBytes("UTF-8"), mUseIncSupp); 231ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } catch (java.io.UnsupportedEncodingException e) { 232ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray throw new RuntimeException(e); 233ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 234ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 235ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 236ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 237ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray /** 238ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Only intended for use by generated reflected code. 239ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * 24098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param slot 24198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param ain 24298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param aout 24398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param v 24498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 24598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v) { 24698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (ain == null && aout == null) { 24798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException( 24898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams "At least one of ain or aout is required to be non-null."); 24998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 2503d9b60c9ae71c4c09df0b4e59c825a5d631e1254Miao Wang long in_id = 0; 251059fede7f200350b6131fc131f76248085485722Miao Wang long out_id = 0; 25298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (ain != null) { 25398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams in_id = ain.getID(mRS); 25498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 25598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (aout != null) { 25698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams out_id = aout.getID(mRS); 25798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 258059fede7f200350b6131fc131f76248085485722Miao Wang 25998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams byte[] params = null; 26098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (v != null) { 26198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams params = v.getData(); 26298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 263059fede7f200350b6131fc131f76248085485722Miao Wang 264059fede7f200350b6131fc131f76248085485722Miao Wang if (mUseIncSupp) { 265059fede7f200350b6131fc131f76248085485722Miao Wang long ainInc = getDummyAlloc(ain); 266059fede7f200350b6131fc131f76248085485722Miao Wang long aoutInc = getDummyAlloc(aout); 267059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptForEach(getID(mRS), slot, ainInc, aoutInc, params, mUseIncSupp); 268059fede7f200350b6131fc131f76248085485722Miao Wang } else { 269059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptForEach(getID(mRS), slot, in_id, out_id, params, mUseIncSupp); 270059fede7f200350b6131fc131f76248085485722Miao Wang } 27198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 27298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 2737d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 2747d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Only intended for use by generated reflected code. 2757d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 2767d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param slot 2777d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param ain 2787d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param aout 2797d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param v 2807d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param sc 2817d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 282be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v, LaunchOptions sc) { 283be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray if (ain == null && aout == null) { 2842da197aafb9325a3ec5e546c4a15b73ce592c0b9Stephen Hines throw new RSIllegalArgumentException( 2852da197aafb9325a3ec5e546c4a15b73ce592c0b9Stephen Hines "At least one of ain or aout is required to be non-null."); 2862da197aafb9325a3ec5e546c4a15b73ce592c0b9Stephen Hines } 2872da197aafb9325a3ec5e546c4a15b73ce592c0b9Stephen Hines 2882da197aafb9325a3ec5e546c4a15b73ce592c0b9Stephen Hines if (sc == null) { 2892da197aafb9325a3ec5e546c4a15b73ce592c0b9Stephen Hines forEach(slot, ain, aout, v); 2902da197aafb9325a3ec5e546c4a15b73ce592c0b9Stephen Hines return; 291be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 2923d9b60c9ae71c4c09df0b4e59c825a5d631e1254Miao Wang long in_id = 0; 293059fede7f200350b6131fc131f76248085485722Miao Wang long out_id = 0; 294be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray if (ain != null) { 295be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray in_id = ain.getID(mRS); 296be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 297be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray if (aout != null) { 298be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray out_id = aout.getID(mRS); 299be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 300059fede7f200350b6131fc131f76248085485722Miao Wang 301be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray byte[] params = null; 302be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray if (v != null) { 303be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray params = v.getData(); 304be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 305059fede7f200350b6131fc131f76248085485722Miao Wang if (mUseIncSupp) { 306059fede7f200350b6131fc131f76248085485722Miao Wang long ainInc = getDummyAlloc(ain); 307059fede7f200350b6131fc131f76248085485722Miao Wang long aoutInc = getDummyAlloc(aout); 308059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptForEachClipped(getID(mRS), slot, ainInc, aoutInc, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend, mUseIncSupp); 309059fede7f200350b6131fc131f76248085485722Miao Wang } else { 310059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptForEachClipped(getID(mRS), slot, in_id, out_id, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend, mUseIncSupp); 311059fede7f200350b6131fc131f76248085485722Miao Wang } 312be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 313be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray 3143d9b60c9ae71c4c09df0b4e59c825a5d631e1254Miao Wang Script(long id, RenderScript rs) { 31598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams super(id, rs); 316059fede7f200350b6131fc131f76248085485722Miao Wang mUseIncSupp = false; 31798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 31898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 31998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 32098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 32198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 3223cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang * @hide 3233cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang */ 3243cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang protected void forEach(int slot, Allocation[] ains, Allocation aout, 3253cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang FieldPacker v) { 3263cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang forEach(slot, ains, aout, v, null); 3273cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } 3283cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang 3293cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang /** 3303cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang * Only intended for use by generated reflected code. 3313cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang * 3323cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang * @hide 3333cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang */ 3343cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang protected void forEach(int slot, Allocation[] ains, Allocation aout, 3353cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang FieldPacker v, LaunchOptions sc) { 3363cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang // TODO: Is this necessary if nScriptForEach calls validate as well? 3373cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang mRS.validate(); 3383cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang if (ains != null) { 3393cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang for (Allocation ain : ains) { 3403cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang mRS.validateObject(ain); 3413cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } 3423cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } 3433cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang mRS.validateObject(aout); 3443cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang 3453cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang if (ains == null && aout == null) { 3463cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang throw new RSIllegalArgumentException( 3473cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang "At least one of ain or aout is required to be non-null."); 3483cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } 3493cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang 3503cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang long[] in_ids; 3513cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang if (ains != null) { 3523cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang in_ids = new long[ains.length]; 3533cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang for (int index = 0; index < ains.length; ++index) { 3543cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang in_ids[index] = ains[index].getID(mRS); 3553cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } 3563cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } else { 3573cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang in_ids = null; 3583cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } 3593cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang 3603cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang long out_id = 0; 3613cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang if (aout != null) { 3623cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang out_id = aout.getID(mRS); 3633cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } 3643cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang 3653cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang byte[] params = null; 3663cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang if (v != null) { 3673cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang params = v.getData(); 3683cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } 3693cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang 3703cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang int[] limits = null; 3713cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang if (sc != null) { 3723cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang limits = new int[6]; 3733cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang 3743cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang limits[0] = sc.xstart; 3753cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang limits[1] = sc.xend; 3763cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang limits[2] = sc.ystart; 3773cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang limits[3] = sc.yend; 3783cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang limits[4] = sc.zstart; 3793cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang limits[5] = sc.zend; 3803cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } 3813cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang 3823cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang mRS.nScriptForEach(getID(mRS), slot, in_ids, out_id, params, limits); 3833cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang } 3843cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang 3853cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang /** 386e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross * Only intended for use by generated reflected code. (General reduction) 387e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross * 388e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross * @hide 389e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross */ 390e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross protected void reduce(int slot, Allocation[] ains, Allocation aout, LaunchOptions sc) { 391e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross mRS.validate(); 392e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross if (ains == null || ains.length < 1) { 393e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross throw new RSIllegalArgumentException( 394e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross "At least one input is required."); 395e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross } 396e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross if (aout == null) { 397e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross throw new RSIllegalArgumentException( 398e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross "aout is required to be non-null."); 399e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross } 400e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross for (Allocation ain : ains) { 401e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross mRS.validateObject(ain); 402e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross } 403e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross 404e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross long[] in_ids = new long[ains.length]; 405e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross for (int index = 0; index < ains.length; ++index) { 406e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross in_ids[index] = ains[index].getID(mRS); 407e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross } 408e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross long out_id = aout.getID(mRS); 409e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross 410e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross int[] limits = null; 411e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross if (sc != null) { 412e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross limits = new int[6]; 413e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross 414e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross limits[0] = sc.xstart; 415e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross limits[1] = sc.xend; 416e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross limits[2] = sc.ystart; 417e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross limits[3] = sc.yend; 418e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross limits[4] = sc.zstart; 419e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross limits[5] = sc.zend; 420e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross } 421e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross 422b96cf883ae029038386da87af40b2acf72a54d5bDavid Gross mRS.nScriptReduce(getID(mRS), slot, in_ids, out_id, limits); 423e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross } 424e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross 425e4a401fd3e2f777365c2ee9ee277c68065d5b178David Gross /** 42642e1c8ed103fb24059cb6d689cb06179f04f7e41Matt Wala * Only intended for use by generated reflected code. 42742e1c8ed103fb24059cb6d689cb06179f04f7e41Matt Wala * 42898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index 42998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param v 43098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 43198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setVar(int index, float v) { 432059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptSetVarF(getID(mRS), index, v, mUseIncSupp); 43398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 43498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 43598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 43698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 43798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 43898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index 43998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param v 44098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 44198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setVar(int index, double v) { 442059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptSetVarD(getID(mRS), index, v, mUseIncSupp); 44398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 44498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 44598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 44698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 44798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 44898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index 44998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param v 45098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 45198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setVar(int index, int v) { 452059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptSetVarI(getID(mRS), index, v, mUseIncSupp); 45398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 45498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 45598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 45698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 45798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 45898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index 45998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param v 46098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 46198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setVar(int index, long v) { 4621aaa8b2c1e7d3cbacb743e7231a56bfc8358838fMiao Wang mRS.nScriptSetVarJ(getID(mRS), index, v, mUseIncSupp); 46398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 46498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 46598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 46698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 46798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 46898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index 46998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param v 47098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 47198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setVar(int index, boolean v) { 472059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptSetVarI(getID(mRS), index, v ? 1 : 0, mUseIncSupp); 47398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 47498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 47598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 47698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 47798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 47898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index 47998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param o 48098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 48198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setVar(int index, BaseObj o) { 482059fede7f200350b6131fc131f76248085485722Miao Wang if (mUseIncSupp) { 483059fede7f200350b6131fc131f76248085485722Miao Wang long oInc = getDummyAlloc((Allocation)o); 484059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : oInc, mUseIncSupp); 485059fede7f200350b6131fc131f76248085485722Miao Wang } else { 486059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : o.getID(mRS), mUseIncSupp); 487059fede7f200350b6131fc131f76248085485722Miao Wang } 48898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 48998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 49098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 49198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 49298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 49398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index 49498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param v 49598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 49698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setVar(int index, FieldPacker v) { 497059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptSetVarV(getID(mRS), index, v.getData(), mUseIncSupp); 49898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 49998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 50098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 50198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Only intended for use by generated reflected code. 50298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 50398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index 50498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param v 50598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param e 50698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param dims 50798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 50898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void setVar(int index, FieldPacker v, Element e, int[] dims) { 509059fede7f200350b6131fc131f76248085485722Miao Wang if (mUseIncSupp) { 510059fede7f200350b6131fc131f76248085485722Miao Wang long dElement = e.getDummyElement(mRS); 511059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), dElement, dims, mUseIncSupp); 512059fede7f200350b6131fc131f76248085485722Miao Wang } else { 513059fede7f200350b6131fc131f76248085485722Miao Wang mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), e.getID(mRS), dims, mUseIncSupp); 514059fede7f200350b6131fc131f76248085485722Miao Wang } 51598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 51698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 5177d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 5187d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Only intended for use by generated reflected code. 5197d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 5207d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 52198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static class Builder { 52298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RenderScript mRS; 52398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 52498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Builder(RenderScript rs) { 52598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS = rs; 52698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 52798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 52898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 52998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 5307d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 5317d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Only intended for use by generated reflected code. 5327d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 5337d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 53498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static class FieldBase { 53598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected Element mElement; 53698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected Allocation mAllocation; 53798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 53898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected void init(RenderScript rs, int dimx) { 53998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT); 54098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 54198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 54298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected void init(RenderScript rs, int dimx, int usages) { 54398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT | usages); 54498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 54598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 54698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams protected FieldBase() { 54798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 54898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 54998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Element getElement() { 55098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mElement; 55198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 55298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 55398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Type getType() { 55498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mAllocation.getType(); 55598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 55698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 55798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Allocation getAllocation() { 55898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mAllocation; 55998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 56098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 56198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams //@Override 56298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public void updateAllocation() { 56398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 56498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 565be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray 566be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray 5677d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 568ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * Class for specifying the specifics about how a kernel will be 569ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * launched. 570ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * 571ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * This class can specify a potential range of cells on which to 572ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * run a kernel. If no set is called for a dimension then this 573ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * class will have no impact on that dimension when the kernel 574ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * is executed. 575ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * 576ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * The forEach kernel launch will operate over the intersection of 577ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * the dimensions. 578ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * 579ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * Example: 580ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * LaunchOptions with setX(5, 15) 581ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * Allocation with dimension X=10, Y=10 582ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * The resulting forEach run would execute over: 583ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * x = 5 to 9 (inclusive) and 584ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * y = 0 to 9 (inclusive). 5857d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 5867d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 5877d435ae5ba100be5710b685653cc351cab159c11Stephen Hines public static final class LaunchOptions { 5887d435ae5ba100be5710b685653cc351cab159c11Stephen Hines private int xstart = 0; 5897d435ae5ba100be5710b685653cc351cab159c11Stephen Hines private int ystart = 0; 5907d435ae5ba100be5710b685653cc351cab159c11Stephen Hines private int xend = 0; 5917d435ae5ba100be5710b685653cc351cab159c11Stephen Hines private int yend = 0; 5927d435ae5ba100be5710b685653cc351cab159c11Stephen Hines private int zstart = 0; 5937d435ae5ba100be5710b685653cc351cab159c11Stephen Hines private int zend = 0; 5947d435ae5ba100be5710b685653cc351cab159c11Stephen Hines private int strategy; 5957d435ae5ba100be5710b685653cc351cab159c11Stephen Hines 5967d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 597ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * Set the X range. xstartArg is the lowest coordinate of the range, 598ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * and xendArg-1 is the highest coordinate of the range. 5997d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6007d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param xstartArg Must be >= 0 601ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * @param xendArg Must be > xstartArg 6027d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6037d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @return LaunchOptions 6047d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 605be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray public LaunchOptions setX(int xstartArg, int xendArg) { 606be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray if (xstartArg < 0 || xendArg <= xstartArg) { 607be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 608be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 609be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray xstart = xstartArg; 610be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray xend = xendArg; 611be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray return this; 612be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 613be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray 6147d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 615ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * Set the Y range. ystartArg is the lowest coordinate of the range, 616ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * and yendArg-1 is the highest coordinate of the range. 6177d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6187d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param ystartArg Must be >= 0 619ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * @param yendArg Must be > ystartArg 6207d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6217d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @return LaunchOptions 6227d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 623be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray public LaunchOptions setY(int ystartArg, int yendArg) { 624be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray if (ystartArg < 0 || yendArg <= ystartArg) { 625be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 626be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 627be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray ystart = ystartArg; 628be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray yend = yendArg; 629be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray return this; 630be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 631be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray 6327d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 633ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * Set the Z range. zstartArg is the lowest coordinate of the range, 634ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * and zendArg-1 is the highest coordinate of the range. 6357d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6367d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param zstartArg Must be >= 0 637ec7aaf761b70596614cb832939c881eea6e2941fMiao Wang * @param zendArg Must be > zstartArg 6387d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6397d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @return LaunchOptions 6407d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 641be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray public LaunchOptions setZ(int zstartArg, int zendArg) { 642be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray if (zstartArg < 0 || zendArg <= zstartArg) { 643be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 644be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 645be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray zstart = zstartArg; 646be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray zend = zendArg; 647be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray return this; 648be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 649be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray 650be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray 6517d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 6527d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Returns the current X start 6537d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6547d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @return int current value 6557d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 656be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray public int getXStart() { 657be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray return xstart; 658be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 6597d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 6607d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Returns the current X end 6617d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6627d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @return int current value 6637d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 664be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray public int getXEnd() { 665be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray return xend; 666be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 6677d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 6687d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Returns the current Y start 6697d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6707d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @return int current value 6717d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 672be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray public int getYStart() { 673be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray return ystart; 674be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 6757d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 6767d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Returns the current Y end 6777d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6787d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @return int current value 6797d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 680be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray public int getYEnd() { 681be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray return yend; 682be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 6837d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 6847d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Returns the current Z start 6857d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6867d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @return int current value 6877d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 688be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray public int getZStart() { 689be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray return zstart; 690be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 6917d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 6927d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Returns the current Z end 6937d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 6947d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @return int current value 6957d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 696be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray public int getZEnd() { 697be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray return zend; 698be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 699be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray 700be995a8c3431dd87ca8877f56d922689eea35ac1Tim Murray } 70198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams} 702